Java maven插件执行的隐式ID是什么?

Java maven插件执行的隐式ID是什么?,java,maven,pom.xml,Java,Maven,Pom.xml,要禁用父POM继承的插件执行,可以按如下方式覆盖它: <execution> <id>TheNameOfTheRelevantExecution</id> <phase/> </execution> 有关执行的名称 现在,如果父POM没有定义显式执行ID怎么办?说“如果您不指定执行id,Maven将隐式地(以您直觉上不期望的方式)执行它。”那么Maven是如何生成执行id的呢?链接相关Maven源代码的额外点数 注

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

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

有关执行的名称
现在,如果父POM没有定义显式执行ID怎么办?说“如果您不指定执行id,Maven将隐式地(以您直觉上不期望的方式)执行它。”那么Maven是如何生成执行id的呢?链接相关Maven源代码的额外点数


注意:我没有寻找其他方法来禁用插件执行。

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

  • 对于插件:从命令行执行的目标,执行id设置为:
    default cli
  • 执行id设置为:
    default-
    对于插件:作为特定打包定义的一部分执行的目标
  • 执行id设置为:
    default
    ,用于plugin:goals执行作为POM的一部分,POM没有指定任何id

例如,如果使用经典的
mvn dependency:tree
目标从命令行执行,您将注意到
default cli
执行id:

[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ project ---
例如,如果在编译阶段查看任何Maven构建的输出和的默认执行,您将注意到
default compile
default testCompile
作为Maven编译器插件的
compile
testCompile
目标的执行ID

相同的模式应用于Maven执行的所有默认插件/目标,作为为给定打包定义的组件的一部分。执行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(上面代码段中括号之间的最后一个标记)如何始终遵循此模式

最后,如果您在POM中配置任何插件的执行而不指定id,您将注意到Maven应用的
默认
id:

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

发件人:

命令行执行id

直接从命令行调用的每个mojo都将有一个默认cli的执行Id分配给它,这将允许使用此默认执行Id从POM配置该执行

默认绑定执行id

通过指定POM包的默认生命周期映射绑定到构建生命周期的每个mojo都将为其分配一个默认目标名称的执行Id

默认插件执行id

executionId的默认值——在POM模型中按字面意思设置为默认值——旨在提供一些这方面的功能。不幸的是,这个解决方案从未经过测试,以确保它与上述用例一起工作;他们在测试过程中从裂缝中掉了下来。现在,随着Maven 2.2.0(以及更高版本的Maven 3.0)的发布,这些用例终于可以解决了


最后但并非最不重要的一点是关于执行id,因为您甚至可以使用新的
@executionId
操作符指向POM的特定执行id