【问题标题】:Maven mojo plugin, how to define phases that must be triggered before this goal?Maven mojo插件,如何定义在这个目标之前必须触发的阶段?
【发布时间】:2011-04-25 11:47:36
【问题描述】:

嘿, 我有一个部署 pojo 插件(将战争部署到远程服务器)。我在 pom 定义的构建部分中有远程部署插件,我需要在部署远程目标之前触发包阶段,因为在我将其安全复制到远程服务器之前已经创建了战争。

使用执行元素(根据文档),我可以将我的目标附加到特定阶段,例如将其绑定到之后的阶段,因此在我的情况下,安装阶段......但这只是一种解决方法。

  <build>
    <plugins>
      <plugin>
        <groupId>sample.plugin</groupId>
        <artifactId>maven-hello-plugin</artifactId>
        <version>1.0-SNAPSHOT</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>sayhi</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

简单地说,如果我只将我的目标放入构建部分并运行它,那么之前不会运行包阶段。请帮忙

【问题讨论】:

    标签: maven-2 mojo


    【解决方案1】:

    Maven Mojo插件,如何定义在这个目标之前必须触发的阶段?

    你不能。

    我在 pom 定义的构建部分中有远程部署插件,我需要在部署远程目标之前触发包阶段,因为在我将其安全复制到远程服务器之前已经创建了战争。

    只需将其绑定到package 阶段,您的目标将在目标默认绑定到package 后被调用(因此战争将在那里)。

    下面是一个使用 Maven AntRun 插件配置的示例演示此行为:

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>1.6</version>
        <executions>
          <execution>
            <phase>package</phase>
            <configuration>
              <target>
                <echo message="Hi!!!!!"/>
              </target>
            </configuration>
            <goals>
              <goal>run</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    

    还有mvn package的输出:

    $ mvn 包 [INFO] 正在扫描项目... [信息] [信息] --------------------------------------------- ------------------------- [INFO] 构建 Q3934833 Maven Webapp 1.0-SNAPSHOT [信息] --------------------------------------------- ------------------------- ... [信息] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ Q3934833 --- [INFO] 没有可编译的资源 [信息] [信息] --- maven-surefire-plugin:2.5:test (default-test) @ Q3934833 --- [INFO] 没有要运行的测试。 [信息] [INFO] --- maven-war-plugin:2.1:war (default-war) @ Q3934833 --- [INFO] 打包 webapp [信息] 在 [/home/pascal/Projects/stackoverflow/Q3934833/target/Q3934833] 中组装 webapp [Q3934833] [INFO] 加工战争项目 [INFO] 复制 webapp 资源 [/home/pascal/Projects/stackoverflow/Q3934833/src/main/webapp] [INFO] Webapp 在 [317 毫秒] 内组装 [INFO] 构建战争:/home/pascal/Projects/stackoverflow/Q3934833/target/Q3934833.war [INFO] WEB-INF/web.xml 已经添加,跳过 [信息] [INFO] --- maven-antrun-plugin:1.6:run (默认) @ Q3934833 --- [INFO] 执行任务 主要的: [回声] 你好!!!! [INFO] 已执行的任务 [信息] --------------------------------------------- ------------------------- [信息] 构建成功 [信息] --------------------------------------------- ------------------------- ...

    antrun 插件按预期在package 之后执行。

    【讨论】:

    • 我这样试了,战争没有建立。我完全按照我粘贴的示例进行了尝试,我得到“战争不存在”
    • 它适用于安装阶段,但不适用于包......但这种解决方法并不好,因为我必须始终在部署之前安装工件
    • @lisak 它就像宣传的那样工作。如果您得到不同的行为,请显示您的配置和证明问题的输出。
    • 抱歉,我可能应该去睡觉了 :-) 我运行的是“mvn myGoal:myPhase”而不是“mvn package”……所以终于可以了,谢谢
    • @lisak 没问题,很高兴我们解决了问题。
    【解决方案2】:

    您可以尝试在 @Mojo 注释中使用 PREPARE_PACKAGE 阶段:

    @Mojo(name = "myName", defaultPhase = LifecyclePhase.PREPARE_PACKAGE)
    

    【讨论】:

      猜你喜欢
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多