使用 Maven 战争插件,我生成 WAR,其中包括以下目录:
元信息 -- 行家 -- com.abc.def -- myServlet -- pom.xml -- pom.properties
在发布时,我想排除这个 Maven 目录。我怎样才能做到这一点?
我尝试了最新的 maven-war-plugin (2.1-beta-1),它具有配置“packagingExcludes”,但它不能按我的意愿工作。
有什么建议么?
我不确定,但我认为可以配置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>
据我所知,使用标准的 Maven 包装,您不能省略该文件。然而,可以使用maven-assembly-plugin来构建战争,在这种情况下,您可以更精细地控制工件的内容,并且可以省略 pom.xml。
但是,我个人发现保留 pom.xml 用于诊断目的很有用。在试图找出您的应用程序出了什么问题时,了解用于构建和组装战争的东西会很方便。
更新:与 Pascal 的回答有点奇怪的同步性,我刚刚阅读了Archiver 参考资料,看来这可以通过将addMavenDescriptor
属性设置为 false 来完成。出于上述原因,我个人仍然会避免这样做。但是您可能希望将您的接受更改为 Pascal 的答案。
将 META-INF 文件夹放在资源目录或源目录的根目录中会破坏 Maven 创建的 META-INF 内容。对于 WAR 文件,将 META-INF 放在您的 Web 内容目录中也可以。
向该自定义 META-INF 添加其他内容将覆盖 Maven 将创建的内容。
<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>