maven 插件执行的隐式 ID 是啥?
Posted
技术标签:
【中文标题】maven 插件执行的隐式 ID 是啥?【英文标题】:What is the implicit ID of a maven plugin execution?maven 插件执行的隐式 ID 是什么? 【发布时间】:2016-04-08 00:35:13 【问题描述】:要禁用父 POM 继承的插件执行,可以按如下方式覆盖它:
<execution>
<id>TheNameOfTheRelevantExecution</id>
<phase/>
</execution>
如果父 POM 没有明确定义执行 ID 怎么办? This answer 说“如果你没有指定 id 来执行,Maven 会隐式地执行它(以一种你不期望的方式)。”那么 Maven 是如何生成执行 ID 的呢?链接相关 Maven 源代码的奖励积分。
注意:我不是在寻找禁用插件执行的替代方法。
【问题讨论】:
【参考方案1】:默认情况下,Maven 会根据不同的情况应用以下模式创建一个执行 ID:
执行 id 设置为:default-cli
for plugin:goals 从命令行执行
执行 id 设置为:default-<goal_name>
for plugin:goals 作为特定包装定义的 binding 的一部分执行
执行 id 设置为:default
用于 plugin:goals 执行,作为 POM 的一部分,但未指定任何 id。
如果您从命令行执行Maven Dependency Plugin,例如,使用经典的mvn dependency:tree
目标,您会注意到default-cli
执行ID:
[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ project ---
例如,如果您在编译阶段查看任何 Maven 构建的输出和Maven Compiler Plugin 的默认执行,您会注意到default-compile
和default-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(上面 sn-p 中的最后一个标记,在括号之间)如何始终遵循此模式。
最后,如果你在 POM 中配置任何插件的执行而不指定 id,你会注意到 Maven 应用的 default
id:
[INFO] --- exec-maven-plugin:1.1:java (default) @ project ---
来自official Maven documentation:
命令行执行id
从命令行直接调用的每个 mojo 都将分配一个 default-cli 的执行 ID,这将允许使用此默认执行 ID 从 POM 配置该执行
默认绑定执行ID
每个通过指定 POM 打包的默认生命周期映射绑定到构建生命周期的 mojo 都将分配一个 default-goalName 的执行 ID
默认插件执行 ID
executionId 的默认值(在 POM 模型中设置为默认值)旨在提供一些此功能。不幸的是,该解决方案从未经过测试以确保它适用于上述用例;他们在测试期间从裂缝中掉了下来。现在,随着 Maven 2.2.0(以及更高版本的 Maven 3.0)的发布,这些用例终于可以得到解决
最后但同样重要的是,关于执行 ID,因为 Maven 3.3.1 您甚至可以使用新的 @executionId
运算符指向 POM from the command line 的特定执行 ID
【讨论】:
以上是关于maven 插件执行的隐式 ID 是啥?的主要内容,如果未能解决你的问题,请参考以下文章
为啥Java在使用“加号”运算符时会执行从双精度到整数的隐式类型转换? [复制]