pom.xml中的通用合并策略

有这样的一个应用场景,对于plugin,dependency,execution等标签来说(这些标签都有“唯一标识符”机制,比如对于plugin标签来说,"groupId:artifactId"是其唯一标识符;对于dependency标签来说,"groupId:artifactId"是其唯一标识符;对于execution标签来说,"id"是其唯一标识符),在祖先pom.xml和后代pom.xml中可以定义相同(基于唯一标识符机制)的标签内容,那么在最终获得的有效pom.xml中,关于这些标签的内容是什么呢?
这就需要介绍pom.xml中的通用合并策略。
通用合并策略的几点概念:
1)通用合并策略适用于具有“唯一标识符”机制的标签,比如plugin,dependency,execution等标签
2)在祖先pom.xml中定义了一个标签内容,在后代pom.xml中也定义了一个相同的标签内容(指的是祖先pom.xml和后代pom.xml中这两个标签内容的唯一标识符一致),那么在最终获得的pom.xml中,关于该标签内容的获得步骤如下:
i、简单属性,如果后代pom.xml中定义了该值,那么最终值取为该值;否则,如果祖先pom.xml中定义了该值,那么最终值取为该值,如果祖先pom.xml中没有定义该值,那么最终值为空
ii、List属性,如果List中元素是简单属性,那么后代pom.xml中定义的List和祖先pom.xml中定义的List进行去重合并;如果List中元素是支持唯一标识符机制的复杂属性,那么后代pom.xml中定义的List和祖先pom.xml中定义的List进行合并,在合并的过程中,递归调用通用合并策略
iii、Map属性,后代pom.xml中定义的Map和祖先pom.xml中定义的Map进行合并,如果合并的时候碰到同一个key,那么后代pom.xml中定义的value值比祖先pom.xml中定义的value值具有高优先级


具体例子可见 《pom.xml中配置plugin标签》


备注:
以上是个人经过实验得到的结论,有可能存在错误,烦请指正

你可能感兴趣的:(项目管理)