如何显示哪个父pom包含一个插件?

时间:2016-09-12 05:23:16

标签: maven maven-3 pom.xml

如果我的pom是一个孩子的其他poms的层次结构,有没有办法准确显示哪个父pom包含插件的定义?

1 个答案:

答案 0 :(得分:3)

简短回答很可能是:否。

根据Maven在执行某个构建之前构建其模型的方式,Maven Builder Model

  • 在阶段1中,解决了poms的层次结构
  • 在阶段2中,模型规范化和插件配置得到进一步解决
  • 但仅在第2阶段结束时,执行有效模型验证,这是在最终有效pom.xml文件上完成的,这是由于合并,覆盖,分析,注入(属性)等等

要查看完整的pom,maven-help-plugin的{​​{3}}目标肯定是正确的工具。它将显示(或写入给定文件)构建将使用的最终有效pom。

只有拥有有效的pom,才能创建插件的完整定义(其执行,全局配置等),因为:

  • 层次结构中任何一点的effective-pom部分都可以影响某个插件
  • 层次结构中任何一点的pluginManagement部分也会影响它
  • 在层次结构中的任何一点声明的
  • plugin也可以影响它
  • profiles,如果用作占位符,也可以发挥重要作用

看一下官方的properties,我们可以看到很多入口点影响某个插件定义,这个定义只有在整个pom层次结构合并后才对我们的构建有效。定义本身不会有太大帮助,因为它可以在层次结构链上进一步覆盖/影响。

考虑plugin的{​​{3}}元素:

  

truefalse,无论此插件配置是否应该应用于从此继承的POM。默认值为true

或合并plugin configuration个部分:

  

默认行为是根据元素名称合并配置元素的内容。如果子POM具有特定元素,则该值将成为有效值。如果子POM没有元素,但是父元素,则父值变为有效值   您可以通过向configuration元素的子元素添加属性来控制子POM如何从父POM继承配置。属性为combine.childrencombine.self。在子POM中使用这些属性来控制Maven如何将父级的插件配置与子级中的显式配置相结合。

或者execution的每个plugin进一步向下:

  

inherited:与上面的继承元素一样,设置此false会让Maven无法将此执行传递给其子元素。此元素仅对父POM有意义。

然后,pluginManagement

会影响整体管理
  

插件管理包含插件元素的方式大致相同,除了不是为此特定项目构建配置插件信息,它旨在配置从此继承的项目构建。但是,这仅配置在子节点的plugins元素中实际引用的插件。孩子们有权覆盖pluginManagement定义。

因此,pom层次结构中某个点的插件定义可能对最终的有效构建没有意义。