JDK17环境下Maven多模块反应器构建传递依赖版本解析异常
问题修复方案
根因说明
你遇到的问题核心是Maven 3.6.3 与 JDK 17 不兼容导致的属性插值bug:
- Maven 3.6.x 系列版本官方仅支持到 JDK 16,从 3.8.4 版本开始才正式完整适配 JDK 17
- 单独编译子模块时触发的是简化依赖解析逻辑,未触发bug路径;多模块聚合构建时会执行全量依赖调解,旧版Maven在JDK17环境下无法正确解析第三方依赖POM中的
${project.version}属性,直接将变量名当做版本号处理
修复步骤
- 优先升级Maven版本到3.8.8或3.9.x最新稳定版,版本适配后即可原生解决属性解析异常问题
升级完成后执行以下命令验证:mvn clean compile -U -DskipTests - 如果暂时无法升级Maven版本,可在父POM的
dependencyManagement节点手动锁定所有出问题的传递依赖版本,以camel-netty4为例:
锁定后Maven会直接使用指定版本,无需解析第三方依赖传递的版本属性<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-netty4</artifactId> <version>${camel.version}</version> </dependency> - 若上述方案执行后仍有问题,可清空本地Maven仓库中对应依赖的缓存文件,避免本地已缓存的损坏POM影响解析
内容的提问来源于stack exchange,提问作者Jérémie B
相关产品推荐
相关产品推荐

