<JAVA_HOME>/lib/ext 存在,不再支持扩展机制

Posted

技术标签:

【中文标题】<JAVA_HOME>/lib/ext 存在,不再支持扩展机制【英文标题】:<JAVA_HOME>/lib/ext exists, extension mechanism no longer supported 【发布时间】:2021-11-03 14:55:40 【问题描述】:

通过jpype在python中将jar添加到JVM类路径的正确方法是什么?

我最初使用 Jpype.startJVM(jvmPath, "-Djava.class.path=%s" % (paths)).

但我知道扩展机制已被贬值,错误日志建议我使用“-classpath”

我尝试了以下方法(并使用了几种变体),但出现无法识别的选项错误 Jpype.startJVM(jvmPath, "-classpath =%s" % (paths)).

我也试过Jpype.startJVM(jvmPath, classpath = paths),但我得到了扩展机制被贬值的错误

【问题讨论】:

它不仅被弃用。在 Java 9+ 中移除了对扩展机制的支持 我不懂 Python,但示例 2 HERE 看起来很有希望 【参考方案1】:

使用-Djava.class.path=… 而不是-classpath … 指定类路径是不寻常的,但与删除的扩展机制完全无关。正如错误消息所说,问题是&lt;JAVA_HOME&gt;/lib/ext的存在。

演示问题(在此示例中使用 Windows)

E:\java>jdk-11.0.1\bin\java -version
openjdk version "11.0.1" 2018-10-16
OpenJDK Runtime Environment 18.9 (build 11.0.1+13)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode, sharing)

E:\java>mkdir jdk-11.0.1\lib\ext

E:\java>jdk-11.0.1\bin\java -version
<JAVA_HOME>/lib/ext exists, extensions mechanism no longer supported; Use -classpath instead.
.Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

E:\java>rmdir jdk-11.0.1\lib\ext

E:\java>jdk-11.0.1\bin\java -version
openjdk version "11.0.1" 2018-10-16
OpenJDK Runtime Environment 18.9 (build 11.0.1+13)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode, sharing)

纯 Java 安装没有 ext 文件夹,因此安装程序必须创建它,假设旧的扩展机制不再存在。由于在这种错误假设下运行软件可能会导致更多、难以诊断的问题,因此 Java 供应商决定在此文件夹存在时立即无条件地退出。

因此您必须删除该文件夹。如果它不为空,它可能包含您的应用程序所需的 jar 文件。因此,您必须将它们移动到可以维护它们的新位置。然后,您必须将它们包含在您的类路径中。无论您使用-Djava.class.path=… 还是-classpath … 都无关紧要。

要解决命令行选项语法的问题,它是-classpath path,没有任何= 符号。根据用于启动新进程的 API,您必须确保将其视为两个参数,-classpath,然后是实际路径,如果您不提供单个命令行字符串,该字符串由外壳。

【讨论】:

以上是关于<JAVA_HOME>/lib/ext 存在,不再支持扩展机制的主要内容,如果未能解决你的问题,请参考以下文章

java 编译和运行class

JAVA JDK环境变量配置

java串口通讯环境配置

jdk1.8环境变量配置

JVM中的双亲委派机制

java 中类加载器