当前位置: 首页 > 面试题库 >

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

闻人升
2023-03-14
问题内容

要禁用由父POM继承的插件执行,可以按如下所示进行覆盖:

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

现在,如果父POM没有定义显式执行ID怎么办?这个答案说:“如果您不指定执行ID,Maven会隐式地执行它(以您不直观地期望的方式)。”
那么Maven如何生成执行ID?链接相关Maven源代码的加分点。

注意: 我不是在寻找禁用插件执行的替代方法。


问题答案:

默认情况下,Maven将创建一个执行ID,具体取决于不同情况,它们将应用以下模式:

  • 执行ID设置为:default-cli对于插件:从命令行执行的目标
  • 执行ID设置为: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- compiledefault-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中配置了任何插件的执行,您将注意到defaultMaven应用的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插件并没有执行