我正在使用一个通过Maven生成WAR工件的模块。该模块具有典型的src/main/webapp
目录。我正在使用Maven的war插件来补充webapp
目录和另一个可以在构建时以编程方式提供的资源目录。所以我的插件在POM中配置如下:
<plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webResources>
<resource>
<directory>src/main/webapp.${flavor}</directory>
</resource>
</webResources>
</configuration>
</plugin>
其中${flavor}
默认为根POM中的值,或者可以选择在构建时使用以下内容覆盖:
mvn clean install -Dflavor=customer
问题是如果找不到为资源提供的目录(即src/main/webapp.customer
不存在),war插件会在构建期间死亡。我的项目可以有很多种,我宁愿不必为每种可能的风格创建一个空目录,只是为了安抚插件。
问题:当目录不存在时,有没有办法配置war插件以使构建失败?如果没有,在构建时尚不存在的情况下创建此目录的最佳方法是什么?
谢谢。
更新
经过额外的思考和研究,我决定在构建时使用maven-antrun-plugin在条件下创建“风味”目录。毕竟,如果构建需要目录在那里 - 并且在没有它的情况下将死亡 - 那么构建应该确保目录在那里。所以这是我的antrun插件执行:
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>created-flavored-resources-directory</id>
<phase>process-resources</phase>
<configuration>
<target>
<mkdir dir="src/main/webapp.${flavor}"/>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
仅当目录尚不存在时,执行才会创建目录。这允许我们有一个目录......或不。一切正常。
答案 0 :(得分:0)
我有类似的问题(实际上在搜索解决方案时发现了你的问题)。
我的观察与你的观察相同:directory
必须存在。但是,它不适用于<include>
。所以我希望即使webapp.${flavor}
subdir不存在也会通过:
<resource>
<directory>src/main</directory>
<includes>
<include>webapp.${flavor}</include>
</includes>
</resource>
缺点是您无法使用<targetPath>
重命名目录。
我的背景:我有可选的dir,内置文档,必须捆绑到战争中。当directory=${project.basedir}/../docs-build
目录不存在时,include=**
+ docs-build
组合无法正常工作。相比之下,directory=${project.basedir}/..
+ include=docs-build
有效。 (最后我放弃了这种方法,因为我需要重命名dir,但这是一个不同的故事。)