如何让使用 Unsafe 的 java8 代码在 jdk8 和 jdk9 上工作?

How to have the java8 code that uses Unsafe working on jdk8 and jdk9?

我在 Java8 代码库中使用 sun.misc.Unsafe。这不适用于 Java9。

我想要 Java9 的修复程序,但使用在 Java8 上运行的相同代码库。如果我输入 module-info.java,它将不起作用,因为我的代码库是 Java8.

怎么办?

points in the correct direction, you can make use of the Multi-Release JAR Files.

您可以创建一个包装,这样 类 和 Java JDK 的代码都在根 JAR 中,而您需要覆盖的那个both root jar 以及 META-INF/versions/9 中的实现。正如 JEP 所指出的:-

  • 在不支持MRJARs的JDK中,只有类和根目录下的资源可见。

  • 在支持 MRJAR 的 JDK 中,对应于任何后续 Java 平台版本的目录将被忽略;它会首先在对应于当前运行主要Java平台发布版本的Java平台特定目录中搜​​索类和资源,然后搜索较低版本,最后是 JAR 根目录。

  • 例如,在 Java 9 JDK 上,就好像有一个特定于 JAR 的类路径首先包含版本 9 文件,然后是 JAR根;在 Java 8 JDK 上,此类路径将仅包含 JAR 根目录。

编辑:- Here is a sample project for a similar packaging created with the help of a JetBrains blog 使用 IntelliJ2017.3.