查找传递性依赖问题,可通过
configurations.all { resolutionStrategy { //出现依赖冲突报错 failOnVersionConflict() } }
确定依赖冲突问题发生在哪,输出依赖树,查找对应依赖
gradle dependencies
解决依赖冲突两个办法:
1、排除传递依赖方法:
compile('org.hibernate:hibernate-core:3.6.3.Final'){ exclude group:"org.slf4j", module:"slf4j-api" }
2、强制依赖版本方法:
configurations.all { resolutionStrategy { force 'org.slf4j:slf4j-api:1.7.24' } }
强制指定一个版本
排除传递性依赖
出现版本冲突,构建失败配置
help中的dependencies,可以看到详细的依赖
强制指定一个版本
排除传递性依赖
module就是坐标中的name属性,不需要指定版本
修改默认解决策略
直接构建失败,可以知道哪些出现了版本冲突,否则很难发现出现了版本冲突
gradle会自动依赖最高版本的jar包,默认的版本冲突解决方式
解决版本冲突
1、查看依赖报告,确定哪些版本出现了冲突
2、排除传递性依赖,解决版本冲突
3、强制指定一个版本,解决版本冲突
版本冲突图示
gradle会帮我们自动依赖最高版本的jar包、这是它默认的处理方式
hibermate-core-3.6.3 ->hibermate-anotations3.2.0-->slf4j1.5.8
hibermate-core-3.6.3 ->slf4j1.6.1
本文概要如下
一、解决依赖冲突的步骤:
1、查看依赖报告
2、通过排除传递性依赖解决冲突
3、或者强制指定一个版本来解决冲突
二、gradle的冲突解决策略
一般不需要手动处理依赖冲突,gradle默认会依赖发生冲突的较高版本的jar包
如何修改gradle的默认冲突解决策略(下例设定为发生冲突就失败):
configuration.all{
resolutionStrategy{
failOnVersionConflict()
}
}
三、冲突解决方式
冲突解决方式1:排除传递性依赖
在某个依赖下exclude排除某些jar包
冲突解决方式2:强制指定一个版本
configurations.all{
resolutionStrategy{
force 'org.slf4j:slf4j-api:1.7.24'
}
}
tips:IDEA下查看依赖树的方法:执行help下的dependencies任务
修改默认版本冲突解决策略
添加依赖失败
gradle默认带了一个任务,在help里有一个dependencies,我们执行一下这个任务,可以看到详细的依赖
出现了版本冲突,但是我们构建成功了,那就说明gradle默认帮我们处理了一些版本冲突
下面这些我觉得没有必要做,依靠gradle的默认策略就够强大了,没必要画蛇添足
那我们修改一下策略
我们让他发现了版本冲突的时候,就构建失败
所以我们把刚才的,当发现了版本冲突,就构建失败的脚本粘贴到这里来
configurations.all{
resolutionStrategy{
failOnVersionConflict()
}
}
排除依赖:
那我们现在排除hibernate对slf4j-api的依赖
compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.3.Final',{
exclude group:"org.slf4j",module:"slf4j-api"
}
强制指定一个依赖版本
configurations.all{
resolutionStrategy{
failOnVersionConflict()
force 'org.slf4j:slf4j-api:1.7.22'
}
}
修改默认解决策略
configurations.all {
resolutionStrategy {
failOnVersionConflict()
force 'org.slf4j:slf4j-api:1.7.22'
}
}
强制制定一个版本
修改默认解决策略
configrations.all{
}
解决版本冲突 1 查看依赖报告2排除传递性依赖 3 强制一个版本
修改默认解决策略 configrations.all{
resolutionStrategy{
resolutionStrategy{
failOnVersionConflict()
}
}
}
排除传递性依赖 compile(‘org.hibernate:hibernate-core:3.6.3.Final’){
exclude group:"org.slf4j" ,module:"slf4j-api"
//transitive=false
}
强制指定一个版本
configuration.all{
resolutionStrategy{
force 'org.slf4j:slf4j-api:1.7.24'
}
}
强制指定一个版本
排除传递性依赖