与jdk11但jdk8使用的tools.jar运行Java代码

时间:2019-01-31 08:54:10

标签: java java-8 java-11 tools.jar

程序被编译与JDK8。我想运行与JDK11代码(而不与JDK11代码重新编译)。

问题是程序使用了JDK8 tools.jar中的类(现在位于jdk11的jdk.compiler模块中的类,tools.jar已添加到类路径中)。在JDK11中,没有单独的工具罐,而是JDK11的一部分。因此,有一流的冲突(类是在JDK11,也存在一个在classpath中的tools.jar)。 JDK11中的类优先于tools.jar中的类。是否有可能告诉JVM,它应该使用类从tools.jar中,而不是从JDK11类。

更新 如我所说,我无法使用JDK11重新编译代码。 我知道在Java9介绍了Java模块系统。 我想问的是,是否有可能告诉JVM忽略JDK11模块jdk.compiler中的类,而不是使用他在类路径中找到的类。

1 个答案:

答案 0 :(得分:0)

尽管我真的不建议这样做,但您可以通过--limit-modules选项来实现所需的操作:

java --limit-modules java.se <rest of arguments>

这将排除java.se以外的所有模块,您将可以使用tools.jar中的类。

再次,这是可怕的建议。使您的代码与新的系统类兼容,而不是使用JDK 8中的代码,要好得多。