maven-2 - 如何在另一个插件执行前后声明一个maven插件的执行前后?

标签 maven-2 maven-plugin

我想在我的插件中创建一个执行顺序,该顺序围绕一个 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>
    

    最佳答案

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

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

    如果需要在同一个插件中定义两个执行,您可以通过定义自定义生命周期并在 Mojo 通过 execute 注释执行之前调用该生命周期来完成此操作。在 this answer我描述了如何创建自定义生命周期并强制在插件运行之前调用它。如果您将 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>
    

    关于maven-2 - 如何在另一个插件执行前后声明一个maven插件的执行前后?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1467509/

    相关文章:

    java - 使用 Maven 构建 Java Web Start 应用程序

    java - 将 JAR 文件作为依赖项添加到没有其相关 JAR 的项目中

    eclipse : Maven search dependencies doesn't work

    java - 如何构建多个maven模块项目?

    java - 在 Eclipse 中对 Maven 依赖项进行排序

    java - 有人听说过标准属性部署名称吗?

    java - 使用 help-mojo 阶段和 maven-plugin-plugin 编译 Maven 插件

    java - 我是否需要设置 Maven 才能使用 Maven ant 依赖任务?

    java - Maven 问题遗漏 Artifact (jsf-api.jar)

    maven - 获取最新依赖项时区分主干中的 Maven 版本/快照与分支中的版本/快照