Maven POM文件:有关元素和部分排序的任何规则?

时间:2016-06-16 08:39:17

标签: maven maven-3 pom.xml dependency-management multi-module

关于pom.xml Maven文件:

  • 是否有任何具体规则适用于声明部分的排序?
  • 它对构建有什么重要性或影响吗?
  • 我可以遵循任何官方惯例吗?

1 个答案:

答案 0 :(得分:4)

虽然在大多数情况下,一个部分是否在另一个部分之前被声明是无关紧要的,但是在选择一个奇怪的布局(例如最后的Maven坐标)时,可重复性确实会受到影响。

但这不是最重要的一点,因为,某些元素的排序会影响您的构建

plugin声明的顺序

plugin / build部分plugins部分的顺序可能很重要。由于Maven 3.0.3 MNG-2258),将在pom.xml声明顺序中调用附加到同一Maven阶段的不同插件执行在通过default bindings附加的任何执行之后的文件。也就是说,在这种情况下,排序很重要,因为它可能会影响构建的行为。

dependency声明的顺序

此外,dependency部分中的dependencies声明顺序也可能会影响您对Dependency Mediation的构建,也就是说,如果与传递依赖项发生冲突,则第一个声明的依赖项会获胜。因此,在某些情况下,排序很重要

  

请注意,如果两个依赖项版本在依赖关系树中处于相同的深度,那么直到Maven 2.0.8没有定义哪一个会赢,但是从Maven 2.0.9开始,它就是声明中的顺序。计数:第一个宣言获胜。

作为重击规则:首先声明您在代码中直接引用的依赖项(即import语句)。

module声明

的顺序

虽然在大多数情况下不相关,因为之前适用的其他重要规则,Maven也会尊重多模块中module部分内modules元素声明的顺序建立作为最后的决定点。事实上reactor mechanism

  

在对项目进行排序时,以下关系得到遵守:

     
      
  • 项目依赖于构建中的另一个模块
  •   
  • 插件声明,其中插件是构建
  • 中的另一个模块   
  • 构建
  • 中另一个模块的插件依赖项   
  • 构建
  • 中另一个模块的构建扩展声明   
  • 元素中声明的顺序(如果没有其他规则适用)
  •   

注意:这里添加了粗体。

标准布局

最后但并非最不重要的是,尽管排序对于pom.xml文件的其他部分并不重要,但良好的习惯是遵循官方Maven recommendations

  

该团队已于2008年6月底投票,按照特定的POM惯例订购POM元素。

作为简化版,请遵循以下声明顺序:

<project>
  <modelVersion/>

  <parent/>

  <groupId/>
  <artifactId/>
  <version/>
  <packaging/>

  <properties/>

  <dependencyManagement/>
  <dependencies/>

  <build/>

  <reporting/>

  <profiles/>
</project>

作为最后一点,sortpom-maven-plugin也可用于自动应用此标准排序,只需在相关pom.xml文件上调用以下内容:

mvn com.github.ekryd.sortpom:sortpom-maven-plugin:2.5.0:sort \
     -Dsort.keepBlankLines -Dsort.predefinedSortOrder=recommended_2008_06 

另请注意,上述例外情况不会被处理,但插件会documented作为特殊情况,确实排序可能会影响您的构建。

进一步阅读