gpt4 book ai didi

java - Maven 插件执行的隐式 ID 是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:54:48 25 4
gpt4 key购买 nike

要禁用由父 POM 继承的插件执行,可以按如下方式覆盖它:

<execution>
<id>TheNameOfTheRelevantExecution</id>
<phase/>
</execution>

现在如果父 POM 没有定义明确的执行 ID 怎么办? This answer说“如果你不指定 id 执行,Maven 会隐式地执行它(以一种你不希望直观的方式)。”那么Maven是如何生成执行ID的呢?链接相关 Maven 源代码的奖励积分。

注意:我并不是在寻找其他方法来禁用插件执行。

最佳答案

默认情况下,Maven 将根据不同的情况应用以下模式创建一个执行 ID:

  • 执行 ID 设置为:default-cli对于插件:从命令行执行的目标
  • 执行 ID 设置为:default-<goal_name>对于插件:作为 binding 的一部分执行的目标由特定包装定义
  • 执行 ID 设置为:default对于 plugin:goals 执行作为未指定任何 id 的 POM 的一部分。

如果你执行Maven Dependency Plugin从命令行,例如,使用经典的 mvn dependency:tree目标,你会注意到 default-cli执行编号:

[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ project ---

如果您查看任何 Maven 构建的输出以及 Maven Compiler Plugin 的默认执行例如,在编译阶段,您会注意到 default-compiledefault-testCompile作为 compile 的执行 ID和 testCompile Maven 编译器插件的目标。

相同的模式适用于 Maven 作为 binding 的一部分执行的所有默认插件/目标。为给定的包装定义。执行 ID 始终位于相关插件和目标名称之后的圆括号内。
例如,基本 Maven 构建的摘录:

[INFO] --- maven-clean-plugin:2.5:clean (default-clean)
[INFO] --- maven-resources-plugin:2.6:resources (default-resources)
[INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile)
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources)
[INFO] --- maven-compiler-plugin:2.5.1:testCompile (default-testCompile)
[INFO] --- maven-surefire-plugin:2.19:test (default-test)

显示执行 ID(上面代码段中的最后一个标记,括号之间)如何始终遵循此模式。

最后,如果您在没有指定 id 的情况下配置 POM 中任何插件的执行,您会注意到 default Maven 应用的 id:

[INFO] --- exec-maven-plugin:1.1:java (default) @ project ---

来自 official Maven documentation :

命令行执行id

each mojo invoked directly from the command line will have an execution Id of default-cli assigned to it, which will allow the configuration of that execution from the POM by using this default execution Id

默认绑定(bind)执行id

each mojo bound to the build lifecycle via the default lifecycle mapping for the specified POM packaging will have an execution Id of default-goalName assigned to it

默认插件执行 ID

the default value of the executionId - literally set to default in the POM model - was meant to provide some of this functionality. Unfortunately, this solution was never tested to make sure it worked with the use cases above; they fell through the cracks during testing. Now, with the release of Maven 2.2.0 (and later, Maven 3.0), these use cases can finally be addressed


最后但同样重要的是,关于执行 ID,因为 Maven 3.3.1您甚至可以指向 POM 的特定执行 ID from the command line使用新的 @executionId运算符

关于java - Maven 插件执行的隐式 ID 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34590452/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com