Maven POM 文件:关于元素和部分排序的任何规则?
Posted
技术标签:
【中文标题】Maven POM 文件:关于元素和部分排序的任何规则?【英文标题】:Maven POM file: any rule on ordering of elements and sections? 【发布时间】:2016-10-17 16:00:32 【问题描述】:关于pom.xml
Maven 文件:
【问题讨论】:
【参考方案1】:尽管在大多数情况下,一个部分是否在另一个部分之前声明是无关紧要的,但在选择奇怪的布局(例如,最后的 Maven 坐标)时,可读性确实会受到影响。
但这不是最重要的一点,因为是的,某些元素的顺序会影响您的构建。
plugin
声明的顺序
plugin
部分在 build
/plugins
部分中的顺序可能很重要。从 Maven 3.0.3 (MNG-2258
) 开始,附加到同一 Maven 阶段的不同插件执行将在 pom.xml
文件中按照它们的声明顺序 被调用,之后通过default bindings 附加的任何执行。也就是说,在这种情况下,排序很重要,因为它可能会影响构建的行为。
dependency
声明的顺序
此外,dependencies
部分中的dependency
声明的顺序也可能会影响您对Dependency Mediation 的构建,也就是说,在与传递依赖项发生冲突的情况下,第一个声明的依赖项获胜。因此,在某些情况下排序很重要。
请注意,如果两个依赖版本在依赖树中的深度相同,则在 Maven 2.0.8 之前没有定义哪个会胜出,但从 Maven 2.0.9 开始,重要的是声明中的顺序:第一个声明获胜。
作为重击规则:首先声明您在代码中直接引用的依赖项(即,作为import
语句)。
module
声明的顺序
虽然在大多数情况下不相关,但因为之前应用了其他重要规则,Maven 还将在多模块构建期间尊重modules
部分中module
元素的声明顺序作为最后决定观点。 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 由插件作为特殊情况下确实排序可能会影响您的构建。
进一步阅读:
Official Maven doc: Plugin Bindings Official Maven doc: Dependency Mediation Official Maven doc: Maven Code Style And Code Conventions【讨论】:
以上是关于Maven POM 文件:关于元素和部分排序的任何规则?的主要内容,如果未能解决你的问题,请参考以下文章
Maven的pom.xml文件详解------Build Settings
Maven的pom.xml文件详解------Build Settings