我编写了一个在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插件时,我不必告诉我想要执行的目标,在哪个阶段...它是自动的。
谢谢!
答案 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 。它仅使用户能够从中省略元素 周围的元素。