为什么要在 sdk 里面写一个和其他 jar 包完全一样的类(指类名)?

205 天前
 chanlk



为什么要在 sdk 里面写一个和其他 jar 包完全一样的类(指类名)
这里面的几个 okhttp 的类把我坑惨了,以为是依赖冲突了,但是找半天都没找到。

本地运行 ok,测试运行也 ok ,到了线上就炸了。
后面发现线上运行的时候用的是这个 sdk 里的类,这个类里面少了一些方法,就报错了!


为啥要这么做呢?我的娘咧~

贴个 sdk 地址:
https://mvnrepository.com/artifact/com.huaweicloud/esdk-obs-java/3.20.6.2
1443 次点击
所在节点    程序员
13 条回复
cheneydog
205 天前
打包方式的问题,把依赖打包到内部了。
AmanoPro
205 天前
看来你有没有被 com.sun.org.apache.xpath.internal.operations.String 坑过
chanlk
205 天前
@AmanoPro 你这还好,我这个是全路径+类名完全一样的
lix7
205 天前
干过一次,是为了重写私有方法,把内部逻辑暴露。
virusdefender
205 天前
patch 对用的类,修复 bug 或者暴露私有方法之类的
chanlk
205 天前
@lix7 @virusdefender 那如何保证 jvm 加载的时候使用的是你们修改过的呢?路径名+类名都是一样的
CDuXZMAPgHp1q9ew
205 天前
使用自定义 classloader 加载, 做类隔离.
virusdefender
205 天前
最简单的就是把 okhttp 的 jar 在 classpath 中放在最前面,但是他这个 patch 可能就失效了
cslive
204 天前
魔改里面的方法,这种情况你将它的代码粘贴出来,你也魔改
aa51513
204 天前
@chanlk 依赖树有层级的,按照依赖树层级来
weijancc
204 天前
为了重写类的方法. 华为这个是开放 sdk, 重写别人的类就有点过分了
tianice
204 天前
遥遥领先这水平太 low 了,没听说有个叫 maven-shade-plugin 的插件
chanlk
203 天前
@virusdefender 这个做法我个人认为不可取,如果是公开的 sdk 更不可取,应该如 12 楼说的用 maven-shade-plugin 插件

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1047106

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX