当 Maven war 插件找不到 webResource 目录时,如何避免构建失败?



我正在使用一个通过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 插件配置为在目录不存在时不会使构建失败?如果不是,在构建时创建此目录的最佳方法是什么?

谢谢。

更新

经过进一步的思考和研究,我决定在构建时使用 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>

仅当目录尚不存在时,执行才会创建该目录。这使我们能够拥有一个目录...或不。一切都很好。

我也有类似的问题(实际上在谷歌搜索解决方案时找到了你的问题)。

我的觀察和你一樣:directory必須存在。但是,它不适用于<include>。所以我希望即使子目录不存在webapp.${flavor}这也会过去:

<resource>
<directory>src/main</directory>
<includes>
<include>webapp.${flavor}</include>
</includes>
</resource>

缺点是您无法使用<targetPath>重命名目录。

我的背景:我有可选的目录,其中包含必须捆绑到战争中的内置文档。当目录不存在时directory=${project.basedir}/../docs-build+include=**docs-build组合不起作用。相比之下,directory=${project.basedir}/..+include=docs-build奏效了。(最后我放弃了这种方法,因为我需要重命名目录,但那是另一回事了。

相关内容

  • 没有找到相关文章

最新更新