Maven配置<activeByDefault/>的默认profile在其他自动激活profile存在时失效是否正常?
结论
这是Maven的预期设计,和profile激活规则的优先级有关。
具体规则说明
Maven中activeByDefault="true"的profile激活优先级是最低的:
- 只要存在任意一个其他profile通过自动激活规则(比如你配置的JDK版本匹配、操作系统匹配、属性匹配等)被激活,或者有profile被手动通过
-P命令行参数、settings.xml全局配置指定激活,所有标记了activeByDefault="true"的profile都会自动失效,不会被加载。
你当前的场景下,只要运行环境的JDK版本匹配java8或者java9的<jdk>激活范围,对应profile就会被自动激活,此时你的默认profile自然就不会生效。删除匹配的java profile后,没有其他自动激活的profile,默认profile就会恢复生效,完全符合Maven的设计逻辑。
解决方案
如果你需要active-by-default这个profile的配置始终生效,可以选择以下两种方案:
- 直接将该profile内的
<dependencies>等配置移出profile,放到pom.xml的顶级对应节点下,作为全局默认配置 - 如果必须保留在profile中,可给该profile补充和另外两个java profile完全一致的
<jdk>激活规则,这样同激活条件的多个profile会同时生效,不会互相覆盖。
内容的提问来源于stack exchange,提问作者Jin Kwon
相关产品推荐
相关产品推荐

