我定义了一个具有多个目标的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>
块时默认运行的目标?
AFAIK,Maven插件没有默认目标。
您可以在不添加目标的情况下配置插件。但这不会执行插件。
插件必须在命令行上显式执行(如flyway:migrate
(,或在整个生命周期中自动执行(如compile:compile
或jar:jar
(。
我假设您正在使用 Java5 注释将您的插件标记为可用的 mojo?(而不是Javadoc的生活方式(。
@Mojo
批注具有 defaultPhase 属性。
一旦用户将插件添加到构建中,这些默认值(如果设置(将被使用。
Flyway Migrate Mojo也是这样做的。
编译器插件是一个不好的例子,因为它是 maven 生命周期本身的默认插件绑定的一部分。因此,阶段本身将知道要运行什么魔力。
这些是 maven 插件 API 的文档,使用注释的文档就在附近。
如果它不是您的插件,您可以将您想要的配置放入pluginManagement
部分的父 pom 中。