仅通过激活在父POM中运行Maven目标

时间:2016-02-23 22:05:21

标签: maven

我正在努力将插件集成到一个多模块项目中。

我正在使用第三方插件,基本上只需要从父项目运行(基于我对它的理解和使用)。我尝试使用profile来完成此操作,如下所示:

<profiles>
    <profile>
        <id>run-my-guy</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>com.myproject</groupId>
                    <artifactId>myproject-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>runThing</goal>
                            </goals>
                            <inherited>false</inherited>
                        </execution>
                    </executions>
                    <inherited>false</inherited>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

我有几个<inherited>false</inherited>,但如果我运行mvn help:all-profiles,我仍然可以在每个模块中看到此配置文件。如果我运行mvn package -P run-my-guy,我会看到每个子项目都会执行此操作。我希望能够激活它,我不希望它默认打开。

如果我尝试将其添加到<build>部分,请执行以下操作:

<build>
  <plugins>
    <plugin>
      <groupId>com.myproject</groupId>
      <artifactId>myproject-maven-plugin</artifactId>
      <inherited>false</inherited>
      <executions>
        <execution>
          <phase>package</phase>
          <goals>
            <goal>runThing</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

在这里,我还有一些<inherited>false</inherited>,只是为了尝试强制执行插件和执行不会被继承。但是,当我运行package阶段或包含该阶段的任何内容时,都会包含runThing目标。

如何仅通过激活(例如个人资料或其他功能,或仅通过显式运行目标)并仅在父级中运行目标?

1 个答案:

答案 0 :(得分:1)

"Run a single Maven plugin execution?"的答案所示,现在可以(自Maven 3.3.1起)为直接目标调用指定执行ID。

<强>的pom.xml

<build>
  <plugins>
    <plugin>
      <groupId>com.myproject</groupId>
      <artifactId>myproject-maven-plugin</artifactId>
      <inherited>false</inherited>
      <executions>
        <id>myproject-exec-id</id>    <!-- note the execution Id -->
        <execution>
          <phase>none</phase>
          <goals>
            <goal>runThing</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

然后从命令行调用目标使用可选的@executionId参数:

mvn myproject:runThing@myproject-exec-id