我在Java8代码库中使用sun.misc.Unsafe
。这在Java9上不起作用。
我想修复Java9,但使用与Java8相同的代码库。如果我放module-info.java
,它将无效,因为我的代码库是Java8。
怎么办?
答案 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>