5

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

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

该怎么办?

4

1 回答 1

3

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

您可以创建一个封装,使两个 Java JDK 共有代码的类位于根 JAR 中,而您需要覆盖其实现的类位于jarMETA -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 创建的类似包装。

于 2017-12-03T01:32:15.780 回答