11

我编写了一个插件,它在 target/generated-sources/ 中生成一个文件。这个插件只有一种魔力。这个 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 插件时,我不必告诉我要执行的目标,在哪个阶段...它是自动的。

谢谢!

4

2 回答 2

3

让您的 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)。相关报价(我的重点):

如果用户未在 POM 中显式设置阶段,则定义将 mojo 执行绑定到的默认阶段。注意:当插件声明添加到 POM 时,此注释不会自动运行 mojo。它仅使用户能够从周围元素中省略该元素。

于 2019-07-16T16:35:30.627 回答
1

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

11.6.3。覆盖Maven Book 中的默认生命周期以供参考

于 2011-04-20T15:36:28.417 回答