我定义了一个具有多个目标的Maven插件。当前,用户按如下方式运行我的插件:
<plugin>
<groupId>myGroupId</groupId>
<artifactId>myArtifactId</artifactId>
<version>someVersion</version>
<executions>
<execution>
<goals>
<goal>myGoal</goal>
</goals>
</execution>
</executions>
</plugin>
但是我见过其他插件,例如maven-compiler-plugin
和Flyway,它们不需要指定execution
:https://flywaydb.org/getstarted/java
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>5.2.4</version>
<configuration>
<url>jdbc:h2:file:./target/foobar</url>
<user>sa</user>
<locations>
<location>classpath:db/migration</location>
</locations>
</configuration>
</plugin>
当用户排除<executions>
块时,如何指定默认运行的目标?
答案 0 :(得分:2)
AFAIK,Maven插件没有默认目标。
您可以配置插件而无需添加目标。但这不会执行插件。
该插件必须在命令行上显式执行(如flyway:migrate
)或在生命周期内自动执行(如compile:compile
或jar:jar
)。
答案 1 :(得分:0)
我假设您正在使用Java5注释将您的插件标记为可用mojo? (而不是Javadoc的生活方式)。
@Mojo
批注具有defaultPhase属性。
一旦用户将插件添加到内部版本中,就会使用这些默认值(如果已设置)。
Flyway Migrate Mojo也是如此。
编译器插件有点不好,因为它是Maven生命周期本身的default plugin bindings的一部分。因此,阶段本身将知道要运行什么mojo。
这些是maven plugin api的文档,using annotations的文档在附近。
如果不是您的插件,则可以将所需的配置放入pluginManagement
部分的父pom中。