【问题标题】:Webapp content from dependency war copied locally来自依赖战争的 Webapp 内容在本地复制
【发布时间】:2018-01-01 18:25:17
【问题描述】:

我正在使用 maven 编写应用程序。最终结果是一个战争文件。我以这样的方式配置它,我有一个名为“war”的项目,它获取所有需要的 jar 并产生最终的战争。我有一个名为“ui”的第二个项目,其中包含所有 ui 元素。此 ui 项目还包含要包含在 webapp 目录中的文件。这就是为什么 ui 模块也被打包为一个 war 文件的原因。在项目“war”的 pom.xml 中,我包含了以下依赖项:

<dependency>
        <groupId>ui</groupId>
        <artifactId>ui</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <type>war</type>
</dependency>

当我从“war”项目中打包所有内容时,“ui”的webapp不仅复制到最终的war中,而且还复制到了项目“war”的本地webapp文件夹中。有没有办法停用它,以便 ui 的 webapp 的内容只出现在最终的 jar 中?否则我的“战争”项目会被来自另一个模块的文件和文件夹污染,并且它们永远不会被清理。所以在 ui 中添加然后删除的文件仍然会出现在“war”项目中。

【问题讨论】:

  • 深入了解overlays..
  • 我查看了叠加层,但找不到适合我需要的合适参数。 “战争”项目总是空的,所以我不需要设置文件如何合并的规则。我只想确保文件只复制到最终的战争文件中。

标签: java maven web-applications war


【解决方案1】:

您没有从 pom.xml 附加战争配置,我假设您使用的是 maven 覆盖默认设置。

您的问题来自使用“war”作为项目名称,这与覆盖默认值冲突。根据WAR插件documentation

工作目录
如果需要,将依赖的 WAR 解压到的目录。
默认值:${project.build.directory}/war/work

您需要将 workDirectory 显式设置为不同的值:

<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1.1</version>
        <configuration>
                <workDirectory>target/overlay-war-folder</workDirectory>
                <overlays>
                        <overlay>
                                <groupId>your-group-id</groupId>
                                <artifactId>ui</artifactId>
                        </overlay>
                </overlays>
        </configuration>
</plugin>

更好的解决方案是更改模块的名称,因为使用关键字来命名任何项目工件被认为是一种不好的做法,您可能会遇到更多问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    • 2016-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多