我的父pom
定义了7个模块,其中5个是依赖jar
个,2个是依赖于这些jar的war
。
问题:是否可以使用maven profiles
(或其他解决方案)来定义在针对父pom运行mvn install
时包含哪些模块以排除这两个模块战争套餐?
我希望有一个不同的个人资料(或其他解决方案)来打包这两场战争。如果运行该配置文件,则只有在存储库中缺少依赖性jar模块时才应重建和安装它们。
答案 0 :(得分:1)
您可以使用父build-helper-maven-plugin
文件中的pom.xml
基于packaging
创建新属性(在运行时,它将从父级的pom
更改,模块的jar
和war
。然后,可以使用此新属性动态跳过maven-install-plugin
。
一个简单的例子:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.10</version>
<executions>
<execution>
<id>build-helper-regex-is-packaging-war</id>
<phase>validate</phase>
<goals>
<goal>regex-property</goal>
</goals>
<configuration>
<name>only.when.war.is.used</name>
<value>${project.packaging}</value>
<regex>war</regex>
<replacement>true</replacement>
<failIfNoMatch>false</failIfNoMatch>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
<configuration>
<skip>${only.when.war.is.used}</skip>
</configuration>
</plugin>
这样,仅当${only.when.war.is.used}
具有值true
并且因此有效跳过project.packaging
执行时,动态war
属性才会设置为maven-install-plugin
通过skip
选项。
然后,您可以将此行为移至配置文件,并为jar
和war
设置不同的设置,将它们保存在一个公共位置:根pom.xml
,这要归功于它们的动态行为。
关于检测是否已经安装了工件的能力,official插件文档中没有这样的选项,我认为只要使用插件就不会有这样的行为
但是,如果文件丢失(已安装的文件),您可以使用maven profile激活机制并相应地激活配置文件。
您可以采用动态方式(仅基于标准属性)采用以下方法:
<profiles>
<profile>
<activation>
<file>
<missing>${settings.localRepository}/${project.groupId}/${project.artifactId}/${project.build.fileName}.${project.packaging}</missing>
</file>
</activation>
...
</profile>
</profiles>