【问题标题】:How can I find out the default phase a Maven goal binds to?如何找出 Maven 目标绑定的默认阶段?
【发布时间】:2012-09-06 23:02:10
【问题描述】:

在 Maven 中,我如何找出目标的默认阶段(如果此特定目标存在任何默认阶段)?

示例

我正在使用一个名为 Jetty Maven Plugin 的 Maven 插件。它包含一个目标jetty:run。运行命令mvn jetty:run(注意这个命令只包含一个目标,而不是一个阶段)首先构建一个pom.xml指定的Web应用程序到默认的test-compile phase,然后将它部署在一个Jetty服务器中。

正如Mojo API Specification 中所指出的,目标可以在其源代码中分配一个默认阶段(通过@phase 或通过@execute phase)。 In case of jetty:run, the default phase is @execute phase="test-compile".

但是查找源代码文件可能会变得相当复杂。有没有更简单的方法可以找出默认阶段?

【问题讨论】:

    标签: maven-3 maven-plugin


    【解决方案1】:

    最简单的解决方案是使用maven-help-plugin,如下所示:

    mvn help:describe -DartifactId=maven-compiler-plugin -DgroupId=org.apache.maven.plugins -Dgoal=compile -Ddetail
    

    这将打印出许多信息,但在第一行:

    [INFO] Mojo: 'compiler:compile'
    compiler:compile
      Description: Compiles application sources
      Implementation: org.apache.maven.plugin.CompilerMojo
      Language: java
      Bound to phase: compile
    
      Available parameters:
      ....
    

    如果你在码头上试试这个:像这样运行:

    mvn help:describe -DartifactId=jetty-maven-plugin -DgroupId=org.mortbay.jetty -Dgoal=run -Ddetail
    

    你会得到一个很大的输出,但你不会看到默认阶段,因为它打算从命令行调用:

    [INFO] Mojo: 'jetty:run'
    jetty:run
      Description: This goal is used in-situ on a Maven project without first
        ....
        redeploying.
         .....
    
      Implementation: org.mortbay.jetty.plugin.JettyRunMojo
      Language: java
      Before this mojo executes, it will call:
        Phase: 'test-compile'
    
      Available parameters:
          ....
    

    【讨论】:

    • @khmarbaise 我们如何在 m2e 插件中做到这一点?
    • 您也可以从 m2e 内部调用 Maven。但最好使用命令行。
    • 也可以使用附加参数-Dversion=1.3.72来内省特定版本
    猜你喜欢
    • 2011-12-09
    • 2012-10-26
    • 2015-11-05
    • 2015-04-23
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    • 2011-01-16
    • 2019-01-25
    相关资源
    最近更新 更多