20

我想在我的插件中创建一个执行顺序,该顺序围绕一个 Maven 插件,并在执行另一个 Maven 插件之前和之后。所有 3 次执行都是部署阶段的一部分。

这是我想做的一个例子:

  • 阶段:部署
  • url:get: 执行前
  • 依赖:解压
  • url:get: 执行后

注意: url:get 是我自己的 custo mojo,只是使用 commons httpClient 执行一个 http get。

我通常会在下一阶段附加插件执行后,但不幸的是,部署是 jar 生命周期的最后阶段。

先感谢您,

科斯塔斯


注意:我的 pom 文件中的以下插件段创建了以下预期的执行顺序:

  • 阶段:部署
  • url:get: 执行前
  • url:get: 执行后
  • 依赖:解压

插件部分:

        <plugin>
            <groupId>com.blabla.stpadmin</groupId>
            <artifactId>maven-url-plugin</artifactId>
            <version>1.0-SNAPSHOT</version>
            <executions>
                <execution>
                    <id>stop-stpadmin-service</id>
                    <phase>deploy</phase>
                    <goals>
                        <goal>get</goal>
                    </goals>
                    <configuration>
        ...
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>unpack</id>
                    <phase>deploy</phase>
                    <goals>
                        <goal>unpack</goal>
                    </goals>
                    <configuration>
        ...
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>com.blabla.stpadmin</groupId>
            <artifactId>maven-url-plugin</artifactId>
            <version>1.0-SNAPSHOT</version>
            <executions>
                <execution>
                    <id>start-stpadmin-service</id>
                    <phase>deploy</phase>
                    <goals>
                        <goal>get</goal>
                    </goals>
                    <configuration>
        ...
                    </configuration>
                </execution>
            </executions>
        </plugin>
4

1 回答 1

16

您可以将每个插件的执行绑定到同一阶段,它们将按照您指定的顺序执行。请注意,它们将在部署目标运行后执行,因此您可能希望将它们绑定到上一个阶段(安装)

更新:为了确保执行前执行后目标围绕依赖插件执行执行,您需要确保它们在单独的插件中定义。否则这两个配置将被合并并按顺序执行。

如果需要在同一个插件中定义两个执行,您可以通过定义自定义生命周期并在 Mojo 通过 execute 注释执行之前调用该生命周期来完成此操作。在这个答案中,我描述了如何创建自定义生命周期并强制在插件运行之前调用它。如果您将execute-after目标配置为调用依赖插件,您将获得所需的执行顺序(您甚至可以在该生命周期中调用execute-before目标)。

下面的示例将在部署阶段按顺序执行三个插件:

  <plugin>
    <groupId>custom.url.plugin</groupId>
    <artifactId>maven-url-plugin</artifactId>
    <version>1.0</version>
    <executions>
      <execution>
        <phase>deploy</phase>
        <goals>
          <goal>execution-before</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.1</version>
    <executions>
      <execution>
        <phase>deploy</phase>
        <goals>
          <goal>unpack</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
  <plugin>
    <groupId>custom.url.plugin</groupId>
    <!--specify final execution in a different plugin to 
           avoid the configurations being merged-->
    <artifactId>maven-url-2-plugin</artifactId>
    <version>1.0</version>
    <executions>
      <execution>
        <phase>deploy</phase>
        <goals>
          <goal>execution-after</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
于 2009-09-23T17:44:48.277 回答