How do you replace endorsed directory in Java 9?

2019-01-24 04:25发布

问题:

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 the lib/endorsed directory are no longer present. The javac compiler and java 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.