如何为maven插件定义默认mojo

时间:2011-04-20 15:28:08

标签: maven maven-plugin mojo

我编写了一个在target / generated-sources /中生成一个文件的插件。 这个插件只有一个mojo。这个mojo声明如下:

/**
 * @goal convertsql
 * @phase generate-sources
 * @requiresProject
 */
public class ConverterMojo extends AbstractMojo { 

在项目中,我想使用插件,但如果我没有指定执行标记,它就不起作用:

<executions>
    <execution>
        <id>convert</id>
        <goals><goal>convertsql</goal></goals>
        <phase>generate-sources</phase>
    </execution>
</executions>

我想只配置这样的插件:

<plugin>
    <groupId>com.my.plugins</groupId>
    <artifactId>sqlconverter</artifactId>
    <version>1.0-SNAPSHOT</version>
    <configuration>
        <sourceFile>src/main/resources/sql/schema_oracle.sql</sourceFile>
    </configuration>
</plugin>

是否可以为我的插件指定默认的mojo?默认目标和阶段在mojo中定义...我的意思是,当使用jar插件时,我不必告诉我想要执行的目标,在哪个阶段...它是自动的。

谢谢!

2 个答案:

答案 0 :(得分:0)

您需要在插件中添加META-INF/plexus/components.xml文件,并在插件块中设置<extensions>true</extensions>

请参阅Maven Book中的11.6.3. Overriding the Default Lifecycle以供参考

答案 1 :(得分:0)

让Maven插件无法执行其默认阶段时会自动运行其默认目标。这令人困惑,因为有 很多用于特定包装的标准插件“绑定” 。这些定义在Maven核心中:https://maven.apache.org/ref/3.6.1/maven-core/default-bindings.html

例如,对于WAR包装,它是:

<phases>
  <process-resources>
    org.apache.maven.plugins:maven-resources-plugin:2.6:resources
  </process-resources>
  <compile>
    org.apache.maven.plugins:maven-compiler-plugin:3.1:compile
  </compile>
  <process-test-resources>
    org.apache.maven.plugins:maven-resources-plugin:2.6:testResources
  </process-test-resources>
  <test-compile>
    org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile
  </test-compile>
  <test>
    org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test
  </test>
  <package>
    org.apache.maven.plugins:maven-war-plugin:2.2:war
  </package>
  <install>
    org.apache.maven.plugins:maven-install-plugin:2.4:install
  </install>
  <deploy>
    org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy
  </deploy>
</phases>

通过在插件中定义默认阶段,您无需指定目标,而只需指定目标。就您而言:

<executions>
    <execution>
        <id>convert</id>
        <!--
           Not needed for default phase of plugin goal:
           <phase>generate-sources</phase>
        -->
        <goals>
            <goal>convertsql</goal>
        </goals>
    </execution>
</executions>

另请参见https://maven.apache.org/developers/mojo-api-specification.html(查找@phase)。相关报价(我强调):

  

定义默认阶段,以将mojo执行绑定到用户执行的操作   没有在POM中明确设置阶段。注意:该注释不会   将插件声明添加到后,自动运行mojo   。它仅使用户能够从中省略元素   周围的元素。