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

时间:2019-07-17 15:22:15

标签: maven mojo

我定义了一个具有多个目标的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>块时,如何指定默认运行的目标?

2 个答案:

答案 0 :(得分:2)

AFAIK,Maven插件没有默认目标。

您可以配置插件而无需添加目标。但这不会执行插件。

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

答案 1 :(得分:0)

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

@Mojo批注具有defaultPhase属性。

一旦用户将插件添加到内部版本中,就会使用这些默认值(如果已设置)。

Flyway Migrate Mojo也是如此。

编译器插件有点不好,因为它是Maven生命周期本身的default plugin bindings的一部分。因此,阶段本身将知道要运行什么mojo。

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

如果不是您的插件,则可以将所需的配置放入pluginManagement部分的父pom中。