<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 …
指定类路径是不寻常的,但与删除的扩展机制完全无关。正如错误消息所说,问题是<JAVA_HOME>/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 存在,不再支持扩展机制的主要内容,如果未能解决你的问题,请参考以下文章