要禁用由父POM继承的插件执行,可以按如下所示进行覆盖:
<execution>
<id>TheNameOfTheRelevantExecution</id>
<phase/>
</execution>
现在,如果父POM没有定义显式执行ID怎么办?这个答案说:“如果您不指定执行ID,Maven会隐式地执行它(以您不直观地期望的方式)。”
那么Maven如何生成执行ID?链接相关Maven源代码的加分点。
注意: 我不是在寻找禁用插件执行的替代方法。
默认情况下,Maven将创建一个执行ID,具体取决于不同情况,它们将应用以下模式:
default-cli
对于插件:从命令行执行的目标default-<goal_name>
对于插件:目标是作为特定包装定义的绑定的一部分执行的default
对于插件:执行ID设置为::将执行作为未指定任何ID的POM的一部分。例如,如果您从命令行执行Maven Dependency Plugin,例如,使用经典mvn dependency:tree
目标,则会注意到default-cli
执行ID:
[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ project ---
例如,如果您查看任何Maven构建的输出以及Maven编译器插件在编译阶段的默认执行情况,您会注意到Maven编译器插件和目标的ID,default- compile
并default-testCompile
作为其执行ID 。compile``testCompile
相同的模式将应用于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(上面代码段中的最后一个标记,位于方括号之间)如何始终遵循此模式。
最后,如果在未指定ID的情况下在POM中配置了任何插件的执行,您将注意到default
Maven应用的ID:
[INFO] --- exec-maven-plugin:1.1:java (default) @ project ---
从Maven官方文档中:
命令行执行ID
直接从命令行调用的每个mojo都将为其分配一个默认ID的执行ID,这将允许通过使用此默认执行ID从POM配置该执行。
默认绑定执行ID
通过指定的POM包装的默认生命周期映射绑定到构建生命周期的每个mojo都将为其分配一个default-goalName执行ID
默认插件执行ID
executionId的默认值(实际上是在POM模型中设置为default)旨在提供某些此功能。不幸的是,从未对该解决方案进行过测试以确保它可以与上述用例一起使用。他们在测试过程中跌破了裂缝。现在,随着Maven
2.2.0(以及更高版本的Maven 3.0)的发布,这些用例终于可以解决了。
最后但并非最不重要的一点,关于执行ID,自Maven
3.3.1起,您甚至可以使用new
运算符从命令行指向POM的特定执行ID。@executionId
注意:我不是在寻找其他方法来禁用插件的执行。
我是maven的新手,学习如何以及何时在插件中执行阶段/目标 假设我的pom中有以下代码片段 现在,如果我执行mvn安装,安装之前的modello的所有阶段(以及每个阶段对应的所有目标)都将执行。正当 但是,如果进行以下修改以引入特定目标,则只会执行一个目标,即java目标(因为它位于安装阶段之前的生成源代码阶段)。对吗?
我正在尝试使用shade插件创建一个可执行JAR的简单示例。我逐行浏览了这里的示例,在我的机器上似乎根本没有执行shade插件。 我的阴影POM代码是: 运行“mvn包”后,创建的JAR不包含任何项目依赖项。从调试跟踪来看,似乎从未调用过shade插件。要让shade发挥其魔力,是否还需要一些额外的步骤? 编辑:示例的完整代码位于https://github.com/hutch31/maven-s
问题内容: 我想使用Maven强制执行器插件检查我的路径上是否有重复的类。我从这里尝试过这个例子。 但是当我这样运行时: 我得到这个: 无法在项目datapopulator上执行目标org.apache.maven.plugins:maven-enforcer- plugin:1.0.1:enforce(default-cli):目标org.apache.maven.plugins:maven-
问题内容: 从jmeter-maven-plugin执行JMeter时可以使用JMeter 插件吗? 更新 我尝试按照Ardesco的有用答案将依赖项添加到插件定义中,但是却得到了无数的。它 看起来 像Maven是不是把执行的JMeter时的传递依赖的类路径。有任何想法吗? 问题答案: 尽管此答案被接受,但仅适用于2.X之前的版本。但是对于高于2.X的版本,请参见此答案。 使用2.6.0版或更高版
在我当前的项目设置中,maven shade插件的执行非常不稳定。这个插件看起来像是在我构建父模块之后执行的,但是在那个实例中执行之后,它在独立构建子模块时无法执行。 我的父母是 还有孩子pom 以及在具有上述pom的子模块上运行“安装”目标时的构建输出 如您所见,尽管在< code >中定义了执行,maven shade插件并没有执行