
为什么要在 sdk 里面写一个和其他 jar 包完全一样的类(指类名)
这里面的几个 okhttp 的类把我坑惨了,以为是依赖冲突了,但是找半天都没找到。
本地运行 ok,测试运行也 ok ,到了线上就炸了。
后面发现线上运行的时候用的是这个 sdk 里的类,这个类里面少了一些方法,就报错了!
为啥要这么做呢?我的娘咧~
贴个 sdk 地址:
https://mvnrepository.com/artifact/com.huaweicloud/esdk-obs-java/3.20.6.2

1
cheneydog Jun 5, 2024
打包方式的问题,把依赖打包到内部了。
|
2
AmanoPro Jun 5, 2024
看来你有没有被 com.sun.org.apache.xpath.internal.operations.String 坑过
|
4
lix7 Jun 5, 2024
干过一次,是为了重写私有方法,把内部逻辑暴露。
|
5
virusdefender Jun 5, 2024
patch 对用的类,修复 bug 或者暴露私有方法之类的
|
6
chanlk OP @lix7 @virusdefender 那如何保证 jvm 加载的时候使用的是你们修改过的呢?路径名+类名都是一样的
|
7
CDuXZMAPgHp1q9ew Jun 5, 2024
使用自定义 classloader 加载, 做类隔离.
|
8
virusdefender Jun 5, 2024
最简单的就是把 okhttp 的 jar 在 classpath 中放在最前面,但是他这个 patch 可能就失效了
|
9
cslive Jun 6, 2024
魔改里面的方法,这种情况你将它的代码粘贴出来,你也魔改
|
11
weijancc Jun 6, 2024
为了重写类的方法. 华为这个是开放 sdk, 重写别人的类就有点过分了
|
12
tianice Jun 6, 2024 遥遥领先这水平太 low 了,没听说有个叫 maven-shade-plugin 的插件
|
13
chanlk OP @virusdefender 这个做法我个人认为不可取,如果是公开的 sdk 更不可取,应该如 12 楼说的用 maven-shade-plugin 插件
|