如何在另一个插件执行周围执行maven插件之前和之后声明?

时间:2009-09-23 17:34:41

标签: maven-2 maven-plugin

我想在我的插件中创建一个执行顺序,它包含一个maven插件,前后执行另一个maven插件。所有3次执行都是部署阶段的一部分。

以下是我想要做的一个例子:

  • 相:部署
  • url:get:execution-before
  • 依赖性:解包
  • url:get:execution-after

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

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

提前谢谢你,

科斯塔斯


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

  • 相:部署
  • url:get:execution-before
  • url:get:execution-after
  • 依赖性:解包

插件片段:

        <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>

1 个答案:

答案 0 :(得分:11)

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

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

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

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

  <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>
相关问题