我sun.misc.Unsafe
在我的 Java8 代码库中使用。这不适用于 Java9。
我想修复 Java9,但使用在 Java8 上运行的相同代码库。如果我放module-info.java
,它将不起作用,因为我的代码库是 Java8。
该怎么办?
我sun.misc.Unsafe
在我的 Java8 代码库中使用。这不适用于 Java9。
我想修复 Java9,但使用在 Java8 上运行的相同代码库。如果我放module-info.java
,它将不起作用,因为我的代码库是 Java8。
该怎么办?
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 创建的类似包装。