如何在jdk8和jdk9上使用不安全的java8代码?

igr*_*igr 5 java unsafe java-8 java-9 module-info

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

我想修复Java9,但使用与Java8相同的代码库.如果我放module-info.java,它将无法工作,因为我的代码库是Java8.

该怎么办?

Nam*_*man 3

Andreas 评论指出了正确的方向,您可以使用Multi-Release JAR Files。

您可以创建一个打包,使得具有两个 Java JDK 通用代码的类位于根 JAR 中,而您需要覆盖其实现的类则位于根JAR以及META -INF/versions/9中。正如 JEP 所指出的:-

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

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

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

编辑:-这是在JetBrains 博客的帮助下使用 IntelliJ2017.3 创建的类似打包的示例项目。

  • 当您有 >= JDK 9 的不同代码时,MR JAR 确实很有用。但是,尚不清楚这里是否需要它。如果发帖者有一个使用 sun.misc.Unsafe 的库,那么它应该在 JDK 9 的类路径上工作,就像在 JDK 8 及更早版本中一样。如果发布者正在创建一个模块,那么它将“需要 jdk.unsupported”,并且它应该在模块路径上工作(或者在 module-info.class 将被忽略的类路径上)。 (6认同)