Gradle如何排除Spring Boot插件引入的commons-compress旧版本依赖
解决方案
你遇到的版本冲突是因为io.spring.dependency-management插件会默认遵循Spring Boot BOM中定义的依赖版本,优先级高于你在单个依赖声明中设置的strictly规则,按以下方法处理即可:
方法1:覆盖Spring Boot内置依赖版本(推荐)
Spring Boot BOM中commons-compress的版本由commons-compress.version属性控制,直接在buildscript的ext块中添加该属性覆盖默认值即可全局生效,不需要额外写排除规则,修改后的ext块如下:
buildscript { ext { // 原有属性保留 springBootVersion = "2.4.6" junitVersion = "5.7.2" awsVersion = "1.11.728" lombokVersion = "1.18.12" resilience4jVersion = "1.7.0" logbackJsonVersion = "0.1.5" // 新增commons-compress版本覆盖 'commons-compress.version' = '1.21' } }
修改后可以删除原来dependencies中单独声明的带strictly规则的commons-compress依赖,该配置会自动让所有传递依赖都使用1.21版本。
方法2:显式配置依赖管理规则
如果方法1不生效,可以在build.gradle中单独添加dependencyManagement块指定版本:
dependencyManagement { dependencies { dependency 'org.apache.commons:commons-compress:1.21' } }
验证方法
配置完成后执行以下命令检查依赖版本:
gradle dependencies --configuration runtimeClasspath | grep commons-compress
如果输出中只有1.21版本的commons-compress,说明配置生效。
特殊情况处理
如果仍存在1.20版本,执行上述命令可以看到1.20版本是被哪个上层依赖引入的,针对该依赖添加排除规则即可,示例如下:
implementation('{引入1.20版本的上层依赖Group}:{依赖名}:{版本}') { exclude group: 'org.apache.commons', module: 'commons-compress' }
内容的提问来源于stack exchange,提问作者Kumari Sweta
相关产品推荐
相关产品推荐

