我在我的 Java8 代码库中使用 sun.misc.Unsafe
。这不适用于 Java9。
我想要 Java9 的修复程序,但具有在 Java8 上运行的相同代码库。如果我放入 module-info.java
,它将无法工作,因为我的代码库是 Java8。
怎么办?
最佳答案
Andreas comment指向正确的方向,您可以使用 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 根。
编辑:- Here是在 JetBrains blog 的帮助下创建的类似包装的示例项目使用 IntelliJ2017.3。
关于java - 如何让使用 Unsafe 的 java 8 代码在 jdk 8 和 jdk 9 上工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47613650/