18

今天我观察到 maven 中定义的属性settings.xml覆盖了pom.xml.

因为这只是一个观察,我不确定这是否完全正确。settings.xml所以我正在寻找参考资料或一些文章,但我没有找到关于覆盖在和中定义的同名属性的行为的具体说明pom.xml

也许有人可以提供参考部分的链接(我可能会忽略)或可靠的文章/博客?

4

3 回答 3

16

根据我认为的文档,很明显哪个优先于另一个(文档摘录):

如果配置文件在设置中处于活动状态,则其值将覆盖 POM 或 profiles.xml 文件中任何等效的 ID 配置文件。

profile.xml 在 Maven 3 中不再存在,仅在 Maven 2.2.1 中受支持,但不应使用。

于 2012-04-30T09:32:05.930 回答
8

我认为具有相同名称的属性在下一个序列中被覆盖(从最高到最低的上下文):

  • 全球的
  • 配置文件描述符
  • 每个项目
  • 每个用户

http://maven.apache.org/guides/introduction/introduction-to-profiles.html

因此,pom.xml属性(每个项目)被settings.xml(每个用户)具有相同名称的属性覆盖。

于 2013-12-23T11:31:04.630 回答
1

刚刚在我的 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 - 最高,然后 - 本地,然后 - 全局。
于 2017-10-24T13:11:36.043 回答