24

在 Java 8 和之前的版本中,存在使用认可目录(java.endorsed.dirs)的机制,它是覆盖 JDK 内部实现的库的集合。

如何在 Java-9 中解决这个问题?作为认可的目录在哪里删除?

4

3 回答 3

17

在 JDK 9 中,您可以使用可升级模块或将JAR 文件放在类路径中。

Java 9 迁移指南指出:

系统java.endorsed.dirs属性和lib/endorsed 目录不再存在。 如果检测到任何一个,编译器和启动器将退出javacjava

如果其中任何一个存在,您最终会发现错误:

<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 仅以模块化形式支持。

于 2017-09-26T06:46:48.063 回答
1

这是一个特定的解决方案,但可能可以概括。系统版本:macOS 10.14.6 (18G3020) 内核版本:Darwin 18.7.0 我安装了 OpenJDK 64 位服务器 VM(内部版本 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

我编辑了最后一行~/glassfish5/glassfish/bin/xjc以删除该-Djava.endorsed.dirs位:BEFORE

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按预期工作

于 2020-02-26T23:19:24.420 回答
-4

我也遇到了同样的问题,Tomcat 9 不支持高于 8 的 Java 版本。请查看 bin/catalina.sh 了解更多信息。

JAVA_ENDORSED_DIRS (可选)包含一些 jar 的冒号分隔目录列表,以允许替换在 JCP 之外创建的 API(即来自 W3C 的 DOM 和 SAX)。它还可用于更新 XML 解析器实现。这仅支持 Java <= 8。默认为 $CATALINA_HOME/endorsed。

于 2018-04-19T13:44:20.633 回答