【问题标题】:Binding a custom Maven plugin to a default phase将自定义 Maven 插件绑定到默认阶段
【发布时间】:2015-11-05 06:25:01
【问题描述】:

我有一个自定义的 Maven 插件,我试图默认绑定到 package 阶段。我已经尝试过使用@Mojo 注释和@Execute 注释的所有组合,但它似乎没有自动绑定。

我设法让我的插件工作的唯一方法是这样定义它:

@Mojo(name = "put")
public class SSHMojo extends AbstractMojo {

然后在我的项目中使用插件,定义一个执行。我想避免每次我想使用我的插件时都添加<executions>

<plugin>
  <groupId>com.patrickgrimard</groupId>
  <artifactId>ssh-maven-plugin</artifactId>
  <version>1.0.2</version>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>put</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <serverId>devopsmtl</serverId>
    <host>example.com</host>
    <remoteDirectory>/srv/www</remoteDirectory>
  </configuration>
</plugin>

我的完整插件 pom 可以在https://github.com/pgrimard/ssh-maven-plugin/blob/master/pom.xml找到

【问题讨论】:

标签: maven maven-plugin


【解决方案1】:

您好,只需使用以下内容:

@Mojo( name = "put", defaultPhase = LifecyclePhase.PACKAGE )

除此之外,我建议使用更新版本的 maven-plugin-api(至少 3.0)...

【讨论】:

  • 我已将 maven-plugin-api 升级到 3.3.3 并添加了 defaultPhase,但它仍然不会运行我的插件,除非我在我的 pom 中指定执行。
  • 显示你正在使用的示例pom...除此之外你知道wagon-maven-plugin
【解决方案2】:
  1. 使用注释属性defaultPhase(就像khmarbaise已经提到的那样):
@Mojo(name = "put", defaultPhase = LifecyclePhase.PACKAGE)
public class SSHMojo extends AbstractMojo { ... }


  1. 在使用 Maven 项目的 pom.xml 中,您可以在此之后省略对阶段的引用:
<plugin>
  <groupId>com.patrickgrimard</groupId>
  <artifactId>ssh-maven-plugin</artifactId>
  <version>1.0.2</version>
  <executions>
    <execution>
      <!-- <phase>package</phase> --><!-- needed no longer -->
      <goals>
        <goal>put</goal>
      </goals>
    </execution>
  </executions>
  ...

【讨论】:

    猜你喜欢
    • 2011-12-09
    • 2012-10-26
    • 2015-04-23
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多