【破事水】Java Gradle 无法引入同名不同版本的两个包

本文讲述了Java开发者在处理Gradle项目中因包名冲突导致的依赖问题,介绍了排除、版本决议策略的尝试,以及升级旧包、重命名包、社区求助等解决思路。作者强调了在引入新包时检查依赖详情的重要性。
摘要由CSDN通过智能技术生成

此问题水于 2024 年 01 月,假如后面 gradle 出了什么好方法能解决这个问题,家祭无忘告乃翁,提前谢过看到这篇的各位大佬了。

结论

先说结论,Java 因为包名定义等原因,对同名包在编译时只能编译一个版本,具体版本通过 gradle 的版本决议或用户在 build.gradle 中的配置决定。

属于是学艺不精了,gradle dependencies 跑了快上百次才意识到整个包只能有一个版本的同名包。

踩坑实录

搞开发总是免不了用些大佬的轮子,然后搞 Java 开发就免不了用到 maven 和 gradle,然后总有那么一天,因为引的包有新有旧,突然就出现了依赖冲突。
就比如:别人新开发的包是基于 com.example:utils:3.5 做的,结果和以前引进来已经稳定使用的一个包的依赖冲突了,而这个旧包用的是 com.example:utils:1.0 的一个古早版本,旧包里用的方法新包早就删除了,新包里有的方法旧包那是必然没有,然后就得解决依赖冲突吧,exclude、resolutionStrategy、DependencyResolveDetails 什么方法都用了,可就是继续冲突。
然后一个一个版本去试,发现新引入的包需要的某个方法在 2.0 版本刚刚更新,而旧包的一个方法在 1.5 就已经删掉了,完全没有中间版本。

解决思路

基本没有思路,每个思路都相当痛苦。

  1. 一来是升级旧包,但是这种牵一发而动整个屎山的事,建议找个阳光明媚的早晨,喝点咖啡开始肝。

  2. 二来是把发生冲突的包(例如上面举例的 com.example:utils:3.5) 原仓库下下来,改个包名重新编译制品然后手动引入。但是如果你是间接依赖引发的依赖冲突,甚至是间接依赖的依赖,gradle dependencies 都扫描出 (*)了,这个想法就更不现实了。

  3. 三来是去新包的原仓库提 Issue,求社区大神给你改编一版低版本依赖的包,或者自己成为社区大神,整一版低版本依赖的。

  4. 直接开摆。

还有一点

最后分享一下查包的网站:

mvnRepository 网站

点击具体版本之后往下翻,可以看到 Compile Dependencies 一栏,现在引包都得先调查下,最好就是下图这种没有依赖的,只需要考虑 Java 版本匹配就行。
Compile Dependencies 为 0

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学渣戊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值