如何在 java 9 中将 jar 添加到引导类路径

How to add a jar to the boot classpath in java 9

在 java 8 上运行的应用程序中,我使用 -bootclasspath:p 将 jar 添加到引导类路径。在java9中,该选项被移除。在 java 9 中做同样的事情的替代方法是什么?

您可以使用 -Xbootclasspath/a。请参阅 release notes,其中指出:-

The boot class path has been mostly removed in this release. The java -Xbootclasspath and -Xbootclasspath/p options have been removed.

The javac -bootclaspath option can only be used when compiling to JDK 8 or older. The system property sun.boot.class.path has been removed.

Deployments that rely on overriding platform classes for testing purposes with -Xbootclasspath/p will need to changed to use the --patch-module option that is documented in JEP 261.

The -Xbootclasspath/a option is unchanged.

-bootclasspath:p 将 jar 中的 classes 添加到默认 bootstrap class 路径的开头(前置)。 JVM 9 或更高版本不再支持它。

-bootclasspath:a 将 jar 中的 classes 添加到默认 bootstrap class 路径的末尾(附加)。 JVM 9 或更高版本支持此选项。 https://docs.oracle.com/cd/E15289_01/JRCLR/optionx.htm#i1021218

在我的例子中,当我按以下顺序声明变量时:

JAVA_OPTS="$SOME_OPT"

JAVA_OPTS="-javaagent:../agent.jar -Xbootclasspath/a:../agent-boot.jar $JAVA_OPTS"

我发现了 classNotFoundException。当我倒序时:

JAVA_OPTS="-javaagent:../agent.jar -Xbootclasspath/a:../agent-boot.jar $JAVA_OPTS"

JAVA_OPTS="$SOME_OPT"

ClassNotFound 异常消失。