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

2024-06-05 18:28:02 +08:00
 chanlk



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

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


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

贴个 sdk 地址:
https://mvnrepository.com/artifact/com.huaweicloud/esdk-obs-java/3.20.6.2
1733 次点击
所在节点    程序员
13 条回复
cheneydog
2024-06-05 18:32:48 +08:00
打包方式的问题,把依赖打包到内部了。
AmanoPro
2024-06-05 19:23:18 +08:00
看来你有没有被 com.sun.org.apache.xpath.internal.operations.String 坑过
chanlk
2024-06-05 19:35:12 +08:00
@AmanoPro 你这还好,我这个是全路径+类名完全一样的
lix7
2024-06-05 19:41:44 +08:00
干过一次,是为了重写私有方法,把内部逻辑暴露。
virusdefender
2024-06-05 19:42:28 +08:00
patch 对用的类,修复 bug 或者暴露私有方法之类的
chanlk
2024-06-05 20:00:00 +08:00
@lix7 @virusdefender 那如何保证 jvm 加载的时候使用的是你们修改过的呢?路径名+类名都是一样的
CDuXZMAPgHp1q9ew
2024-06-05 20:46:46 +08:00
使用自定义 classloader 加载, 做类隔离.
virusdefender
2024-06-05 20:50:56 +08:00
最简单的就是把 okhttp 的 jar 在 classpath 中放在最前面,但是他这个 patch 可能就失效了
cslive
2024-06-06 08:47:20 +08:00
魔改里面的方法,这种情况你将它的代码粘贴出来,你也魔改
aa51513
2024-06-06 09:03:05 +08:00
@chanlk 依赖树有层级的,按照依赖树层级来
weijancc
2024-06-06 11:20:04 +08:00
为了重写类的方法. 华为这个是开放 sdk, 重写别人的类就有点过分了
tianice
2024-06-06 18:47:29 +08:00
遥遥领先这水平太 low 了,没听说有个叫 maven-shade-plugin 的插件
chanlk
2024-06-07 10:35:56 +08:00
@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