使用配置文件从'mvn install'中排除WAR模块

时间:2016-08-25 16:25:10

标签: maven maven-profiles maven-install-plugin

我的父pom定义了7个模块,其中5个是依赖jar个,2个是依赖于这些jar的war

问题:是否可以使用maven profiles(或其他解决方案)来定义在针对父pom运行mvn install时包含哪些模块以排除这两个模块战争套餐?

我希望有一个不同的个人资料(或其他解决方案)来打包这两场战争。如果运行该配置文件,则只有在存储库中缺少依赖性jar模块时才应重建和安装它们。

1 个答案:

答案 0 :(得分:1)

您可以使用父build-helper-maven-plugin文件中的pom.xml基于packaging创建新属性(在运行时,它将从父级的pom更改,模块的jarwar。然后,可以使用此新属性动态跳过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选项。

然后,您可以将此行为移至配置文件,并为jarwar设置不同的设置,将它们保存在一个公共位置:根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>