Maven插件执行ID

Flo*_*ian 13 java gwt maven

我有一个关于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>
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*iel 12

<id></id>存在只是为了能够区分其他执行.执行实际构建时将显示此标记.

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

如果插件未绑定到特定阶段(process-resources,package,install等),你的执行将不会进行.插件的文档应该告诉我是否是这种情况.

您可以使用<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>
...
Run Code Online (Sandbox Code Playgroud)

...

目标被触发:

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


Yia*_*kis 6

是的,从Maven 3.3.1开始你可以,但是你需要显式地执行每个目标。有几种方法。

这总是有效:

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

在你的情况下:

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

另一种(更方便)的方法是使用目标的短名称,如插件页面顶部所示:

mvn gwt:i18n@gwt-process-resources


que*_*com 5

这是一个非常简单的解释:

您不能直接调用执行 ID

  mvn gwt-process-resources
Run Code Online (Sandbox Code Playgroud)

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

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

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

目标是如何触发的?

如果你这样做

mvn compile
Run Code Online (Sandbox Code Playgroud)

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