Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maven 如何显示哪个父pom包含插件?_Maven_Maven 3_Pom.xml - Fatal编程技术网

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

Maven 如何显示哪个父pom包含插件?,maven,maven-3,pom.xml,Maven,Maven 3,Pom.xml,如果我的pom是其他pom层次结构中的一个子pom,有没有办法准确地显示哪个父pom包含插件的定义 简短的回答很可能是:不 根据Maven在执行某个构建之前构建其模型的方式,如下所示: 在第1阶段,POM的层次结构得到解决 在第2阶段,模型规范化和插件配置得到进一步解决 但是,只有在第2阶段结束时,才会执行有效的模型验证,这是在最终有效的pom.xml文件上完成的,这是合并、重写、分析、注入(属性)等的结果 看看完整的pom,maven帮助插件的目标肯定是正确的工具。它将显示(或写入给定文件

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

简短的回答很可能是:不

根据Maven在执行某个构建之前构建其模型的方式,如下所示:

  • 在第1阶段,POM的层次结构得到解决
  • 在第2阶段,模型规范化和插件配置得到进一步解决
  • 但是,只有在第2阶段结束时,才会执行有效的模型验证,这是在最终有效的
    pom.xml
    文件上完成的,这是合并、重写、分析、注入(属性)等的结果
看看完整的pom,maven帮助插件的目标肯定是正确的工具。它将显示(或写入给定文件)构建将使用的最终有效pom

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

  • 层次结构中任何一点的部分都可能影响某个插件
  • 层次结构中任何点中的节也会影响它
  • 在层次结构中的任何点中声明也会影响它
  • ,如果用作占位符,也可以发挥重要作用
看看官方版本,我们可以看到许多影响某个插件定义的入口点,这些入口点只有在整个pom层次结构中合并后才能对我们的构建有效。定义本身不会有多大帮助,因为它可以在层次结构链上被进一步覆盖/影响


考虑一下
插件的元素

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

或合并
插件
配置
部分:

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

或者根据
插件的
执行

inherited
:与上面的inherited元素一样,将此
设置为false
将禁止Maven将此执行传递给其子级。此元素仅对父POM有意义

然后,
pluginManagement
会影响整体管理:

插件管理包含插件元素的方式与此基本相同,不同之处在于它不是为这个特定的项目构建配置插件信息,而是配置从这个项目构建继承的项目构建。但是,这仅配置在子元素的plugins元素中实际引用的插件。孩子们完全有权覆盖
pluginManagement
定义


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

非常好的解释。但从实践的角度来看,至少在我的经验中,平均继承链并没有那么深。简单地通过层次结构查找特定插件并不难。当然,你必须手动操作,但不应该是你每天都要做的事情。