Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让使用不安全的java8代码在jdk8和jdk9上工作?_Java_Java 8_Java 9_Unsafe_Module Info - Fatal编程技术网

如何让使用不安全的java8代码在jdk8和jdk9上工作?

如何让使用不安全的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中,只有根目录中的类和

我在Java8代码库中使用了
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将被忽略)。