如何替换 Java 9 中认可的目录?
在Java 8及更早版本中,存在使用背书目录(java.endorsed.dirs)的机制,它是覆盖JDK内部实现的库的集合。
如何在Java-9中解决这个问题?作为认可的 dirs 在哪里删除?
在Java 8及更早版本中,存在使用背书目录(java.endorsed.dirs)的机制,它是覆盖JDK内部实现的库的集合。
如何在Java-9中解决这个问题?作为认可的 dirs 在哪里删除?
在 JDK 9 中,可以使用可升级的模块或将 JAR 文件放在类路径上。
Java 9 迁移指南指出:
系统属性和目录不再存在。如果检测到编译器和启动器中的任何一个,编译器和启动器都将退出。
java.endorsed.dirs
lib/endorsed
javac
java
如果其中任何一个存在,您最终会发现错误:
<JAVA_HOME>/lib/endorsed is not supported. Endorsed standards and standalone APIs in modular form will be supported via the concept of upgradeable modules. Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit.
这些认可的标准覆盖机制已被删除,以获得模块化运行时映像,现在将使用模块化映像。
模块化映像由模块而不是 JAR 文件组成。展望未来,通过可升级模块的概念,仅以模块化形式支持认可的标准和独立API。
这是一个特定的解决方案,但可能是一概而论的。在系统版本:macOS 10.14.6 (18G3020) 内核版本:Darwin 18.7.0 我已安装 OpenJDK 64 位服务器虚拟机(内部版本 13.0.2+8,混合模式,共享)和 java_ee_sdk-8u1。
我在执行xjc时遇到此错误:
[foo@bar bin 14:47:27] sudo ./xjc
-Djava.endorsed.dirs=./../modules/endorsed is not supported. Endorsed standards and standalone APIs
in modular form will be supported via the concept of upgradeable modules.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.enter code here
我编辑了最后一行以删除位:BEFORE~/glassfish5/glassfish/bin/xjc
-Djava.endorsed.dirs
exec "$JAVA" -Djava.endorsed.dirs="$AS_INSTALL_LIB/endorsed" -cp "$AS_INSTALL_LIB/webservices-osgi.jar:$AS_INSTALL_LIB/javax.xml.rpc-api.jar:$AS_INSTALL_LIB/jaxb-osgi.jar" com.sun.tools.xjc.Driver "$@"
后
exec "$JAVA" -cp "$AS_INSTALL_LIB/webservices-osgi.jar:$AS_INSTALL_LIB/javax.xml.rpc-api.jar:$AS_INSTALL_LIB/jaxb-osgi.jar" com.sun.tools.xjc.Driver "$@"
之后按预期工作~/glassfish5/glassfish/bin/xjc