如何从Maven生成的战争中排除pom.xml?

use*_*080 20 maven-2 pom.xml

使用Maven war插件,我生成包含以下目录的WAR:

META-INF
-- maven
   -- com.abc.def
      -- myServlet
         -- pom.xml
         -- pom.properties

在发布中,我想要排除这个maven目录.我怎样才能做到这一点?

我尝试了最新的maven-war-plugin(2.1-beta-1),它配置了"packagingExcludes",但它没有按照我的意愿工作.

有什么建议?

Pas*_*ent 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>
Run Code Online (Sandbox Code Playgroud)


Ric*_*ler 14

使用标准Maven包装,您不能在我所知的情况下省略该文件.但是,可以使用maven-assembly-plugin来构造war,在这种情况下,您可以对工件的内容进行更精细的控制,并且可以省略pom.xml.

但是,我个人发现保留pom.xml用于诊断目的很有用.在试图弄清楚你的应用程序出了什么问题时,了解用于构建和组装战争的内容非常方便.

更新:与Pascal的答案有一个奇怪的同步性,我刚刚阅读了Archiver参考资料,看来这可以通过将addMavenDescriptor属性设置为false 来完成.就个人而言,由于上述原因,我仍然会避免这样做.但是你可能想要改变你对Pascal答案的接受程度.