You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gradle依赖冲突时解析为低版本问题咨询

问题:Gradle依赖冲突时低版本被解析生效的原因

我原本以为Gradle在依赖冲突时会自动选择最新版本,但在以下依赖树中,发现低版本被解析生效:

org.apache.logging.log4j:log4j-to-slf4j:2.17.2 -> 2.13.3

依赖树详情:

+--- org.springframework.boot:spring-boot-starter-logging:2.6.8
|    +--- ch.qos.logback:logback-classic:1.2.11 -> 1.2.3
|    |    +--- ch.qos.logback:logback-core:1.2.3
|    |    \--- org.slf4j:slf4j-api:1.7.25 -> 1.7.30
|    +--- org.apache.logging.log4j:log4j-to-slf4j:2.17.2 -> 2.13.3
|    |    +--- org.slf4j:slf4j-api:1.7.25 -> 1.7.30
|    |    \--- org.apache.logging.log4j:log4j-api:2.13.3
|    \--- org.slf4j:jul-to-slf4j:1.7.36 -> 1.7.30
|         \--- org.slf4j:slf4j-api:1.7.30

我的build.gradle配置:

plugins {
id 'org.springframework.boot' version '2.4.4'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'com.google.cloud.tools.jib' version '2.0.0'
id 'java'
id 'org.sonarqube' version '3.3'
}

group = 'com.cox.cns'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

configurations {
developmentOnly
  runtimeClasspath {
    extendsFrom developmentOnly
 }
}

repositories {
mavenCentral()
maven { url 'https://repo.spring.io/milestone' }
maven { url 'https://repo.spring.io/snapshot' }
}

dependencies {

implementation 'com.oracle.database.jdbc:ojdbc8'
implementation group: 'com.jcraft', name: 'jsch', version: '0.1.55'
implementation 'io.github.resilience4j:resilience4j-spring-boot2:1.7.0'
implementation 'org.springframework.boot:spring-boot-starter-logging:2.6.8'
implementation ('org.springframework.boot:spring-boot-starter-aop'){
exclude group : 'org.springframework.boot' , module:'spring-boot-starter-logging'
}
implementation 'com.amazonaws:aws-java-sdk-sqs'
implementation 'com.amazonaws:amazon-sqs-java-messaging-lib:1.0.8'
implementation 'org.springframework.boot:spring-boot-starter-activemq'
implementation 'org.springframework.boot:spring-boot-starter'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
implementation 'com.amazonaws:aws-java-sdk-sns:1.11.964'
implementation 'com.amazonaws:aws-java-sdk-s3:1.11.851'
implementation 'org.springframework.boot:spring-boot-starter-cache'
implementation 'javax.mail:mail:1.4.7'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE'
implementation 'org.springframework.cloud:spring-cloud-starter-aws-messaging:2.2.6.RELEASE'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
    exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}

}

原因分析与解决方案

核心原因:Spring Boot依赖管理插件的版本约束

你引入的io.spring.dependency-management插件会自动应用Spring Boot的BOM(物料清单),这个BOM里预定义了所有Spring Boot官方组件及相关依赖的兼容版本,目的是保证整个依赖生态的稳定性,避免版本不兼容问题。

具体到你的场景:

  • 你使用的Spring Boot插件版本是2.4.4,对应的BOM中,log4j-to-slf4j的指定版本就是2.13.3,logback-classic的指定版本是1.2.3。
  • 虽然你手动指定了spring-boot-starter-logging:2.6.8(这个版本自带log4j-to-slf4j:2.17.2和logback-classic:1.2.11),但依赖管理插件会强制覆盖这些子依赖的版本,优先使用BOM中定义的版本,这就导致了依赖树里的版本降级。

解决方案

有两种方式可以解决这个问题:

  1. 统一Spring Boot版本
    将Spring Boot插件版本升级到2.6.8,和你引入的spring-boot-starter-logging版本保持一致:

    plugins {
        id 'org.springframework.boot' version '2.6.8'
        id 'io.spring.dependency-management' version '1.0.11.RELEASE'
        // 其他插件不变
    }
    

    这样BOM会自动使用2.6.8对应的依赖版本,和你手动引入的starter版本匹配,不会再出现版本降级。

  2. 显式覆盖指定依赖版本
    如果不想升级Spring Boot整体版本,可以在dependencyManagement块中显式指定你需要的版本,覆盖BOM的默认设置:

    dependencyManagement {
        dependencies {
            dependency 'org.apache.logging.log4j:log4j-to-slf4j:2.17.2'
            dependency 'ch.qos.logback:logback-classic:1.2.11'
        }
    }
    

    这样Gradle会优先使用你指定的版本,忽略BOM中的约束。


内容的提问来源于stack exchange,提问作者harsha kumar Reddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 16:15:54