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

A_D*_*teo 6 dependency-management pom.xml maven-3 maven multi-module

关于pom.xmlMaven文件:

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

A_D*_*teo 6

尽管在大多数情况下,是否先声明一个部分并不重要,选择怪异的布局(例如末尾的Maven坐标)时,可准备性确实会受到影响。

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


plugin声明顺序

的顺序pluginwihtin区段build/ plugins段可能是重要的。从Maven 3.0.3MNG-2258)开始,在通过默认绑定附加的任何执行之后,将按文件中声明顺序调用附加到同一Maven阶段的不同插件执行。也就是说,在这种情况下,排序很重要,因为排序可能会影响构建的行为。pom.xml


dependency声明顺序

此外,dependencydependencies节中声明的顺序也可能会影响您对Dependency Mediation的构建,即,在与传递性依赖项发生冲突的情况下,第一个声明的依赖项将获胜。因此,在某些情况下订购很重要

请注意,如果两个依赖关系版本在依赖关系树中的深度相同,则直到Maven 2.0.8都没有定义哪个将获胜,但是由于Maven 2.0.9才是声明中的顺序,所以第一个声明将获胜。

通常,首先声明您直接在代码中引用的依赖项(即import声明)。


顺序module声明

尽管在大多数情况下无关紧要,因为其他重要规则之前已经应用,所以Maven 在多模块构建期间作为最后一个决策点,也将遵守modulemodules部分中元素声明的顺序。该反应器机制实际上将:

对项目进行排序时,应遵循以下关系:

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

注意:此处加粗。


标准布局

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

该团队已在2008年6月下旬投票,决定遵循特定的POM约定订购POM元素。

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

<project>
  <modelVersion/>

  <parent/>

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

  <properties/>

  <dependencyManagement/>
  <dependencies/>

  <build/>

  <reporting/>

  <profiles/>
</project>
Run Code Online (Sandbox Code Playgroud)

最后,sortpom-maven-plugin也可以使用来自动应用此标准排序,只需在相关pom.xml文件上调用以下命令即可:

mvn com.github.ekryd.sortpom:sortpom-maven-plugin:2.5.0:sort \
     -Dsort.keepBlankLines -Dsort.predefinedSortOrder=recommended_2008_06 
Run Code Online (Sandbox Code Playgroud)

还要注意,上面的异常没有被处理,但记录由插件作为特殊情况下,确实订购可能会影响您的构建。


进一步阅读