V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
chanlk
V2EX  ›  程序员

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

  •  
  •   chanlk · 164 天前 · 1403 次点击
    这是一个创建于 164 天前的主题,其中的信息可能已经有所发展或是发生改变。



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

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


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

    贴个 sdk 地址:
    https://mvnrepository.com/artifact/com.huaweicloud/esdk-obs-java/3.20.6.2
    第 1 条附言  ·  163 天前
    不止是类名,路径名也是完全一样的
    第 2 条附言  ·  162 天前
    13 条回复    2024-06-07 10:35:56 +08:00
    cheneydog
        1
    cheneydog  
       164 天前
    打包方式的问题,把依赖打包到内部了。
    AmanoPro
        2
    AmanoPro  
       164 天前
    看来你有没有被 com.sun.org.apache.xpath.internal.operations.String 坑过
    chanlk
        3
    chanlk  
    OP
       163 天前
    @AmanoPro 你这还好,我这个是全路径+类名完全一样的
    lix7
        4
    lix7  
       163 天前
    干过一次,是为了重写私有方法,把内部逻辑暴露。
    virusdefender
        5
    virusdefender  
       163 天前
    patch 对用的类,修复 bug 或者暴露私有方法之类的
    chanlk
        6
    chanlk  
    OP
       163 天前
    @lix7 @virusdefender 那如何保证 jvm 加载的时候使用的是你们修改过的呢?路径名+类名都是一样的
    CDuXZMAPgHp1q9ew
        7
    CDuXZMAPgHp1q9ew  
       163 天前
    使用自定义 classloader 加载, 做类隔离.
    virusdefender
        8
    virusdefender  
       163 天前
    最简单的就是把 okhttp 的 jar 在 classpath 中放在最前面,但是他这个 patch 可能就失效了
    cslive
        9
    cslive  
       163 天前
    魔改里面的方法,这种情况你将它的代码粘贴出来,你也魔改
    aa51513
        10
    aa51513  
       163 天前 via Android
    @chanlk 依赖树有层级的,按照依赖树层级来
    weijancc
        11
    weijancc  
       163 天前
    为了重写类的方法. 华为这个是开放 sdk, 重写别人的类就有点过分了
    tianice
        12
    tianice  
       163 天前   ❤️ 1
    遥遥领先这水平太 low 了,没听说有个叫 maven-shade-plugin 的插件
    chanlk
        13
    chanlk  
    OP
       162 天前
    @virusdefender 这个做法我个人认为不可取,如果是公开的 sdk 更不可取,应该如 12 楼说的用 maven-shade-plugin 插件
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2640 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 65ms · UTC 11:29 · PVG 19:29 · LAX 03:29 · JFK 06:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.