Как вы замените одобренный каталог в Java 9?

В Java 8 и более ранних версиях существует механизм использования одобренного каталога (java.endorsed.dirs), который представляет собой набор библиотек, который переопределяет внутренние реализации JDK.

Как я могу решить эту проблему в Java 9. Как одобрили каталоги, где удалены там?

2 ответа

Решение

В 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 У меня установлена ​​64-разрядная серверная виртуальная машина OpenJDK (сборка 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 бит: ДО

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 работал как ожидалось

I also faced same issue, Java versions higher than 8 are not supported by Tomcat 9.
please check bin/catalina.sh for more information.
#JAVA_ENDORSED_DIRS (Optional) Lists of of colon separated directories
#containing some jars in order to allow replacement of APIs
#created outside of the JCP (i.e. DOM and SAX from W3C).
#It can also be used to update the XML parser implementation.
#This is only supported for Java <= 8.
#Defaults to $CATALINA_HOME/endorsed.
Другие вопросы по тегам