Gradle解决版本冲突问题

一 版本冲突例子
二 解决冲突
  • 查看依赖报告
  • 排除传递性依赖
  • 强制一个版本(Gradle默认依赖高版本)
三 解决方法
1 修改默认解决策略
configurations.all{
    resolutionStrategy{
        failOnVersionConflict()
    }
}

通过这个配置可以发现版本冲突。

2 排除传递性依赖
compile('org.hibernate:hibernate-core:3.6.3.Final'){
    exclude group:"org.slf4j",module:"slf4j-api"
}

3 强制指定一个版本

configurations.all{
    resolutionStratety{
        force 'org.slf4j:slf4j-api:1.7.24'
    }
}

四 实战

代码参考:https://github.com/cakin24/todo

1 添加一个hibernate依赖
dependencies {
    compile 'org.hibernate:hibernate-core:3.6.3.Final'
    compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

2 查看依赖关系

3 另外一种查看版本的方法
结果输出如下
compile - Dependencies for source set 'main' (deprecated, use 'implementation ' instead).
+--- org.hibernate:hibernate-core:3.6.3.Final
|    +--- antlr:antlr:2.7.6
|    +--- commons-collections:commons-collections:3.1
|    +--- dom4j:dom4j:1.6.1
|    +--- org.hibernate:hibernate-commons-annotations:3.2.0.Final
|    |    \--- org.slf4j:slf4j-api:1.5.8 -> 1.7.25
|    +--- org.hibernate.javax.persistence:hibernate-jpa-2.0-api:1.0.0.Final
|    +--- javax.transaction:jta:1.1
|    \--- org.slf4j:slf4j-api:1.6.1 -> 1.7.25
\--- ch.qos.logback:logback-classic:1.2.3
     +--- ch.qos.logback:logback-core:1.2.3
     \--- org.slf4j:slf4j-api:1.7.25

可以清楚的看到版本被gradle强制变换为最高版本:org.slf4j:slf4j-api:1.7.25

4 版本出现了冲突,我们制定策略,强制构建失败
// 强制构建失败
configurations.all{
    resolutionStrategy{
        failOnVersionConflict()
    }
}

repositories {
    // 配置多个仓库,按顺序查找,找到为止
    // 本地仓库
    mavenLocal()
    // 中央仓库
    mavenCentral()
}

dependencies {
    // 添加hibernate依赖
    compile 'org.hibernate:hibernate-core:3.6.3.Final'
    compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

下面是构建失败的结果

FAILURE: Build failed with an exception.


* What went wrong:
Could not resolve all dependencies for configuration ':compileClasspath'.
> A conflict was found between the following modules:
   - org.slf4j:slf4j-api:1.6.1
   - org.slf4j:slf4j-api:1.7.25
   - org.slf4j:slf4j-api:1.5.8

5 通过排除传递性依赖解决上面构建失败问题

sourceCompatibility = 1.8
// 强制构建失败
configurations.all{
    resolutionStrategy{
        failOnVersionConflict()
    }
}


repositories {
    // 配置多个仓库,按顺序查找,找到为止
    // 本地仓库
    mavenLocal()
    // 中央仓库
    mavenCentral()
}


dependencies {
    // 排除hibernate对slf4j-api传递性依赖
    compile ('org.hibernate:hibernate-core:3.6.3.Final'){
        exclude group:"org.slf4j",module:"slf4j-api"
    }
    compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

查看传递性依赖是否消失

再次构建可以成功。
6 强制指定一个版本解决版本冲突
sourceCompatibility = 1.8


configurations.all{
    resolutionStrategy{
        // 强制构建失败
        failOnVersionConflict()
        // 强制指定一个版本解决版本冲突
        force 'org.slf4j:slf4j-api:1.7.24'
    }
}


repositories {
    // 配置多个仓库,按顺序查找,找到为止
    // 本地仓库
    mavenLocal()
    // 中央仓库
    mavenCentral()
}


dependencies {
    // 添加hibernate依赖
    compile ('org.hibernate:hibernate-core:3.6.3.Final'){
//        exclude group:"org.slf4j",module:"slf4j-api"
    }
    compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

7 查看版本依赖关系

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值