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