八.解决依赖冲突

一.解决冲突
1.查看依赖报告
2.解决传递性依赖
3.强制一个版本

二.修改gradle默认解决策略
1.gradle默认会使用高版本的依赖
2.取消默认策略,如果有版本冲突,直接让其构建失败

configurations.all{
    resolutionStrategy{
        failOnVersionConflict()
    }
}

3.排除传递性依赖(默认排除最低版本)

//排除哪个jar的依赖
compile('org.spring-core:3.6.3.Final'){
    //指定要排除的依赖的group和module=name,不指定版本,默认排除最低版本
    exclude group:'org.slf4j',module:'slf4j-api'
    //transitive=false//排除所有传递性依赖,比较少用
}

4.修改gradle的默认使用最高版本策略(强制指定默认使用某个版本)

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

三.例
1.在项目的bulid.gradle文件中添加依赖:

dependencies {
    //junit的依赖
    testCompile group: 'junit', name: 'junit', version: '4.11'
    //bibernate的依赖
    compile 'org.hibernate:hibernate-core:3.6.3.Final'
    //logback的依赖
    compile 'ch.qos.logback:logback-classic:1.2.1'
}

2.在gradle的选项卡的:web-Source Sets-main-Dependencies的依赖中可以看到:

org.hibernate:hibernate-core:3.6.3.Final  依赖了  org.slf4j:slf4j-api:1.7.22
ch.qos.logback:logback-classic:1.2.1 也依赖了   org.slf4j:slf4j-api:1.7.22

其实两个jar依赖的版本并不一定完全一样,但是gradle默认取最高版本的依赖,进行了最高版本的依赖统一
可以执行Tasks-help-dependences查看以来详情

3.取消gradle的默认高版本统一依赖,在bulid.gradle中添加:

//取消gradle默认统一使用高版本依赖的策略(gradle默认依赖冲突解决策略)
configurations.all{
    resolutionStrategy{
        failOnVersionConflict()
    }
}

执行build,会看到报错信息:

FAILURE: Build failed with an exception.

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

4.排除传递性依赖,在build.gradle中添加:

//排除传递性依赖
//添加依赖
dependencies {
    //junit的依赖
    testCompile group: 'junit', name: 'junit', version: '4.11'
    //hbernate的依赖
    compile ('org.hibernate:hibernate-core:3.6.3.Final'){
        //排斥hibernate对slf4j的依赖
        exclude group:'org.slf4j',module:'slf4j-api'
    }
    //logback的依赖
    compile ('ch.qos.logback:logback-classic:1.2.1')
}

执行bulid,编译成功

5.强制gradle默认统一使用某个版本依赖的策略(修改gradle默认依赖冲突解决策略)(可以是maven仓库的任何版本)

//强制gradle默认统一使用某个版本依赖的策略(修改gradle默认依赖冲突解决策略)
configurations.all{
    resolutionStrategy{
        failOnVersionConflict()
        force 'org.slf4j:slf4j-api:1.7.22'
    }
}

强制不使用最新版,使用指定版

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值