关于pom.xml
Maven文件:
答案 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作为特殊情况,确实排序可能会影响您的构建。
进一步阅读: