代码之家  ›  专栏  ›  技术社区  ›  lisak

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

  •  1
  • lisak  · 技术社区  · 14 年前

    嘿, 我有一个deploy pojo插件(将war部署到远程服务器)。我在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>
    

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

    2 回复  |  直到 11 年前
        1
  •  1
  •   Pascal Thivent    14 年前

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

    你不能。

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

    把它绑在 package 阶段,您的目标将在目标限定后调用 包裹 默认情况下(战争就在那里)。

    下面是一个示例,演示了使用配置如下的MavenAntrun插件的这种行为:

      <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 package
    [INFO] Scanning for projects...
    [INFO]                                                                         
    [INFO] ------------------------------------------------------------------------
    [INFO] Building Q3934833 Maven Webapp 1.0-SNAPSHOT
    [INFO] ------------------------------------------------------------------------
    ...
    [INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ Q3934833 ---
    [INFO] No sources to compile
    [INFO] 
    [INFO] --- maven-surefire-plugin:2.5:test (default-test) @ Q3934833 ---
    [INFO] No tests to run.
    [INFO] 
    [INFO] --- maven-war-plugin:2.1:war (default-war) @ Q3934833 ---
    [INFO] Packaging webapp
    [INFO] Assembling webapp [Q3934833] in [/home/pascal/Projects/stackoverflow/Q3934833/target/Q3934833]
    [INFO] Processing war project
    [INFO] Copying webapp resources [/home/pascal/Projects/stackoverflow/Q3934833/src/main/webapp]
    [INFO] Webapp assembled in [317 msecs]
    [INFO] Building war: /home/pascal/Projects/stackoverflow/Q3934833/target/Q3934833.war
    [INFO] WEB-INF/web.xml already added, skipping
    [INFO] 
    [INFO] --- maven-antrun-plugin:1.6:run (default) @ Q3934833 ---
    [INFO] Executing tasks
    
    main:
         [echo] Hi!!!!!
    [INFO] Executed tasks
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    ...
    

    Antrun插件在 包裹 ,正如预期的那样。

        2
  •  0
  •   cyberBuddha47    11 年前

    您可以尝试在@mojo注释中使用“准备包”阶段:

    @Mojo(name = "myName", defaultPhase = LifecyclePhase.PREPARE_PACKAGE)
    
    推荐文章