当我有多个用于该目标的配置时,如何在 Maven 插件中使用特定配置运行特定目标

Posted

技术标签:

【中文标题】当我有多个用于该目标的配置时,如何在 Maven 插件中使用特定配置运行特定目标【英文标题】:How do I run a specific goal with a particular configuration in a Maven plugin when I have several configurations for that goal 【发布时间】:2011-03-27 19:01:53 【问题描述】:

请参阅下面 pom.xml 中的插件配置。

我能做到:

mvn myplugin:myGoal

哪个运行 myGoal(我想是两次执行),但我希望能够独立选择第一次或第二次执行。

我知道我可以向执行元素添加一个 id,但我如何在命令行上引用该 id。我想得到一些可以完成这个想象中的命令所做的事情:

mvn myplugin:myGoal --executionId=1

这可能吗,还是我走错了路?

        <plugin>
            <groupId>org.myplugin</groupId>
            <artifactId>myplugin-maven-plugin</artifactId>
            <version>1.1.1</version>
            <executions>
                <execution>
                    <id>process-cats</id>
                    <goals>
                        <goal>myGoal</goal>
                    </goals>
                    <configuration>
                        <myParam>cats</myParam>
                    </configuration>
                </execution>
                <execution>
                    <id>process-dogs</id>
                    <goals>
                        <goal>myGoal</goal>
                    </goals>
                    <configuration>
                        <myParam>dogs</myParam>
                    </configuration>
                </execution>
            </executions>
        </plugin>

【问题讨论】:

您介意接受***.com/a/33627949/318054 吗?之前接受的答案不再有效。 同意,接受的答案“不,不可能”是不正确的。你现在可以 mvn plugin:goal@an_id .. 所以如果你有一个 an_id 它会工作的。 很遗憾,@lukewm 已经有一段时间没有出现了。 【参考方案1】:

Maven 3.3.1+ 现在支持从 CLI 执行多个目标

mvn exec:java@first-cli
mvn exec:java@second-cli

其中 first-cli/second-cli 是执行 ID。

https://blog.soebes.de/blog/2015/03/17/apache-maven-3-dot-3-1-features/

对于您的示例,命令将是

mvn myplugin:mygoal@process-cats
mvn myplugin:mygoal@process-dogs

【讨论】:

【参考方案2】:

我可以做 mvn myplugin:myGoalWhich 运行 myGoal(我想都是执行)

没有一个(假设他们有唯一的id)。执行被绑定到一个阶段,你需要运行给定的阶段来触发它们。

我知道我可以向执行元素添加一个 id,但我如何在命令行上引用该 id。

不支持。在 CLI 上调用的插件可以使用特殊的 default-cli executionId 在 POM 中定义一个非全局配置,如下所示:

<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <executions>
    <execution>
      <id>default-cli</id>
      <configuration>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
          <descriptorRef>project</descriptorRef>
        </descriptorRefs>
      </configuration>
    </execution>
  </executions>
</plugin>

这可能吗,还是我走错了路?

不,不可能。在命令行上传递参数或使用配置文件(有或没有上述默认执行)。

参考文献

Default Plugin Execution IDs http://jira.codehaus.org/browse/MNG-3203 http://jira.codehaus.org/browse/MNG-3401

【讨论】:

【参考方案3】:

嘿,你可以像这样创建你的目标:-

org.myplugin:myplugin-maven-plugin:1.1.1:myGoal  i.e
<groupId>:<artifactId>:<version>:<yourgoal>

它适用于我的情况......

【讨论】:

是的。如果您在多模块项目中,请不要忘记添加 -pl my-module【参考方案4】:

如果你打电话,你所做的假设

  mvn myplugin:myGoal

但问题是您会收到一条错误消息,因为执行没有唯一的 id(在这种情况下两者都相同)。

您可以通过配置文件实现您喜欢做的事情,您可以通过 mvn -PXYZ 和 mvn -PABC 激活这些配置文件

【讨论】:

以上是关于当我有多个用于该目标的配置时,如何在 Maven 插件中使用特定配置运行特定目标的主要内容,如果未能解决你的问题,请参考以下文章

如何检查在阶段调用的 Maven 目标

在 IntelliJ 中,如何调试 Maven 测试目标?

从多个配置文件组合后,Maven antrun 插件缺少目标任务

当我通过maven添加依赖时,为什么lombok不起作用?

如何构建多个maven模块项目?

多个条件下的 Maven 配置文件激活