我正在将多个项目从Java 8迁移到Java 11,我想知道Java 8是否与Java 11向前兼容。换句话说,在Java 8项目中可以使用针对Java 11编译的工件吗?
发布于 2022-11-29 07:15:39
不,您不能在旧的(任何旧的) JVM上执行Java 11字节码。情况一向如此。每个新的主要编译器版本都有一个新的字节码格式,不会在旧的运行时执行。
但是,您可以从较新的JVM上的旧版本执行字节码,因此在Java 11运行时上执行Java 8字节码是非常可能的,因此,如果满足依赖性要求,则可以在Java 11项目中使用Java 8(或更旧版本)编译库。
但是,请记住,Java 9+从Java 8中的核心库中删除了许多包,因此您可能需要从第三方提供新的依赖项来替换这些包。其中最值得注意的(但肯定不是唯一的)是XML解析器。
发布于 2022-11-29 06:51:37
您可以在Java 11运行时运行为Java 8编译的项目。
如果在编译期间正确地将--target设置为以JDK 8或更低为目标,则可以在Java8运行时运行为Java11编译的项目。当然,这也将限制源代码中支持的功能集。
通常,在以后的运行时支持JDK的早期版本(即Java 11应该在Java 17上运行),但是有一些警告,因为有些特性可能被废弃或更改。在升级之前,一定要阅读发行说明和测试。
https://stackoverflow.com/questions/74610032
复制相似问题