在Maven中自动激活父插件

kuk*_*das 9 inheritance maven

是否可以在父POM中定义一个已停用的插件,当子项继承此插件时,它会自动激活?

sid*_*dev 10

我想你想在父pom中配置插件,但只在继承的项目中使用它.Maven有一个部分 - 在pluginManagement中配置你的插件,但是在你需要时将它们绑定到一个阶段,例如省略pluginManagement中的阶段标记,但是在你继承的pom中指定它.


Gab*_* Mc 9

所以'siddhadev'是完全正确的.您可以使用给定的id在父pom中定义插件配置:

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                    <execution>
                        <id>child-caller</id>
                        <!-- 'phase' omitted -->
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <tasks>
                                <echo message="called from child!" />
                            </tasks>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </pluginManagement>
</build>
Run Code Online (Sandbox Code Playgroud)

并且,在子POM中,您可以明确列出应该调用它的阶段:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
                <execution>
                    <id>child-caller</id>
                    <phase>compile</phase>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
Run Code Online (Sandbox Code Playgroud)

我用它来定位各种JRE.不幸的是,因为你不能将maven-compiler-plugin与不同的目标目录一起使用(我认为它是插件中的一个bug),你必须使用Ant.


Ric*_*ler 6

这不完全是你所追求的,但我认为它对你来说足够好.

如果您在父级的pluginManagement标记中声明插件,那么任何声明该插件的子项目都将继承该配置.

例如,在父声明中,compile插件使用Java 5进行测试编译.

<pluginManagement>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <executions>
        <execution>
          <id>test-compile</id>
          <goals>
            <goal>testCompile</goal>
          </goals>
          <configuration>
            <source>1.5</source>
            <target>1.5</target>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</pluginManagement>
Run Code Online (Sandbox Code Playgroud)

然后在一个子代中,您可以简单地声明编译器插件,并继承父代的配置:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
    </plugin>
  </plugins>
</build>
Run Code Online (Sandbox Code Playgroud)


Mat*_*ugh 5

您可以在顶级 pom 声明一个插件并告诉它被跳过,然后告诉它在子级别不被跳过。它不是完全自动的,但覆盖的冗长程度非常小。

Parent Pom,禁用插件,但声明所有配置:

<plugin>
    <groupid>org.apache.maven.plugins</groupid>
    <artifactid>maven-surefire-plugin</artifactid>
    <configuration>
        <skip>true</skip>
        ...lots more config...
        ...lots more config...
        ...lots more config...
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

子 Pom,启用插件:

<plugin>
    <groupid>org.apache.maven.plugins</groupid>
    <artifactid>maven-surefire-plugin</artifactid>
    <configuration>
        <skip>false</skip>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)