如何让使用不安全的java8代码在jdk8和jdk9上工作?
我在Java8代码库中使用了如何让使用不安全的java8代码在jdk8和jdk9上工作?,java,java-8,java-9,unsafe,module-info,Java,Java 8,Java 9,Unsafe,Module Info,我在Java8代码库中使用了sun.misc.Unsafe。这在Java9上不起作用 我希望对Java9进行修复,但是要使用运行在Java8上的相同代码库。如果我把module info.java,它将不起作用,因为我的代码库是Java8 怎么办?指向正确的方向,您可以利用 您可以创建一个包,使带有两个Java JDK共同代码的类位于根JAR中,而需要覆盖其实现的类位于根JAR以及META-INF/versions/9中。正如JEP所指出的:- 在不支持MRJAR的JDK中,只有根目录中的类和
sun.misc.Unsafe
。这在Java9上不起作用
我希望对Java9进行修复,但是要使用运行在Java8上的相同代码库。如果我把module info.java
,它将不起作用,因为我的代码库是Java8
怎么办?指向正确的方向,您可以利用
您可以创建一个包,使带有两个Java JDK共同代码的类位于根JAR中,而需要覆盖其实现的类位于根JAR以及META-INF/versions/9中。正如JEP所指出的:-
- 在不支持MRJAR的JDK中,只有根目录中的类和资源才可见
- 在支持MRJAR的JDK中,与任何后续Java平台版本对应的目录都将被忽略;它将首先在与当前运行的主要Java平台发布版本相对应的Java平台特定目录中搜索类和资源,然后搜索那些较低版本,最后是JAR根目录
- 例如,在Java9JDK上,就好像有一个特定于JAR的类路径,首先包含版本9文件,然后是JAR根文件;在Java8JDK上,这个类路径将只包含JAR根
编辑:-是使用IntelliJ2017.3帮助创建的类似包的示例项目。从Oracle购买昂贵的支持合同(和/或)提交错误报告。在java 9下执行时,请尝试
java--添加模块jdk.unsupported…
。@Andreas不幸的是,我无法强制用户使用此标志(这是我拥有的库)。看。问题需要说明“不起作用”是什么意思。除了两个小差异中的一个之外,它在JDK 9中的作用应该与在JDK 8中的作用相同。参见JEP 260()更多信息,当您对>=JDK 9使用不同的代码时,MR JARs确实很有用。但是,这里是否需要它还不清楚。如果海报有一个使用sun.misc.Unsafe的库,那么它应该在JDK 9的类路径上工作,就像在JDK 8和更早版本中一样。如果海报正在创建一个模块,那么它将需要JDK.uns支持
,它应该在模块路径上工作(或者在类路径上,其中module-info.class将被忽略)。