从 Java 9 到 Java 8 的兼容性和迁移

Compatibility and migration from Java 9 to Java 8

我正在阅读有关新 Java 9 模块系统的 document

段落3 兼容性和迁移解释了如何迁移代码 从 Java 8 到 Java 9,但没有说明如何 "migrate" 或 运行 申请 写在 Java 9 之前 Java 9 运行 次。

所以,如果我有一个以 模块化方式编写的 JAR 应用程序 (每个模块都有一个模块描述符),如果我将它部署在上面会发生什么,即JDK 8 运行时间?

您无法使用低于其构建目标的 JRE 启动 Java 应用程序。

如果您只使用 javac 而没有任何特殊选项,它将生成 classes,它在等于或大于所用 JDK 的 JRE 上执行 运行 .

不过javac支持交叉编译。您可以使用 JDK 8 来编译 JDK 6 兼容的 class 文件。在javac docs.

中搜索交叉编译选项

Java Class 个文件包含版本信息。对于任何 Java 版本,应该不可能执行使用比您的运行时更新的主要版本编译的 class 文件(或 jar)。参见:

如果你的 class 文件是用 --release 8 标志编译的,那么它们应该 运行 在 Java 上没问题 8. module-info.class 文件将被忽略较旧的 JVM。

如果您的 Java 8 项目是基于 maven 的,您可以轻松配置它以包含 module-info.javahttps://maven.apache.org/plugins/maven-compiler-plugin/examples/module-info.html

此外,请查看 JEP 238(多版本 JAR 文件)。这使您可以在不破坏与 Java 8.

的兼容性的情况下,利用 Java 9 功能的更多优势