Maven 插件执行 ID

Maven plugin execution ID

我有一个关于 maven 插件中的执行 ID 的简单问题。

    <groupId>org.codehaus.mojo</groupId>
    <artifactId>gwt-maven-plugin</artifactId>
    <version>2.7.0</version>
    <executions>
    <execution>
        <id>gwt-process-resources</id>
        <goals>
            <goal>i18n</goal>
            <goal>generateAsync</goal>
        </goals>
    </execution>
</executions>

有人可以向我解释一下这个 executionId 的作用吗?目标是如何触发的?我可以直接调用 "gwt-process-resources" 来执行这两个目标吗?如果是,我该怎么做?

<id></id>的存在只是为了让你能够区分其他执行。实际构建时会显示此标签。

您的执行示例将调用您指定的两个目标:i18ngenerateAsync

如果插件未绑定到特定的 阶段process-resourcespackageinstall 等),您的执行将不执行。插件的文档应该说明是否属于这种情况。

您可以 specify/override 使用 <phase> 标签的默认阶段:

...
<execution>
  <id>gwt-process-resources</id>
  <phase>process-resources</phase> <!-- If you need to override -->
  <goals>
    <goal>i18n</goal>
    <goal>generateAsync</goal>
  </goals>
</execution>
...

...

触发目标:

  • 自动(通过默认阶段隐式或如上所述显式)
  • 通过命令行执行:mvn <plugin name>:<goal>

Note that while execution id's have to be unique among all executions of a single plugin within a POM, they don't have to be unique across an inheritance hierarchy of POMs. Executions of the same id from different POMs are merged. The same applies to executions that are defined by profiles.

https://maven.apache.org/guides/mini/guide-configuring-plugins.html#Using_the_executions_Tag

这里有一个非常简单的解释:

不能直接调用执行id

  mvn gwt-process-resources

将不起作用,因为 gwt-process-resources 只是一个 ID。

如果pom中没有<phase>声明那么你可能需要查看插件的文档并找到相应的默认阶段。如果您查看 documentation of the gwt plugin:

  • gwt:i18n 默认绑定到生成源。
  • gwt:generateAsync 默认绑定到生命周期阶段:generate-sources.

目标是如何触发的?

如果你这样做

mvn compile

=> 编译 > 在 maven 生命周期中生成源代码
=> maven 在 gwt:generateAsync
之后执行 gwt:i18n => 按照在 pom.xml 中声明的顺序执行,因为它们绑定到某个阶段 "generate-sources"

一些插件(例如编译插件)会在临时文件名中使用 "id"。因此,在更改 "id" 时,请确保不要使用“:”之类的字符,这可能会导致格式化有效文件名路径时出现问题。

是的,因为 Maven 3.3.1 你可以,但你需要明确执行每个目标。有几种方法。

这始终有效:

mvn <group-id>:<artifact-id>:(<version>):<goal>@<execution-id>

你的情况:

mvn org.codehaus.mojo:gwt-maven-plugin:i18n@gwt-process-resources(可以跳过版本)

另一种(更方便)的方法是使用目标的简称,如 plugin page:

mvn gwt:i18n@gwt-process-resources