Java 9:如何动态添加更多jar文件到类路径

Java 9: how to add further jar files to classpath dynamically

我们基于 Java 的应用程序有一个很小的 ​​"bootloader.jar" 和核心应用程序 jar。核心应用程序 jar 可以从默认(文件系统)位置加载,也可以从先前应用程序 运行 可能已下载更新的 jar 的其他位置加载。引导加载程序 运行 的以下代码:

final List<File> jars = getJarsToAddToClasspath();
final String mainClassName = getMainClassName();

final URLClassLoader urlClassLoader = new URLClassLoader(urls.toArray(new URL[urls.size()]), ClassLoader.getSystemClassLoader());
final Class<?> mainClass = urlClassLoader.loadClass(mainClassName);
final Method mainMethod = mainClass.getDeclaredMethod("main", String[].class);
mainMethod.invoke(null, new Object[] {args});

根据 http://www.oracle.com/technetwork/java/javase/9-relnote-issues-3704069.html 看来这不再适用于 Java 9:

Note that Java SE and the JDK do not provide an API for applications or libraries to dynamically augment the class path at run-time.

有人可以证实吗?

我认为它应该仍然有效。最简单的了解方法就是尝试一下。来自同一个 Oracle 页面:

Code that assumes that ClassLoader::getSytemClassLoader returns a URLClassLoader object will need to be updated.

您的代码不依赖 URLClassloader 类型的系统类加载器。它所做的只是将其设置为自定义类加载器的委托父级。这个自定义类加载器将委托它搜索 类 和资源,而不管其实现如何。