来自依赖战争的Webapp内容在本地复制

时间:2018-01-01 18:25:18

标签: java maven web-applications war

我正在使用maven编写应用程序。最终结果是一个war文件。我以这样的方式配置它,我有一个名为“war”的项目,它获取所有需要的罐子并产生最后的战争。我有一个名为“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”的本地webapp文件夹中。有没有办法停用这个,以便ui的webapp的内容只在最终的jar中结束?否则,我的“战争”项目会受到来自其他模块的文件和文件夹的污染,并且永远不会被清除。所以在ui中添加然后删除的文件仍将出现在“war”项目中。

1 个答案:

答案 0 :(得分:0)

您尚未从pom.xml附加战争配置,我假设您使用的是maven overlays默认设置。

您的问题来自使用“ war”作为项目名称,该名称与叠加层默认设置冲突。根据WAR插件documentation

  

workDirectory
  必要时将相关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>

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