如何避免maven将文件复制到爆炸战争中

如何避免maven将文件复制到爆炸战争中,maven,war,Maven,War,我有一个Java web应用程序,其中标准web应用程序源目录(src/main/webapp)中有一些文件夹,我不想把它们复制到战争中(分解了或打包了) 我不想复制这些文件的原因之一是,我们在爆炸战争中对.JS和.CSS文件运行yuijs&cssmimizer&compressor。我要排除的文件在压缩阶段会产生错误。我不想让它们加入war的另一个原因是它们支持测试webapp中的单页JS应用程序(它们是依赖于节点的客户端JS测试脚本) 以下是POM.xml中的相关部分: org.apach

我有一个Java web应用程序,其中标准web应用程序源目录
(src/main/webapp)
中有一些文件夹,我不想把它们复制到战争中(
分解了
打包了

我不想复制这些文件的原因之一是,我们在爆炸战争中对.JS和.CSS文件运行yuijs&cssmimizer&compressor。我要排除的文件在压缩阶段会产生错误。我不想让它们加入war的另一个原因是它们支持测试webapp中的单页JS应用程序(它们是依赖于
节点的客户端JS测试脚本)

以下是
POM.xml
中的相关部分:


org.apache.maven.plugins
maven战争插件
2.1.1
父资源
假的
${project.build.directory}/${project.build.finalName}-work
生成源
爆炸了的
我尝试使用
warSourceExcludes
排除某些路径,但没有成功。下面是我的使用示例,其中
client/
src/main/webapp
正下方的文件夹:


...
客户/
...
排除web应用程序源目录中某些路径和/或单个文件的正确方法是什么

更新 根据@maba的建议,我将配置更新如下:


假的
${project.build.directory}/${project.build.finalName}-work
客户/

文件夹
client/
,仍在被复制。有什么想法吗?

你的
warSourceExcludes
错了。以下是关于
warSourceExludes
的说明:

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

因此,在您的情况下,您的配置应该是这样的:

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

...
客户/
...
这也意味着,如果要添加更多的排除项,只需添加以逗号分隔的排除项:

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

...
client/,otherDir/,evenMoreDir/
...

为了从文件夹中排除所有文件,请使用类似于
client/**

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

假的
${project.build.directory}/${project.build.finalName}-work
客户/**

感谢@alexksandr&@maba给出的答案——虽然答案正确,但并没有完全解决我的问题

解决方案似乎是——尽管我不确定为什么会出现这种情况——当配置部分被放置在
执行
部分时,它没有被拾取

使用我的原始pom.xml并对其进行重新分解以使其正常工作:


org.apache.maven.plugins
maven战争插件
2.1.1
假的
${project.build.directory}/${project.build.finalName}-work
客户/
父资源
生成源
爆炸了的

重要的细节似乎是,配置应该在插件的顶层,而不是
执行
部分-尽管在我第一次尝试使用
warSourceExcludes
时,
xml
显然偏离了目标(见更新部分之前的原始问题).

我找不到任何有效的配置,但确实有效:

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

org.apache.maven.plugins
maven战争插件
2.5
排除我/**

warSourceExcludes被记录为逗号分隔的字符串,因此其中不应包含任何XML。问题已经更新,以反映正确的使用-但仍然不适用于我。我怀疑我的
pom.xml
还有一个问题。我将研究这周是否有一个由archetypeHi生成的原始项目,首先感谢您的回复。刚尝试了你的建议,但运气不佳,将更新我的问题,以包括我尝试过的内容。谢谢我尝试了你的设置,我在
target
中找到了一个以
-work
结尾的文件夹,并且在该文件夹中没有
客户端
目录的迹象。你想用同样的布局创建war吗?还是爆炸战争是你想要的唯一结果?奇怪。。。。我正在运行
mvn clean war:exploded
,而
客户端/
仍然被复制过来。不确定这里发生了什么忘了说我希望它也被排除在打包战争之外这就是maven插件的工作方式。它们具有绑定在生成中执行的配置或用于命令行执行的配置。请看一个例子。关于这两个配置部分的区别,这是非常具体的。你的要求不是很清楚。但很高兴您现在有了一个工作配置。感谢您的澄清,如果我没有正确描述这个问题(可能是因为我没有真正了解maven的更详细信息)。但再次感谢maba@aleksandr的帮助!如果你觉得我们的答案有用/有帮助,请投票表决。如果你认为这是最好的解决办法,那就接受你自己的答案。是的,道歉。我对你的答案投了赞成票,因为它们确实有用。再次感谢您提到执行部分的那一部分,8年后,它使我免于犯同样的错误。这解决了minify maven plugin的问题,该插件将连接的文件保留在我的.war中,即使使用了。请注意,
packagingExcludes
仅从
.war
文件中排除,不是从分解的文件夹中