【问题标题】:How to rename goals in Maven?如何在 Maven 中重命名目标?
【发布时间】:2011-02-13 17:58:30
【问题描述】:

在 Maven 文档Introduction to the Build Lifecycle 中,描述了输出当前时间的目标display:time。插件如下:

...
<plugin>
  <groupId>com.mycompany.example</groupId>
  <artifactId>maven-touch-plugin</artifactId>
  <version>1.0</version>
  <executions>
    <execution>
      <phase>process-test-resources</phase>
      <goals>
        <goal>timestamp</goal>
      </goals>
    </execution>
  </executions>
</plugin>
...

我有几个关于这个插件的问题:

  1. 如何将目标名称更改为例如foo:bar? (为什么displaytime 都没有出现在 XML 片段中的任何位置?通过查看片段,您如何知道它定义了哪些目标?)

  2. 如何手动运行此目标? (对于类似的结构,mvn display:time 的等效项有时会起作用,但这并不始终如一。)

  3. 如何查看这个目标是否存在? (即列出可用的目标;this question 表明这是不可能的。)

【问题讨论】:

    标签: maven maven-2 maven-plugin


    【解决方案1】:

    如何将目标名称更改为例如 foo:bar? (为什么在 XML 片段中的任何地方都没有显示和时间?从片段中你怎么知道它定义了什么目标?)

    要将前缀的名称更改为“foo”,您需要配置 maven 插件“plugin”。

        <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-plugin-plugin</artifactId>
        <version>2.5.1</version>
        <configuration>
            <goalPrefix>foo</goalPrefix>
        </configuration>
        </plugin>
    

    要更改目标的名称,您需要在插件 java 源代码中编辑 javadoc

    /**
     * Prints a timestamp to console
     *
     * @goal bar
     */
    public class TimestampMojo extends AbstractMojo {
      // ...
    }
    

    将插件前缀添加到您的 settings.xml 文件中

    <pluginGroups>
      <pluginGroup>com.mycompany.example</pluginGroup>
    </pluginGroups>
    

    如何手动运行这个目标?

    mvn com.mycompany.example:foo:bar
    

    或带有插件前缀设置(上)

    mvn foo:bar
    

    如何查看这个目标是否存在? (即列出可用目标)

    将以下内容添加到 maven 插件插件元素中,您可以使用 foo:help 打印出目标列表。

    <plugin>
    ...
    <executions>
    <execution>
    <id>generated-helpmojo</id>
    <goals>
    <goal>helpmojo</goal>
    </goals>
    </execution>
    </executions>
    </plugin>
    

    【讨论】:

      【解决方案2】:

      如何将目标的名称更改为例如foo:bar? (为什么displaytime 都没有出现在 XML 片段中的任何位置?通过查看片段,你怎么知道它定义了什么目标?)

      准确地说,在foo:bar 中,foo 是“插件目标前缀”,bar 是“目标”。虽然后者源自命名约定(或者可以是configured1),但前者来自于实现插件逻辑的类BarMojo 的注释。像这样的:

      /**
       * Do the wonderful bar.
       * @goal bar
       * @requiresProject false
       */
      public class BarMojo extends AbstractMojo
      {
          ...
      }
      

      改变目标需要修改插件mojo的注解并重建它。

      关于您链接到的文档,目标time 与将timestamp 目标绑定到process-test-resources 阶段的XML 片段之间明显不匹配。这一定是笔误。

      如何手动运行此目标? (对于类似的结构,等效的 mvn display:time 有时会起作用,但这并不能始终如一地起作用。)

      你可以这样称呼它:

      mvn com.mycompany.example:maven-touch-plugin:1.0:timestamp
      

      您可以通过将com.mycompany.example 添加到settings.xml 中的Plugin Groups 来缩短此命令(默认情况下声明org.apache.maven.pluginsorg.codehaus.mojo,以防您想知道它如何适用于这些插件)

      <settings>
        ...
        <pluginGroups>
          <pluginGroup>com.mycompany.example</pluginGroup>
        </pluginGroups>
      </settings>
      

      然后,因为插件名称匹配 ${prefix}-maven-pluginmaven-${prefix}-plugin 模式,您可以执行:

      mvn touch:timestamp 
      

      建议遵循约定,但正如我所说,前缀也可以是configured

      如何查看这个目标是否存在?

      检查插件文档(源自插件源)或插件源。


      1 请注意,Maven Book 提到的页面底部还有一个错字。使用自定义前缀执行插件的方式应该是mvn blah:echo(参见MVNREF-145)。

      【讨论】:

        【解决方案3】:

        我认为文档可能有错字。插件目标由plugin-name:goal-name 指定。该 XML 会将目标 touch:timestamp 绑定到 process-test-resources 阶段。该片段与display:time 没有任何关系。

        1. 据我所知,无法重命名 maven 目标。 (看起来它只会让事情变得更加混乱。)插件源代码定义了目标,而不是 pom.xml 。 pom 中的 标记仅允许您将插件目标绑定到阶段,或者如果目标已经具有默认阶段,则重新绑定目标。

        2. 您应该能够使用prefix:goalName 运行目标。大多数情况下,前缀只是 artifactId 中“maven-”和“-plugin”之间的任何内容。例如touch:timestamp。这在某些情况下很复杂,因为插件作者可以指定与插件名称不同的“goalPrefix”,但我从来没有遇到过这个问题。

        3. 了解插件定义的目标以及默认绑定到哪些阶段的最佳方法是阅读插件文档。

        【讨论】:

          【解决方案4】:

          给你的第一个。目标的名称由插件定义(有一个注释)。如果有源代码,您可以更改它。 查看 XML,您无法知道插件仅定义了 XML 中给出的目标。最好的位置是查看插件的文档。 第二个:您必须检查文档。通常 pluginname:goal ...可能你必须指定插件的完整路径(groupId)。 到第三个:平时应该可以使用帮助插件看看docs

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-05-16
            • 2013-11-17
            • 2011-07-18
            • 2011-04-29
            • 1970-01-01
            • 1970-01-01
            • 2016-01-09
            • 2013-09-04
            相关资源
            最近更新 更多