如何为 Maven 插件指定默认目标?

How to specify a default goal for a Maven plugin?

我已经定义了一个具有多个目标的 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,它们不需要指定 executionhttps://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> 块时,如何指定默认应该 运行 的目标?

我假设您正在使用 Java5 注释将您的插件标记为可用 mojo? (而不是 javadoc 的生活方式)。

@Mojo 注释具有 defaultPhase 属性。

一旦用户将插件添加到构建中,将使用这些默认值(如果已设置)。

Flyway Migrate Mojo也是这样做的。

编译器插件是一个不好的例子,因为它是 Maven life-cycle 本身的 default plugin bindings 的一部分。所以这个阶段本身会知道 运行.

有什么魔力

这些是 maven plugin api, the one for using annotations 就在附近的文档。

如果它不是你的插件,你可以将你想要的配置放入父 pom 到 pluginManagement 部分。

据我所知,Maven 插件没有默认目标。

您可以在不添加目标的情况下配置插件。但这并没有执行插件。

插件必须在命令行上显式执行(如 flyway:migrate)或通过生命周期自动执行(如 compile:compilejar:jar)。