使用Maven war插件,我生成包含以下目录的WAR:
META-INF -- maven -- com.abc.def -- myServlet -- pom.xml -- pom.properties
在发布中,我想要排除这个maven目录。我怎么能这样做?
我尝试了最新的maven-war-plugin(2.1-beta-1),它配置了“packagingExcludes”,但它没有按照我的意愿工作。
有什么建议吗?
答案 0 :(得分:40)
我不确定,但我认为可以配置Maven Archiver(主要用于处理包装的插件)来实现这一点。
关于<addMavenDescriptor>
元素,Maven Archiver Reference说:
生成的存档是否包含这两个Maven文件:
- pom文件,位于
的存档中META-INF/maven/${groupId}/${artifactId}/pom.xml
- 的存档中
pom.properties
文件,位于META-INF/maven/${groupId}/${artifactId}/pom.properties
默认值为true。
所以像这样配置的pom应该可以解决这个问题:
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.0</version>
<configuration>
<archive>
<addMavenDescriptor>false</addMavenDescriptor>
</archive>
</configuration>
</plugin>
...
</plugins>
</build>
...
</project>
答案 1 :(得分:14)
使用标准Maven包装,您不能在我所知的情况下省略该文件。但是,可以使用maven-assembly-plugin来构造战争,在这种情况下,您可以对工件的内容进行更精细的控制,并且可以省略pom.xml。
但是我个人发现保留pom.xml用于诊断目的很有用。在试图弄清楚你的应用程序出了什么问题时,了解用于构建和组装战争的内容非常方便。
更新:与Pascal的回答奇怪的同步,我刚刚阅读了Archiver reference,看来这可以通过将addMavenDescriptor
属性设置为false来完成。就个人而言,由于上述原因,我仍然会避免这样做。但是你可能想要改变你对Pascal答案的接受度。
答案 2 :(得分:0)
将META-INF文件夹放在资源目录或源目录的根目录中将破坏Maven创建的META-INF内容。对于WAR文件,将META-INF放在Web内容目录中也是如此。
向该自定义META-INF添加其他内容将覆盖maven将创建的内容。
答案 3 :(得分:0)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1</version>
<configuration>
<warSourceExcludes>pom.xml</warSourceExcludes>
</configuration>
</plugin>
或
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1</version>
<configuration>
<warSourceExcludes>here/there/everywhere/a/pom.xml</warSourceExcludes>
</configuration>
</plugin>