Gradle 6.4.1中排除drill-jdbc-all的com.jayway.jsonpath包仍遇依赖冲突求助
解决Gradle中drill-jdbc-all与spring-boot-starter-data-jpa的json-path依赖冲突问题
我之前也碰到过类似的依赖坑,结合你的情况,咱们一步步来排查和解决:
第一步:先定位冲突的真实根源
先执行Gradle命令拉取完整依赖树,确认com.jayway.jsonpath的所有引入路径:
./gradlew dependencies
重点查看compileClasspath(或你项目使用的目标配置)下的com.jayway.jsonpath:json-path条目,确认除了drill-jdbc-all外,是否还有其他依赖(比如Spring Boot相关组件)引入了不同版本,同时检查你对drill-jdbc-all的排除是否真的生效。
第二步:修正依赖排除配置
你之前的排除配置可以合并成更精准的写法,同时建议替换Gradle 6.x已废弃的compile为官方推荐的implementation:
implementation ('org.apache.drill.exec:drill-jdbc-all:1.18.0') { exclude group: 'com.jayway.jsonpath', module: 'json-path' } implementation group: 'com.jayway.jsonpath', name: 'json-path', version: '2.4.0'
第三步:强制全局统一版本
如果排除后仍有冲突,大概率是其他依赖悄悄引入了旧版本,这时候可以用Gradle的版本强制策略,让整个项目只使用你指定的2.4.0版本:
configurations.all { resolutionStrategy { force 'com.jayway.jsonpath:json-path:2.4.0' } }
这个配置会让Gradle忽略所有其他版本的json-path,从根源上消除版本冲突。
特殊情况处理:drill-jdbc-all是Fat Jar
如果上面的步骤都没用,那很可能是drill-jdbc-all-1.18.0.jar本身是个Fat Jar——它已经把com.jayway.jsonpath的类直接打包到内部了,这种情况下排除依赖是无效的(因为类不在传递依赖链里,而是直接在jar包内)。
这时候可以尝试两个方案:
- 升级Drill JDBC版本:比如升级到1.19.0及以上,看官方是否修复了这个打包问题;
- 自定义重打包drill-jdbc-all:用Gradle的Shadow插件重新打包该Jar,移除冲突的
com.jayway.jsonpath相关类(这个操作需要一定Gradle经验,适合进阶场景)。
最后执行./gradlew clean build清理缓存后重新构建,应该就能解决这个冲突了。
内容的提问来源于stack exchange,提问作者happy
相关产品推荐
相关产品推荐

