2009-09-25 58 views
18

使用Maven插件的战争,我产生WAR其中包括以下目录:如何从Maven生成的war中排除pom.xml?

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

在释放,我想这个Maven的目录中排除。我怎样才能做到这一点?

我试过最新的maven-war-plugin(2.1-beta-1),它有配置“packagingExcludes”,但它不起作用,因为我希望。

有什么建议吗?

回答

13

使用标准的Maven包装,你不能忽略我所知的文件。但是可以使用maven-assembly-plugin来构建战争,在这种情况下,您可以更好地控制工件的内容,并可以省略pom.xml。

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

更新:在与帕斯卡答案同步的奇怪位上,我刚刚读到Archiver reference,看来这可以通过将addMavenDescriptor属性设置为false来完成。就我个人而言,由于上述原因,我仍然会避免这样做。但是你可能想要改变你对帕斯卡答案的接受程度。

+0

+1感谢丰富的对所有的Maven相关的问题你有见地的意见! :-)我学会了你所有的答案。在这一点上,我对第二段特别感兴趣,更多与最佳实践和经验教训有关。 – KLE 2009-09-25 15:05:28

+0

我同意诊断目的。但是,我们在pom.xml中有一些特殊的定制,它揭示了构建机器上的文件结构。当然,我们不想将这些信息暴露给客户或任何用户。我会尝试maven-assembly-plugin。谢谢! – user179080 2009-09-25 15:27:08

+1

我倾向于同意Rich(我发现保留这些文件也很方便),但我认为Maven Archiver提供了一个允许避免打包这些文件的配置选项。请参阅下面的答案。 – 2009-10-02 17:17:21

0

将META-INF文件夹放入资源目录或源目录的根目录将会破坏由Maven创建的META-INF内容。对于WAR文件,将META-INF放入您的Web内容目录中将会执行相同的操作。

向该定制META-INF添加其他内容将覆盖maven创建的内容。

+0

我在资源目录中放置了一个META-INF文件夹,不仅maven /目录被插入,而且我的MANIFEST.MF文件被覆盖。我正在使用maven-war-plugin 2.0版。我试过版本2.1.beta-1,仍然是一样的。 – user179080 2009-09-25 20:46:22

37

我不确定,但我认为Maven Archiver(主要用于插件处理包装)可以配置为实现此目的。

关于<addMavenDescriptor>元素,Maven的归档Reference说:

是否生成的存档将包含这两个Maven的文件:在META-INF/maven/${groupId}/${artifactId}/pom.xml

  • 的POM文件,位于存档
  • A 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> 
+0

+1,巧合的是,我只是在编辑我的答案的方式上阅读了一下这个问题的存档:http://stackoverflow.com/questions/1510071/ – 2009-10-02 17:23:43

+0

嗯,我只是在挖掘时发现了这一点清单问题的存档者:)如果您想更新您的答案,请告诉我。 – 2009-10-02 17:38:44

+0

我更新了我的答案,并建议OP接受你的答案,然后一些讨厌的人低估了我。迷人的 – 2009-10-02 17:43:14

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> 
相关问题