Meg*_*att 6 java maven-plugin maven-3 maven maven-war-plugin
我正在使用通过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>
Run Code Online (Sandbox Code Playgroud)
其中${flavor}默认为根POM中的值,或者可以选择在构建时使用以下方式覆盖:
mvn clean install -Dflavor=customer
问题是,如果War插件找不到为资源提供的目录(即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>
Run Code Online (Sandbox Code Playgroud)
仅当目录不存在时,执行才会创建目录。这使我们可以建立目录...或没有。一切正常。
我有类似的问题(实际上在谷歌搜索解决方案时发现了你的问题)。
我的观察和你的一样:directory必须存在。但是,它不适用于<include>s。webapp.${flavor}所以我希望即使subdir 不存在也能通过:
<resource>
<directory>src/main</directory>
<includes>
<include>webapp.${flavor}</include>
</includes>
</resource>
Run Code Online (Sandbox Code Playgroud)
缺点是你不能使用<targetPath> to rename dir.
我的背景:我有可选的目录和内置文档,必须将其捆绑到战争中。当目录不存在时,组合directory=${project.basedir}/../docs-build+include=**不起作用。docs-build相比之下,directory=${project.basedir}/..+include=docs-build有效。(最后我放弃了这种方法,因为我需要重命名目录,但这是一个不同的故事。)
| 归档时间: |
|
| 查看次数: |
1056 次 |
| 最近记录: |