用于调用 Maven 插件的 Maven 插件?

Maven Plugin for calling Maven Plugins?

有谁知道可以以通用方式调用其他 Maven 插件的 Maven 插件?我正在寻找的是一种代理机制,用于按特定顺序安排插件执行。

关键是我必须将一个巨大的遗留项目迁移到 maven,它有很多必须以特定顺序运行的 ant 宏,但是使用 maven 不可能一次调用同一个插件两次,而且当我需要通过第二个插件的执行来拦截这两个执行时,保留执行顺序的相同阶段。

假设如下:我有插件 A (native2ascii) 和插件 B (replacer)。现在我的执行顺序必须是一个阶段的 A、B、A。当然,我可以这样写,但有效的 pom 看起来像 A,A,B。

所以最好有一个 'proxy-plugin' (P) 来简单地调用配置的插件。这样你就可以在一个阶段配置 P(A),P(B),P(A) 并且有效的 pom 将能够保留执行顺序。

谢谢你了!


我已经像下面这样尝试了 Wim 的提议,但结果是执行 ID 对有效的 pom 没有影响。 replacer插件的两次执行仍然合并在native2ascii插件之前运行。

这是我的 pom:

<build>
  <plugins>
    <plugin>
      <groupId>com.google.code.maven-replacer-plugin</groupId>
      <artifactId>replacer</artifactId>
      <version>1.5.3</version>
      <executions>
        <execution>
          <id>step-1-replacer</id>
          <phase>generate-sources</phase>
          <goals>
            <goal>replace</goal>
          </goals>
          <configuration>
            <file>src/main/order-test/test.txt</file>
            <outputFile>target/test-replaced-1.txt</outputFile>
            <replacements>
              <replacement>
                <token>t</token>
                <value>xyz</value>
              </replacement>
            </replacements>
          </configuration>
        </execution>
      </executions>
    </plugin>
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>native2ascii-maven-plugin</artifactId>
      <version>1.0-beta-1</version>
      <executions>
        <execution>
          <id>step-2-native2ascii</id>
          <phase>generate-sources</phase>
          <goals>
            <goal>native2ascii</goal>
          </goals>
          <configuration>
            <workDir>target</workDir>
            <includes>
              <include>test-replaced-1.txt</include>
            </includes>
          </configuration>
        </execution>
      </executions>
    </plugin>
    <plugin>
      <groupId>com.google.code.maven-replacer-plugin</groupId>
      <artifactId>replacer</artifactId>
      <version>1.5.3</version>
      <executions>
        <execution>
          <id>step-3-replacer</id>
          <phase>generate-sources</phase>
          <goals>
            <goal>replace</goal>
          </goals>
          <configuration>
            <file>target/test-replaced-1.txt</file>
            <outputFile>target/test-replaced-2.txt</outputFile>
            <replacements>
              <replacement>
                <token>f6</token>
                <value>-</value>
              </replacement>
              <replacement>
                <token>e4</token>
                <value>></value>
              </replacement>
            </replacements>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

下面是它在有效 pom 中的样子(两个替换执行都在 native2ascii 执行之前运行):

<plugin>
  <groupId>com.google.code.maven-replacer-plugin</groupId>
  <artifactId>replacer</artifactId>
  <version>1.5.3</version>
  <executions>
    <execution>
      <id>step-1-replacer</id>
      <phase>generate-sources</phase>
      <goals>
        <goal>replace</goal>
      </goals>
      <configuration>
        <file>src/main/order-test/test.txt</file>
        <outputFile>target/test-replaced-1.txt</outputFile>
        <replacements>
          <replacement>
            <token>t</token>
            <value>xyz</value>
          </replacement>
        </replacements>
      </configuration>
    </execution>
    <execution>
      <id>step-3-replacer</id>
      <phase>generate-sources</phase>
      <goals>
        <goal>replace</goal>
      </goals>
      <configuration>
        <file>target/test-replaced-1.txt</file>
        <outputFile>target/test-replaced-2.txt</outputFile>
        <replacements>
          <replacement>
            <token>f6</token>
            <value>-</value>
          </replacement>
          <replacement>
            <token>e4</token>
            <value>></value>
          </replacement>
        </replacements>
      </configuration>
    </execution>
  </executions>
</plugin>
<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>native2ascii-maven-plugin</artifactId>
  <version>1.0-beta-1</version>
  <executions>
    <execution>
      <id>step-2-native2ascii</id>
      <phase>generate-sources</phase>
      <goals>
        <goal>native2ascii</goal>
      </goals>
      <configuration>
        <workDir>target</workDir>
        <includes>
          <include>test-replaced-1.txt</include>
        </includes>
      </configuration>
    </execution>
  </executions>
</plugin>

这里是构建的输出:

...
[INFO] --- replacer:1.5.3:replace (step-1-replacer) @ build-order-test ---
[INFO] Replacement run on 1 file.
[INFO] 
[INFO] --- replacer:1.5.3:replace (step-3-replacer) @ build-order-test ---
[INFO] Replacement run on 1 file.
[INFO] 
[INFO] --- native2ascii-maven-plugin:1.0-beta-1:native2ascii (step-2-native2ascii) @ build-order-test ---
[INFO] Includes: [test-replaced-1.txt]
[INFO] Excludes: []
[INFO] Processing /home/shillner/work/workspaces/dev/build-order-test/target/test-replaced-1.txt
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

没有官方支持,但我们使用的是按字母顺序排列的执行 ID,这已经运行多年了。

示例:

<plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <executions>
                    <execution>
                        <id>step-0-copy-resources</id>
                        <goals>
                            <goal>resources</goal>
                        </goals>
                        <phase>package</phase>
                        <configuration>
                            <outputDirectory>${basedir}/target</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <executions>
                    <execution>
                        <id>step-1-build-assembly</id>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <phase>package</phase>
                        <configuration>
                            <descriptors>
                                <descriptor>${basedir}/src/main/assembly/descriptor.xml</descriptor>
                            </descriptors>
                            <!-- don't attach assembly to be installed -->
                            <attach>false</attach>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>groovy-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>step-2-build-installer</id>
                        <phase>package</phase>
                        <goals>
                            <goal>execute</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <source>${basedir}/BuildInstaller.groovy</source>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>step-3-attach-artifacts</id>
                        <phase>package</phase>
                        <goals>
                            <goal>attach-artifact</goal>
                        </goals>
                        <configuration>
                            <artifacts>
                                <artifact>
                                    <file>${basedir}/target/project-${project.version}.tar.gz</file>
                                    <type>tar.gz</type>
                                </artifact>
                            </artifacts>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

注意每个 <id/> 如何以 "step-x" 开头,其中 x 是一个数字。

看看 mojo-executor 插件,它可用于调用其他插件 - 来自 pom.xml 和编程。

Example:

        <plugin>
            <groupId>org.twdata.maven</groupId>
            <artifactId>mojo-executor-maven-plugin</artifactId>
            <version>@project.version@</version>
            <executions>
                <execution>
                    <phase>test</phase>
                    <goals>
                        <goal>execute-mojo</goal>
                    </goals>
                    <configuration>
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-dependency-plugin</artifactId>
                            <version>2.0</version>
                        </plugin>
                        <goal>list</goal>
                        <configuration>
                        </configuration>
                    </configuration>
                </execution>
            </executions>
        </plugin>