咨询Maven属性加载顺序:不同定义位置的优先级是怎样的?
Maven属性加载顺序详解
嘿,这个问题问到点子上了!Maven属性的加载顺序直接决定了最终哪个配置会生效,我帮你把各个位置的优先级从低到高梳理得明明白白——后面的属性会直接覆盖前面的同名属性:
- 本地机器的
~/.m2/settings.xml中的<properties>:这是全局层面的基础配置,优先级最低,所有其他位置的同名属性都会覆盖它。 - 项目父POM的
<properties>节点:父POM里定义的通用属性,优先级比settings.xml高,但会被子模块、profile和命令行参数覆盖。 - 项目父POM激活的Maven profile中的
<properties>:只有当对应的父POM profile被激活时才会生效,优先级高于父POM的普通properties,因为profile是针对特定场景的配置。 - 项目子模块POM的
<properties>节点:子模块自身的基础属性,优先级比父POM的profile高——毕竟子模块的配置更贴合自身需求,比父POM的场景化配置更具体。 - 项目子模块激活的Maven profile中的
<properties>:子模块激活的profile属性,优先级高于子模块的普通properties,是子模块层面的场景化定制配置。 - 命令行通过
-D参数定义的属性:这是最高优先级!不管前面所有位置怎么配置,命令行传入的-Dxxx=xxx参数都会直接覆盖所有同名属性,非常适合临时调整配置的场景。
简单记的话,优先级排序就是:全局settings属性 < 父POM普通属性 < 父POM激活profile属性 < 子模块普通属性 < 子模块激活profile属性 < 命令行-D参数
内容的提问来源于stack exchange,提问作者Mincong Huang
相关产品推荐
相关产品推荐

