2012-11-05 40 views
6

我有一个Java web应用程序,其中我有一些文件夹内的标准webapp源目录(src/main/webapp),我不想复制到战争(explodedpackaged)。如何排除文件被maven复制到爆炸战中

我不希望这些文件复制的原因之一是我们在爆炸战争中的.js和.css文件上运行YUI JS & CSS极小化器&压缩器​​。我想要排除的文件在压缩阶段会产生错误。我不希望他们加入战争的另一个原因是他们支持测试Web应用程序中的单页JS应用程序(它们是依赖于node/angular.js的客户端JS测试脚本)。

下面是从POM.xml的相关章节:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.1.1</version> 
    <executions> 
    <execution> 
     <id>parent-resources</id> 
     <configuration> 
     <failOnMissingWebXml>false</failOnMissingWebXml> 
     <overlays> 
     </overlays> 
     <webappDirectory>${project.build.directory}/${project.build.finalName}-work</webappDirectory> 
     </configuration> 
     <phase>generate-sources</phase> 
     <goals> 
     <goal>exploded</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

我都试过了,没有成功,使用warSourceExcludes排除某些路径,但无济于事。我使用的示例如下所示,其中client/是直接在文件夹src/main/webapp下:

<configuration> 
    ... 
    <warSourceExcludes> 
    <excludes> 
     <exclude> 
     client/ 
     </exclude> 
    </excludes> 
    </warSourceExcludes> 
    ... 
</configuration> 

什么是排除某些路径的正确途径,或单个文件,Web应用程序源目录中被列入爆炸的战争?

UPDATE

从@maba我更新了配置如下建议继:

<configuration> 
    <failOnMissingWebXml>false</failOnMissingWebXml> 
    <overlays> 
    </overlays>         
    <webappDirectory>${project.build.directory}/${project.build.finalName}-work</webappDirectory> 
    <warSourceExcludes>client/</warSourceExcludes> 
</configuration> 

的文件夹,client/,仍然得到跨越复制。有任何想法吗?

+1

warSourceExcludes被记录为一个逗号分隔的字符串,所以不应该在没有任何XML 。 http://maven.apache.org/plugins/maven-war-plugin/war-mojo.html –

+0

问题已更新,以反映正确的使用 - 但仍然不适用于我。 – Kris

+0

我怀疑我的'pom.xml'还有一个问题。我会考虑是否这几周原始项目从原型 – Kris

回答

6

感谢@alexksandr & @maba为他们的答案 - 虽然正确并没有完全解决我的问题。

该解决方案似乎是 - 虽然我不确定这是为什么 - 但配置部分没有拿起时,它被放在execution部分。

把我原来的pom。XML和再保理它,使其工作得到:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.1.1</version> 
    <configuration> 
    <failOnMissingWebXml>false</failOnMissingWebXml> 
    <overlays> 
    </overlays> 
    <webappDirectory>${project.build.directory}/${project.build.finalName}-work</webappDirectory> 
    <warSourceExcludes>client/</warSourceExcludes> 
    </configuration> 
    <executions> 
    <execution> 
     <id>parent-resources</id> 
     <phase>generate-sources</phase> 
     <goals> 
     <goal>exploded</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

重要细节似乎是配置应该在插件的最高水平,而不是execution段内 - 虽然很明显在xml我第一次尝试使用warSourceExcludes的方式是偏离目标(请参阅更新部分之前的原始问题)。

+0

这就是maven插件的工作原理。它们有一个配置绑定在命令行执行的构建**或**配置中执行。看一看['maven-dependency-plugin'](https://maven.apache.org/plugins/maven-dependency-plugin/usage.html)为例。关于两个配置部分的不同之处非常具体。您的要求并不完全清楚。但很高兴你现在有一个工作配置。 – maba

+0

感谢您的澄清 - 如果我没有正确描述问题(可能是由于我没有真正获得Maven的更好的细节),apollogies。但再次感谢maba @aleksandr的帮助! – Kris

+0

如果您发现我们的答案有用/有帮助,请立即提供。并接受你自己的答案,如果这是你发现的最佳解决方案。 – maba

1

您的warSourceExcludes是错误的。这里是maven-war-plugin说关于warSourceExludes什么:

逗号分隔的标记列表复制warSourceDirectory的内容时要排除。

所以你的情况,这是你的配置应该是什么样子:

<configuration> 
    ... 
    <warSourceExcludes>client/</warSourceExcludes> 
    ... 
</configuration> 

这也意味着,如果你想添加一些更多的排除,只需添加它们用逗号分隔:

<configuration> 
    ... 
    <warSourceExcludes>client/,otherDir/,evenMoreDir/</warSourceExcludes> 
    ... 
</configuration> 
+0

生成嗨,首先感谢您的答复。刚试过你的建议没有运气,将更新我的问题,包括我已经尝试过。谢谢 – Kris

+0

我试着用你的设置,我在'target'中得到一个以'-work'结尾的文件夹,并且在那个文件夹中没有'client'目录。 – maba

+0

你想用相同的布局创建一场战争吗?或者爆炸的战争是你想要的唯一结果? – maba

1

为了排除从文件夹中使用通配符的所有文件一样,client/**

<configuration> 
<failOnMissingWebXml>false</failOnMissingWebXml> 
<overlays> 
</overlays>         
<webappDirectory>${project.build.directory}/${project.build.finalName}-work</webappDirectory> 
<warSourceExcludes>client/**</warSourceExcludes> 
</configuration> 
2

我找不到任何的< warSourceExcludes>然而< packagingExcludes其工作,配置>做的工作:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.5</version> 
    <configuration> 
     <packagingExcludes>excludeMe/**</packagingExcludes> 
    </configuration> 
    </plugin> 
+0

这就解决了我的问题,即使使用,minify-maven-plugin也会保留连接文件在我的.war文件中。 – Cesar

+0

请注意''packagingExcludes'只能从'.war'文件中排除,而不是从爆炸文件夹中排除 – jediz