【问题标题】: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 源代码的奖励积分。

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

【问题讨论】:

    标签: java maven pom.xml


    【解决方案1】:

    默认情况下,Maven 会根据不同的情况应用以下模式创建一个执行 ID:

    • 执行 id 设置为:default-cli for plugin:goals 从命令行执行
    • 执行 id 设置为:default-&lt;goal_name&gt; 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-04
      • 1970-01-01
      • 1970-01-01
      • 2016-02-27
      • 1970-01-01
      • 1970-01-01
      • 2018-10-17
      • 2011-09-16
      相关资源
      最近更新 更多