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

jdk 版本兼容性问题

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

    请问大伙,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  
       359 天前
    yiyiniu
        22
    yiyiniu  
       359 天前
    [SCM 工具.png]( https://i.postimg.cc/htnYGWkM/b1.png) 这个可以切换不同 JDK 环境变量,建议大家看看。
    yiyiniu
        23
    yiyiniu  
       359 天前
    JDK 版本切换:无需安装 JDK 的各个版本,通过一键切换环境变量即可实现不同版本的切换。https://jp.v2ex.com/t/992876
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2773 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 14:45 · PVG 22:45 · LAX 06:45 · JFK 09:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.