jdk 版本兼容性问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
JWilling
V2EX    Java

jdk 版本兼容性问题

  •  
  •   JWilling 2021-05-06 17:05:23 +08:00 6023 次点击
    这是一个创建于 1618 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请问大伙,jdk 向下兼容吗?

    目前需求为需要使用 15,但老项目都是 8,有没有可能导致老项目无法运行?

    MacOS 是否有其他的更好的解决方案?

    23 条回复    2023-11-30 15:34:42 +08:00
    AoEiuV020
        1
    AoEiuV020  
       2021-05-06 17:19:22 +08:00
    可能性是肯定有的,基本只能遇到问题再想办法吧,

    话说我前阵子用 androidStudio 就出现高版本 jdk 启动情况会在打开 xml 文件时莫名崩溃,jdk8 就正常,
    这么大个软件都有这种兼容性问题,自己项目应该没法完全杜绝,只能靠测试了,
    NealCCC
        2
    NealCCC  
       2021-05-06 17:21:57 +08:00
    装多个 JDK,不同的项目用不同的 JDK
    yitingbai
        3
    yitingbai  
       2021-05-06 17:28:15 +08:00
    jdk 是我见过兼容性最强的项目了, 升级到 15, 几乎只要很小的改动就可以了, 只要编译能通过, 一般都没有问题.
    manami
        4
    manami  
       2021-05-06 17:31:58 +08:00
    看用哪个厂商的 jdk,open jdk 、oracle jdk 、ibm jdk 等什么的各搞一套
    tinyuu
        5
    tinyuu  
       2021-05-06 17:45:37 +08:00
    1. 向下兼容,兼容性非常好, 但是可能也许还是要稍微改一点的。
    2. 推荐多个 jdk 不同项目用自己版本的, 不然编译完 生产环境的 jdk8 运行不了 15 的程序。
    PolarBears
        6
    PolarBears  
       2021-05-06 17:55:08 +08:00
    搭车问一下除了版本兼容问题还会有 x86\x64 的兼容性问题吗?我这接手了一个很古老的应用系统,是跑在 Weblogic9 上用 jdk 1.5.0_22,由于是用 32 位的,所以现在跑久了会 OOM,自己试过测试换过 64 位似乎能正常运行,但最终还是没敢换上去.
    Kaciras
        7
    Kaciras  
       2021-05-06 18:02:18 +08:00
    JDK 兼容性挺好的,一般都可以升级。

    倒是一些库特别是跟字节码相关的兼容性很差。
    546L5LiK6ZOt
        8
    546L5LiK6ZOt  
       2021-05-06 18:03:50 +08:00
    不是 100% 向下兼容的。一些低版本的反射在高版本使用会报错,高版本对反射限制严格一点。
    gam2046
        9
    gam2046  
       2021-05-06 18:43:14 +08:00
    一般来说,向下兼容是不错的,不过不同版本的 JDK,不同厂家的 JDK 可能对一些细节实现略有不同。
    比如 new File("sample.txt")这种使用了当前工作路径的,有可能行为会不太一致,这玩意还是要多测试,大问题是不太有的,小毛病就看造化了。
    billlee
        10
    billlee  
       2021-05-06 20:26:10 +08:00
    公开接口是向下兼容的,但架不住很多代码用反射调用私有接口
    billlee
        11
    billlee  
       2021-05-06 20:27:41 +08:00
    @PolarBear x86 和 amd64 应该不会有问题。我这里是 amd64 和 arm64 一起维护,没遇到过兼容问题
    sagaxu
        12
    sagaxu  
       2021-05-06 23:52:33 +08:00
    8 到 11 都不一定能运行的起来,8 到 15 怕是要扯到蛋
    bthulu
        13
    bthulu  
       2021-05-07 08:45:55 +08:00
    @billlee 这就是你们代码写得不合理了
    iwishing
        14
    iwishing  
       2021-05-07 11:16:03 +08:00
    在做容器化的时候遇到过一个问题。项目开发是用 jdk8 开发的,我做镜像的时候偷懒用了 openJDK16,之前一直没事,后来突然容器起不来了,报 reflection error 。换了 openJDK8 重新打镜像就好了。纯编译环境问题。
    GM
        15
    GM  
       2021-05-07 11:56:33 +08:00
    从 8-15 版本跨度太大了,建议谨慎。

    虽说 Java 理论上兼容性很好,但是实际上,项目会用到一大堆第三方依赖库,这一大堆依赖里很容易就会出现使用了 jdk8 以下版本才有的接口,所以经常碰到用不了的情况。
    interim
        16
    interim  
       2021-05-07 13:15:05 +08:00
    IDEA 高版本可以安装不同版本的 JDK,不同项目选不同版本就好了。
    一直在用 JDK11 跑 JDK8 的项目,目前没遇到问题。
    huifer
        17
    huifer  
       2021-05-07 14:30:45 +08:00
    新老项目隔离部署,linux 多 java 环境很方便处理,docker 也是,本机开发可以自己选择 JDK
    billlee
        18
    billlee  
       2021-05-07 20:54:36 +08:00
    @bthulu 不是我,很多库会有这样的行为
    Loku
        19
    Loku  
       2021-05-11 17:54:22 +08:00
    跨度太大了,我的是 openJDK8 升到 openJDK11 只有部分过时方法需要修改。稳定运行,openJDK11 是 LTS 版适合使用在生产环境。
    MineDog
        20
    MineDog  
       2021-05-16 17:32:08 +08:00
    因为 java 模块化的关系,有几个包需要自己引入了吧
    yiyiniu
        21
    yiyiniu  
       2023-11-30 15:28:04 +08:00
    yiyiniu
        22
    yiyiniu  
       2023-11-30 15:29:05 +08:00
    [SCM 工具.png]( https://i.postimg.cc/htnYGWkM/b1.png) 这个可以切换不同 JDK 环境变量,建议大家看看。
    yiyiniu
        23
    yiyiniu  
       2023-11-30 15:34:42 +08:00
    JDK 版本切换:无需安装 JDK 的各个版本,通过一键切换环境变量即可实现不同版本的切换。https://jp.v2ex.com/t/992876
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     6150 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 03:16 PVG 11:16 LAX 20:16 JFK 23:16
    Do have faith in what you're doing.
    ubao 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