【发布时间】:2019-06-24 16:24:26
【问题描述】:
程序是用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 中的类,而不是使用他在类路径中找到的类。
【问题讨论】:
-
“使用 tools.jar 中的类” 非常不具体。您能否编辑您的问题并说出具体使用了哪些类以及用于什么目的?可能在 Java 11 中使用这些类更好。
-
您可能想首先了解 Java 9 引入的 Java 模块概念。您绝对不想让任何人使用带有 java 11 的 java 8 tools.jar虚拟机。一点也不!
-
不要那样做。这绝对不是受支持的配置。
-
让我总结一下:你有一个专有的二进制软件,它使用 tools.jar 的目的你不会告诉你,你问我们是否可以使用 Java 中的 tools.jar,但没有提供更多信息8 与 Java 11。我看到两个答案:“谁知道?”和“也许”。
-
我知道它使用 tools.jar 的目的。它使用 tools.jar,因为自定义编译需要 com.sun.tools.javac 类。问题是是否有可能告诉 jvm 忽略模块 JDK11 模块 jdk.compiler 类,而不是使用类路径中的类。
标签: java java-8 java-11 tools.jar