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

时间:2017-12-02 23:19:35

标签: java java-8 java-9 unsafe module-info

我在Java8代码库中使用sun.misc.Unsafe。这在Java9上不起作用。

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

怎么办?

1 个答案:

答案 0 :(得分:2)

Andreas comment指向正确的方向,您可以使用Multi-Release JAR Files

您可以创建一个包装,使得包含Java JDK共同代码的类位于根JAR中,而您需要覆盖实现的那个类位于 中root jar 以及 META-INF / versions / 9 。正如JEP所指出的那样: -

  • 在不支持MRJAR的JDK中,只显示根目录中的类和资源。

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

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

编辑 : - Here是使用IntelliJ2017.3在JetBrains blog的帮助下创建的类似包装的示例项目。< / p>