要禁用父POM继承的插件执行,可以按以下方式重写它:
<execution>
<id>TheNameOfTheRelevantExecution</id>
<phase/>
</execution>
现在,如果父POM没有定义显式执行ID,怎么办?这个答案说:“如果您不指定执行的id,那么Maven将隐式地执行它(以一种您不直观地期望的方式)。”那么Maven是如何生成执行ID的呢?链接相关Maven源代码的额外积分。
注意:,我不是在寻找禁用插件执行的替代方法。
发布于 2016-01-04 20:17:09
默认情况下,Maven将根据不同的情况创建一个应用以下模式的执行id:
default-cli
for plugin:从命令行执行的目标default-<goal_name>
for plugin:目标作为特定打包定义的绑定的一部分执行default
用于插件:目标执行作为POM的一部分,它没有指定任何id。例如,如果您从命令行执行Maven依赖插件,并且具有典型的mvn dependency:tree
目标,您将注意到default-cli
执行id:
[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ project ---
例如,如果您查看任何Maven构建的输出以及编译阶段Maven编译器插件的默认执行,您将注意到default-compile
和default-testCompile
作为Maven Compiler插件的compile
和testCompile
目标的执行ids。
同样的模式应用于Maven执行的所有默认插件/目标,作为为给定打包定义的绑定的一部分。执行ids总是位于相关插件和目标名称之后的曲线括号之间。
例如,基本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)
显示执行ids (上面代码段中的最后一个令牌,括号之间)是如何始终遵循此模式的。
最后,如果在不指定id的情况下配置POM中任何插件的执行,您将注意到Maven应用的default
id:
[INFO] --- exec-maven-plugin:1.1:java (default) @ project ---
来自官方Maven文档:
命令行执行id
每个直接从命令行调用的mojo都将有一个默认-cli的执行Id分配给它,这将允许通过使用这个默认的执行Id从POM配置该执行。
默认绑定执行id
通过指定POM打包的默认生命周期映射绑定到构建生命周期的每个mojo都将有一个默认目标名的执行Id分配给它。
默认插件执行id
executionId的默认值--实际上是在POM模型中设置为默认值--是为了提供其中的一些功能。不幸的是,这个解决方案从未经过测试以确保它能与上面的用例一起工作;它们在测试过程中就会崩溃。现在,通过发布Maven 2.2.0 (以及更高版本的Maven 3.0),这些用例可以最终得到解决。
最后但并非最不重要的是,关于执行id,因为Maven 3.3.1甚至可以使用新的@executionId
运算符指向POM 从命令行的特定执行id。
https://stackoverflow.com/questions/34590452
复制相似问题