28 lines
1.5 KiB
Markdown
28 lines
1.5 KiB
Markdown
## Why is `-Djava.ext.dirs` not supported?
|
|
|
|
`-Djava.ext.dirs` provides the extension class loader mechanism which was introduced in JDK 1.2, which was released in 1998.
|
|
According to [JEP 220: Modular Run-Time Images](http://openjdk.java.net/jeps/220), it ends in JDK 9,
|
|
to simplify both the Java SE Platform and the JDK we have removed the extension mechanism,
|
|
including the java.ext.dirs system property and the lib/ext directory.
|
|
|
|
This JEP has been applied since JDK11, which is the most active LTS JDK version. When use `-Djava.ext.dirs` in JDK11+,
|
|
the JVM would not be able to boot with following error.
|
|
```shell
|
|
<JAVA_HOME>/lib/ext exists, extensions mechanism no longer supported; Use -classpath instead.
|
|
.Error: Could not create the Java Virtual Machine.
|
|
Error: A fatal exception has occurred. Program will exit.
|
|
```
|
|
|
|
So, SkyWalking agent would not support the extension class loader mechanism.
|
|
|
|
### How to resolve this issue?
|
|
If you are using JDK8 and `-Djava.ext.dirs`, follow the JRE recommendations, **Use -classpath instead**.
|
|
This should be a transparent change, which only affects your booting script.
|
|
|
|
Also, if you insist on keeping using `-Djava.ext.dirs`, the community had [a pull request](https://github.com/apache/skywalking-java/pull/19),
|
|
which leverages the bootstrap instrumentation core of the agent to support the extension class loader.
|
|
|
|
In theory, this should work, but the SkyWalking doesn't officially verify it before noticing the above JEP.
|
|
You could take it as a reference.
|
|
|
|
The official recommendation still keeps as **Use -classpath instead**. |