我正在尝试控制哪些文件进入由mvn package
目标创建的WAR包中。具体来说,我想从每个包的默认src/main/resources
文件夹中排除一些文件(我正在尝试为不同的环境进行构建/包)。
我尝试使用maven-war-plugin但失败了。如果我添加此配置(用于测试):
<webResources>
<resource>
<directory>src/main/resources</directory>
<targetPath>WEB-INF/classes</targetPath>
<excludes>
<exclude>*.xml</exclude>
</excludes>
</resource>
</webResources>
...我的WEB-INF/classes
仍将包含XML文件。这是因为webResources
参数似乎复制了复制过程(上述配置实际上有效,文件不会被复制......但是它们会被复制到某些其他进程中)。
Maven-war-plugin documentation州:
所有Maven 2项目的默认资源目录是src / main / resources,它们将最终出现在目标/类和WAR中的WEB-INF / classes中。目录结构将在此过程中保留。
WAR插件还能够通过webResources参数包含默认资源目录中找不到的资源。
这有点令人困惑。这是否意味着:
webResources
参数是maven-war-plugin中的一项功能,它允许从src/main/resources
文件夹外部仅包含文件?如果是这样,我们如何从src/main/resources
?webResources
参数是maven-war-plugin中的一项功能,允许从src/main/resources
文件夹外部包含 文件?如果是这样,如何配置它?答案 0 :(得分:12)
我正在尝试控制哪些文件进入由mvn包目标创建的WAR包中。具体来说,我想从每个包的默认src / main / resources文件夹中排除一些文件
在process-resources
阶段,默认资源目录(src/main/resources
)中的资源被复制到构建输出目录(target/classes
)中。然后,在package
阶段,target/classes
的内容被采用并打包到分布式存档中,如WAR,并在这种情况下以WEB-INF/classes
结束。
所以,如果你想控制最终在WEB-INF/classes
中的资源,你需要控制哪些资源最终会在target/classes
中,即以某种方式改变the goal bound to the process-resources
phase的行为,特别是Maven Resources Plugin的resources:resources
目标。
要这样做,(这可能不直观),您可以在pom的exclude
元素内声明include
或resources
个元素,如Including and excluding files and directories所示。应用于默认资源目录:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/*.xml</exclude>
</excludes>
</resource>
</resources>
</build>
如果您想对不同的环境使用自定义排除规则,请将其与profiles结合使用。例如:
<project>
...
<profiles>
<profile>
<id>env-uat</id>
<activation>
<property>
<name>env</name>
<value>uat</value>
</property>
</activation>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/*.xml</exclude>
</excludes>
</resource>
</resources>
</build>
</profile>
</profiles>
</project>
使用此配置文件时,xml文件不会以target/classes
结尾,因此在最后一场战争中它们不会以WEB-INF/classes
结尾。
我尝试使用maven-war-plugin但失败了。如果我添加此配置(用于测试)(...),我的WEB-INF / classes仍将包含XML文件
您在此处执行的操作是添加其他资源目录,该目录似乎是已包含的默认资源目录。因此,无论您要排除什么,这都无效,因为文件在target/classes
期间无论如何都会被复制到process-resources
,因此仍会在WEB-INF/classes
中结束。
换句话说,如果要添加不属于默认资源目录的额外资源,请使用webResources
:
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1</version>
<configuration>
<webResources>
<resource>
<!-- this is relative to the pom.xml directory -->
<directory>extra-resources</directory>
</resource>
</webResources>
</configuration>
</plugin>
</plugins>
</build>
...
</project>
但我不认为这是你在这里寻找的,并建议使用上面建议的方法。
答案 1 :(得分:0)
见Pascal's answer for right configuration and good explanation of the process。我在这里直接回答这个问题:
- webResources参数是maven-war-plugin中的一项功能,它允许从src / main / resources文件夹外部仅包含文件?如果是这样,我们如何改变src / main / resources中的复制文件?
- webResources参数是maven-war-plugin中的一个功能,它允许从src / main / resources文件夹外部包含 文件?如果是这样,如何配置它?
这是前者,webResources
中的maven-war-plugin
参数只允许从src/main/resources
外部包含额外的资源。它不允许为src/main/resources
本身配置包含/排除。