如何避免在父级中定义的Maven插件被子级覆盖?

时间:2015-10-05 10:45:24

标签: maven pom.xml maven-plugin overrides

我正在研究的Maven项目继承自父POM,其中一些项目范围的变量是通过在验证阶段执行gmaven-plugin来计算的:

父POM:

<plugin>
  <groupId>org.codehaus.gmaven</groupId>
  <artifactId>gmaven-plugin</artifactId>
  <version>1.5-jenkins-1</version>
  <executions>
    <execution>
      <phase>validate</phase>
      <goals><goal>execute</goal></goals>
      <configuration>
        <providerSelection>2.0</providerSelection>
        <source>
          project.properties.put("test.property1", "123");
        </source>
      </configuration>
    </execution>
  </executions>
</plugin>

现在我想在子POM中使用gmaven-plugin来计算和设置一些额外的参数:

儿童POM:

<plugin>
  <groupId>org.codehaus.gmaven</groupId>
  <artifactId>gmaven-plugin</artifactId>
  <version>1.5-jenkins-1</version>
  <executions>
    <execution>
      <phase>validate</phase>
      <goals><goal>execute</goal></goals>
      <configuration>
        <providerSelection>2.0</providerSelection>
        <source>
          project.properties.put("test.property2", "abc");
        </source>
      </configuration>
    </execution>
  </executions>
</plugin>

但是,这会导致父项中定义的插件消失/被覆盖。有效POM仅包含子项中定义的插件,test.property1最终为null

如何在孩子的父中执行Maven插件,而不会相互干扰?

3 个答案:

答案 0 :(得分:1)

阅读this博客条目如何合并配置。这可能会解决您的问题。

答案 1 :(得分:1)

add : 

    <inherited>true</inherited>

like : 
    <groupId>org.codehaus.gmaven</groupId>
      <artifactId>gmaven-plugin</artifactId>
      <version>1.5-jenkins-1</version>
     <inherited>true</inherited>

https://maven.apache.org/guides/mini/guide-configuring-plugins.html#Using_the_inherited_Tag_In_Build_Plugins

答案 2 :(得分:0)

据我记得,你可以在儿童游戏中配置另一个“执行”部分,所有对父插件的引用都会消失。