问题
In Java 8 and prior there exists the mechanism to use an endorsed directory(java.endorsed.dirs), which is a collection of libraries which overrides JDK internal implementations.
How can I solve this in Java-9? As endorsed dirs where removed there?
回答1:
In JDK 9, you can use upgradeable modules or put the JAR files on the classpath.
The Java 9 migration guide states:
The
java.endorsed.dirs
system property and thelib/endorsed
directory are no longer present. Thejavac
compiler andjava
launcher will exit if either one is detected.
You would end up finding the error if any of these exists as :
<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.
These endorsed-standards override mechanism was removed to attain Modular Run-Time Images and would now use the modular image.
A modular image is composed of modules rather than JAR files. Going forward, endorsed standards and standalone APIs are supported in modular form only, via the concept of upgradeable modules.
回答2:
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.
来源:https://stackoverflow.com/questions/46419496/how-do-you-replace-endorsed-directory-in-java-9