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

kiayqfof  于 2022-11-07  发布在  Java
关注(0)|答案(1)|浏览(267)

在python中通过jpype将jar添加到JVM类路径的正确方法是什么?
我最初使用的是Jpype.startJVM(jvmPath, "-Djava.class.path=%s" % (paths))
但是我知道扩展机制已经过时了,错误日志建议我使用“-classpath”
我尝试了下面的方法(并使用了几种变体),但我得到了一个无法识别的选项错误Jpype.startJVM(jvmPath, "-classpath =%s" % (paths))
我也尝试了Jpype.startJVM(jvmPath, classpath = paths),但我得到的扩展机制是折旧错误

ee7vknir

ee7vknir1#

使用-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,如果您没有提供一个命令行字符串,shell会将其分解为参数,您必须确保将其视为两个参数,-classpath,后跟实际路径。

相关问题