java - 较新的 JRE 版本可以运行使用较旧 JDK 版本编译的 Java 程序吗?

标签 java

在运行 Java 程序和在 Java 版本 1.6 1.7 中编译的相关库(我使用 1.7 编译,而一些库使用 1.6 编译)并运行整个程序时,我会遇到任何问题吗? 1.7 JRE?

最佳答案

正如已经回答的那样,您大部分是安全的,大多数产品和 3rd 方库都可以正常工作。然而,确实存在非常罕见的情况,二进制不兼容(使用旧 JDK 编译的类文件将无法在新 JVM 中运行的情况)在 JDK 版本之间引入。

Oracle Java 版本间不兼容官方列表:

兼容性工具

JDK 9一起打包,有一个工具叫jdeprscan 这将验证兼容性,列出代码中不再使用的 API 并建议替代方案(!)。您可以指定目标 JDK 版本(适用于 JDK 9876),它将列出特定于您的目标版本的不兼容性。

对于库的补充说明:

一个合理的经验法则是为您的软件目标的 JRE 版本使用最新的稳定版本库。显然,您会发现这条规则的许多异常(exception)情况,但一般来说,公开可用的库通常的稳定性会随着时间的推移而增加。

在更改依赖项的版本时,自然必须考虑 API 兼容性版本控制

同样,大多数流行的依赖项都会有网页,这些信息应该是可用的。

但是,如果您使用的东西有点晦涩难懂,您可以辨别出哪些 JRE 是您的依赖项中编译的类。

Here is a great answer on how to find out class version .您可能需要先解压缩 JAR 文件。

关于java - 较新的 JRE 版本可以运行使用较旧 JDK 版本编译的 Java 程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10895969/

相关文章:

java - 如何将 Java OpenJDK 1.6.0_36 安装到 CentOS 7.2

java - 印章锁说明。 java

java - 与 Apache Shiro 和自定义授权领域混淆

java - 如何制作通用的计数排序方法?

java - 使用项目数组初始化 HashMap?

java - 无法解析符号 'App'

java - 在时间选择器中限制时间范围

java - JPA java.lang.IllegalArgumentException : NamedQuery of name not found

java - Hibernate注释: Many-to-many with shared composite key attribute

java - 创建 Flux.fromIterable 后如何运行 onClose 操作?