我正在使用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”项目中。
答案 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>
更好的解决方案是更改模块的名称,因为使用关键字命名任何项目工件都被认为是不好的做法,并且您可能会遇到进一步的问题。