Java 9:如何动态地将更多jar文件添加到classpath

时间:2018-01-04 10:48:11

标签: java jar java-9

我们的基于Java的应用程序有一个很小的" bootloader.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:

  

请注意,Java SE和JDK不为应用程序提供API   库在运行时动态扩充类路径。

有人可以证实吗?

1 个答案:

答案 0 :(得分:2)

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

  

需要更新假定ClassLoader::getSytemClassLoader返回URLClassLoader对象的代码。

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