我的父母pom
定义了 7 个模块,其中 5 个是依赖项jar
,两个是war
依赖于这些 jar 的。
问题:是否可以使用 maven profiles
(或其他解决方案)来定义在mvn install
针对父 pom 运行时包含哪些模块以排除两个 war 包?
然后我想有一个不同的配置文件(或另一个解决方案)来打包这两个战争。如果运行该配置文件,则仅当存储库中缺少依赖项 jar 模块时才应重新构建和安装它们。
我的父母pom
定义了 7 个模块,其中 5 个是依赖项jar
,两个是war
依赖于这些 jar 的。
问题:是否可以使用 maven profiles
(或其他解决方案)来定义在mvn install
针对父 pom 运行时包含哪些模块以排除两个 war 包?
然后我想有一个不同的配置文件(或另一个解决方案)来打包这两个战争。如果运行该配置文件,则仅当存储库中缺少依赖项 jar 模块时才应重新构建和安装它们。
您可以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
and设置不同的设置war
,将它们保持在一个共同的位置: root pom.xml
,这要归功于它们的动态行为。
关于检测是否已安装工件的能力,官方插件文档中没有这样的选项,我认为您不能通过简单地使用插件来获得这样的行为。
但是,如果缺少文件(已安装的文件),您可以使用maven 配置文件激活机制并相应地激活配置文件。
您可以以动态方式(仅基于标准属性)采用以下方法:
<profiles>
<profile>
<activation>
<file>
<missing>${settings.localRepository}/${project.groupId}/${project.artifactId}/${project.build.fileName}.${project.packaging}</missing>
</file>
</activation>
...
</profile>
</profiles>