询问一下 Java 如何兼容同 jar 两个版本 - V2EX
pkwenda
V2EX    Java

询问一下 Java 如何兼容同 jar 两个版本

  •  1
     
  •   pkwenda
    pkwenda Jul 31, 2020 2923 views
    This topic created in 2111 days ago, the information mentioned may be changed or developed.
    现在正在迁移 es 2.x 到 7.x

    公司内部自己实现了一些:迁移、修改、flyway 等方式,所以 参考了 spring-data-elasticSearch 改了改做了下兼容

    现在需要维持两个 dataSource 一个 是原来使用的 es 官方 2.x 的 elasticSearch,一个是 现在官方推荐的 7.4.2 的 high-level-rest-template 两个 maven jar


    目前需要查询老数据,老 pojo 做一些转换,已经实现了,两个 jar 冲突,high-level-rest-template 有一些 ClassNotFound 原因也是因为冲突,新旧两个包( ES 估计也没想到有人会这么用,没用他们推荐的升级方式)

    因为落后的版本越多,升级问题也就越多


    现在是自己写的 ClassLoader 来实现的,不过要指定 jar 包,

    ```
    -Dzing.loader.path=/Users/xxx/xxx/lib

    ```

    虽然实现了,但是不优雅,开发、部署 很不方便

    请问有其他方式、技术、或者 maven 插件 能做到这一点吗?
    8 replies    2021-03-22 23:28:21 +08:00
    izhangzhihao
        1
    izhangzhihao  
       Jul 31, 2020
    maven shade plugin
    cco
        2
    cco  
       Jul 31, 2020
    1 楼的办法可以尝试,我最近也刚升级到 7.8,不过我直接丢弃了低版本的东西。
    img src="https://cdn.v2ex.com/avatar/5619/055a/226954_normal.png?m=1755861543" class="avatar" border="0" align="default" alt="pkwenda" data-uid="226954" />
        3
    pkwenda  
    OP
       Jul 31, 2020
    @izhangzhihao #1
    @cco #2

    maven shade plugin 小弟昨天在 elastic 社区看到了,貌似他解决的是:比如 es 引用了 guava,与自己的 guava 冲突,可以抛弃 es 的 guava 用自己的。可以搞定版本共存的问题吗?我还简单跑了一下。
    Umenezumi
        5
    Umenezumi  
       Jul 31, 2020   1
    up
    SoloCompany
        6
    SoloCompany  
       Jul 31, 2020 via iPhone
    可以把旧版本的 jar 打包到 META-INF 然后自己写 classloder,避免须以手工处理执行命令参数依赖的问题
    daiwenzh5
        7
    daiwenzh5  
       Mar 22, 2021
    @SoloCompany 我今天也遇到相同的需求了,使用 shade 并不能很好的解决,使用的是 jarjar.jar 。但是它具体怎么实现的,我并没有看源码,相比较而言,前两个是黑盒操作,没有类加载器清晰,但是类加载器通过反射执行,如果需要显式的声明其中的对象怎么办?比如 SDK 中的 xxxRequest 对象,和 xxxResponse 对象。具体该怎么操作呢?
    SoloCompany
        8
    SoloCompany  
       Mar 22, 2021
    @daiwenzh5 #7 所有依赖到特殊版本的代码, 如果 API 兼容, 那么只需使用同样的 ClassLoader load 就能实现封装, 如果 API 不兼容, 那么依赖的代码要和特殊版本的 lib 一起编译然后再通过别的 API 把业务逻辑暴露出来给上层调用, 当然也可以选择不封装那就只能使用反射的方式
    About     Help     Advertise     Blog     API     FAQ     Solana     3297 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 38ms UTC 14:07 PVG 22:07 LAX 07:07 JFK 10:07
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86