-4

程序用JDK8编译。我想用 JDK11 运行代码(无需用 JDK11 重新编译代码)。

问题是程序使用来自JDK8 tools.jar的类(现在在jdk11的jdk.compiler模块中的类,tools.jar被添加到类路径中)。在 JDK11 中,工具没有单独的 jar,而是 JDK11 的一部分。所以存在类冲突(类在 JDK11 中,也在类路径上的 tools.jar 中)。JDK11 中的类优先于 tools.jar 中的类。有没有可能告诉JVM它应该使用tools.jar中的类而不是JDK11中的类。

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

4

1 回答 1

0

虽然我真的不建议这样做,但您可以通过--limit-modules以下选项实现您想要的东西:

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

这将排除所有模块java.se,除了您将能够使用tools.jar.

同样,这是一个糟糕的建议。让你的代码与新的系统类兼容比使用 JDK 8 中的类要好得多。

于 2019-01-31T10:44:57.050 回答