今天我发现settings.xml
中定义的maven属性会覆盖pom.xml
中的maven属性。
因为这只是观察,我不确定这是否完全正确。所以我查找了参考文章或一些文章,但我没有找到关于覆盖settings.xml
和pom.xml
中使用相同名称定义的属性的行为的具体说明。
也许某人可以提供参考部分的链接(我可能会忽略)或可靠的文章/博客?
答案 0 :(得分:16)
基于documentation,我认为哪一个优先于另一个(文档的摘录):
如果配置文件处于活动状态,则其值将覆盖任何配置文件 等效于POM或profiles.xml文件中的ID'd配置文件。
仅在Maven 2.2中,在maven 3中不再存在profiles.xml它受支持但不应使用。
答案 1 :(得分:7)
我认为具有相同名称的属性会在下一个序列中被覆盖(从最高到最低的上下文):
http://maven.apache.org/guides/introduction/introduction-to-profiles.html
因此,pom.xml
属性(每个项目)被settings.xml
(每个用户)属性覆盖,名称相同。
答案 2 :(得分:1)
刚刚在我的maven 3.3.9上测试过它。
首先,如果我们讨论的是settings.xml,那么属性总是在配置文件中定义。
全局设置中的属性XML具有最高优先级,并将覆盖用户settings.xml
和特定pom.xml
,除非配置文件之间存在名称冲突。
如果是这种情况,那就是在全局,用户设置以及pom.xml中有一个配置文件具有相同的ID ,用户/本地settings.xml就是老板。
即使pom.xml
中的属性不在配置文件中,来自具有相同名称的活动配置文件的用户/本地settings.xml
属性也会超过它。
顺便说一句,全局settings.xml
也会在没有配置文件的情况下击败pom.xml属性。
作为旁注:
对于<repositories>
和<mirrors>
,逻辑略有不同:
<mirrors>
的全局优先级。<repositories>
:pom - 最高,然后 - 本地,然后 - 全球。