是否可以覆盖maven pluginManagement中的执行?

时间:2013-07-03 05:34:53

标签: maven

在父母POM中,我有:

 <pluginManagement>
            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.5</version>
                <executions>
                    <execution>
                       <id>execution 1</id>
                       ...
                    </execution>
                    <execution>
                       <id>execution 2</id>
                       ...
                    </execution>
                    <execution>
                       <id>execution 3</id>
                       ...
                    </execution>
                </executions>
            </plugin>
        <pluginManagement>

我的问题是:

  1. 是否可以在子项目中禁用某些<execution>,例如,只运行execution 3并跳过1和2?
  2. 是否可以完全覆盖子项目中的执行,例如我的子项目中有一个exection 4 我只想运行这个execution并且永远不会在父POM中运行执行1,2,3。

1 个答案:

答案 0 :(得分:13)

快速选项是在覆盖每次执行时使用<phase>none</phase>。因此,例如,只运行执行3,您将在您的pom中执行以下操作:

<build>
  <plugins>
    <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.5</version>
        <executions>
            <execution>
                <id>execution 1</id>
                <phase>none</phase>
                ...
            </execution>
            <execution>
                <id>execution 2</id>
                <phase>none</phase>
                ...
            </execution>
            <execution>
                <id>execution 3</id>
                ...
            </execution>
        </executions>
    </plugin>
    ...
  </plugins>
  ...
</build>

应该注意的是,这不是官方记录的功能,因此可以随时删除对此的支持。

建议的解决方案可能是定义profiles定义了activation个部分:

<profile>
  <id>execution3</id>
  <activation>
    <property>
      <name>maven.resources.plugin.execution3</name>
      <value>true</value>
    </property>
  </activation>
  ...

在您的子项目中,您只需设置所需的属性:

<properties>
    <maven.resources.plugin.execution3>true</maven.resources.plugin.execution3>
</properties>

有关配置文件激活的更多详细信息,请访问: http://maven.apache.org/settings.html#Activation