Как вы замените одобренный каталог в 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.