jdk 版本兼容性问题

2021-05-06 17:05:23 +08:00
 Zhancha

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

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

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

4976 次点击
所在节点    Java
23 条回复
AoEiuV020
2021-05-06 17:19:22 +08:00
可能性是肯定有的,基本只能遇到问题再想办法吧,

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

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

虽说 Java 理论上兼容性很好,但是实际上,项目会用到一大堆第三方依赖库,这一大堆依赖里很容易就会出现使用了 jdk8 以下版本才有的接口,所以经常碰到用不了的情况。
interim
2021-05-07 13:15:05 +08:00
IDEA 高版本可以安装不同版本的 JDK,不同项目选不同版本就好了。
一直在用 JDK11 跑 JDK8 的项目,目前没遇到问题。
huifer
2021-05-07 14:30:45 +08:00
新老项目隔离部署,linux 多 java 环境很方便处理,docker 也是,本机开发可以自己选择 JDK
billlee
2021-05-07 20:54:36 +08:00
@bthulu 不是我,很多库会有这样的行为
Loku
2021-05-11 17:54:22 +08:00
跨度太大了,我的是 openJDK8 升到 openJDK11 只有部分过时方法需要修改。稳定运行,openJDK11 是 LTS 版适合使用在生产环境。
MineDog
2021-05-16 17:32:08 +08:00
因为 java 模块化的关系,有几个包需要自己引入了吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/775217

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX