← Back to list

gradle依赖包被降级的问题

Published on: | Views: 266

因为log4j的一个注入漏洞,需要升级log4j版本解决。 最新的log4j版本是2.17, 跟据项目用到的日志框架(slf4j-log4j), 所以需要升级依赖包:

compile('org.apache.logging.log4j:log4j-slf4j-impl:2.17.0')

这个包原本的依赖如下:

\--- org.apache.logging.log4j:log4j-slf4j-impl:2.17.0
     +--- org.slf4j:slf4j-api:1.7.25
     +--- org.apache.logging.log4j:log4j-api:2.17.0
     \--- org.apache.logging.log4j:log4j-core:2.17.0
          \--- org.apache.logging.log4j:log4j-api:2.17.0

然后在实际项目中,依赖却变成了:

\--- org.apache.logging.log4j:log4j-slf4j-impl:2.17.0
     +--- org.slf4j:slf4j-api:1.7.25
     +--- org.apache.logging.log4j:log4j-api:2.17.0 -> 2.11.1
     \--- org.apache.logging.log4j:log4j-core:2.17.0 -> 2.11.1
          \--- org.apache.logging.log4j:log4j-api:2.11.1

这时显示log4j-api从2.17.0被降级为2.11.1 排查了其他依赖,发现没有任何其他地方引入了这个包 折腾了好久,发现是这个小可爱导致的:

apply plugin: 'io.spring.dependency-management'

因为使用了依赖管理,如果不明确指定包版本号,那就会自动使用了里面的版本 项目中没有明确指定log4j-api的版本,所以就使用了依赖管理里面的版本号2.11.1 这显示不是我们想要的效果,了解一下文档: 文档:https://docs.spring.io/dependency-management-plugin/docs/current-SNAPSHOT/reference/html/

解决

方法一 修改依赖管理中的版本:

dependencyManagement {
    imports {
        mavenBom 'org.springframework.cloud:spring-cloud-dependencies:Greenwich.RC2'
    }
    dependencies {
    dependency 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.0'
        dependency 'org.apache.logging.log4j:log4j-api:2.17.0'
        dependency 'org.apache.logging.log4j:log4j-core:2.17.0'
    }
}

方法二 直接修改依赖配置中的版本

dependencies {
    compile('org.apache.logging.log4j:log4j-slf4j-impl:2.17.0')
    compile('org.apache.logging.log4j:log4j-api:2.17.0')
    compile('org.apache.logging.log4j:log4j-core:2.17.0')
}