在pom.xml和settings.xml中覆盖Maven属性的顺序是什么?

时间:2012-04-30 09:04:18

标签: java maven

今天我发现settings.xml中定义的maven属性会覆盖pom.xml中的maven属性。

因为这只是观察,我不确定这是否完全正确。所以我查找了参考文章或一些文章,但我没有找到关于覆盖settings.xmlpom.xml中使用相同名称定义的属性的行为的具体说明。

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

3 个答案:

答案 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 - 最高,然后 - 本地,然后 - 全球。