我有一个Java Web应用程序,其中我在标准webapp源目录(src/main/webapp)
中有一些文件夹,我不想将其复制到战争中exploded
或{{1 }})。
我不希望这些文件复制的原因之一是我们运行YUI JS& CSS minimalizer&爆炸战争中的.js和.css文件压缩器。我想要排除的文件在压缩阶段产生错误。我不希望他们加入战争的另一个原因是他们支持测试位于webapp中的单页JS应用程序(它们是依赖于packaged
/ node
的客户端JS测试脚本)。
以下是angular.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
将Web应用程序源目录中的某些路径和/或单个文件排除在爆炸战争中的正确方法是什么?
根据@maba的建议,我更新了配置如下:
<configuration>
...
<warSourceExcludes>
<excludes>
<exclude>
client/
</exclude>
</excludes>
</warSourceExcludes>
...
</configuration>
文件夹<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
<overlays>
</overlays>
<webappDirectory>${project.build.directory}/${project.build.finalName}-work</webappDirectory>
<warSourceExcludes>client/</warSourceExcludes>
</configuration>
仍在复制中。有什么想法吗?
答案 0 :(得分:7)
感谢@alexksandr&amp; @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
离目标很远(请参阅更新部分之前的原始问题)。
答案 1 :(得分:3)
我找不到&lt; warSourceExcludes&gt;的配置哪个有效,但&lt; packagingExcludes&gt;做得好:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.5</version>
<configuration>
<packagingExcludes>excludeMe/**</packagingExcludes>
</configuration>
</plugin>
答案 2 :(得分:1)
您的warSourceExcludes
错了。以下是maven-war-plugin
对warSourceExludes
所说的内容:
复制warSourceDirectory内容时要排除的逗号分隔的标记列表。
因此,在您的情况下,这就是您的配置应该是这样的:
<configuration>
...
<warSourceExcludes>client/</warSourceExcludes>
...
</configuration>
这也意味着如果你想添加更多的排除,只需用逗号分隔它们:
<configuration>
...
<warSourceExcludes>client/,otherDir/,evenMoreDir/</warSourceExcludes>
...
</configuration>
答案 3 :(得分:1)
要从文件夹中排除所有文件,请使用通配符,例如client/**
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
<overlays>
</overlays>
<webappDirectory>${project.build.directory}/${project.build.finalName}-work</webappDirectory>
<warSourceExcludes>client/**</warSourceExcludes>
</configuration>