直到java9在运行时通过编程方式将所有人使用的外部jar添加到类路径:
URLClassLoader sysloader = (URLClassLoader) ClassLoader.getSystemClassLoader();
Method method = URLClassLoader.class.getDeclaredMethod("addURL", new Class[]{URL.class});
method.invoke(sysloader, new Object[]{file.toURI().toURL()});
Run Code Online (Sandbox Code Playgroud)
现在用java9我们有问题:
线程"main"中的异常java.lang.ClassCastException:java.base/jdk.internal.loader.ClassLoaders $ AppClassLoader无法强制转换为java.base/java.net.URLClassLoader
URLClassLoader 在Java 9中不再有效.在jdk9下如何以编程方式在运行时向类路径添加外部jar?
我当前的java项目正在使用来自另一个项目(同一个包)的方法和变量.现在,另一个项目的jar必须在类路径中才能正常工作.我的问题是jar的名称可以并且会因为版本的增加而改变,并且因为你不能在manifest类路径中使用通配符,所以不可能将它添加到类路径中.所以目前启动我的应用程序的唯一选择是使用-cp命令行中的参数,手动添加我的项目依赖的另一个jar.
为了改善这一点,我想动态加载jar并阅读有关使用ClassLoader的信息.我为它阅读了很多例子,但是我仍然不明白如何在我的案例中使用它.
我想要的是加载一个jar文件,比方说,myDependency-2.4.1-SNAPSHOT.jar但它应该能够只搜索一个jar文件,myDependency-因为我已经说过版本号可以随时改变.然后我应该能够像我现在一样在我的代码中使用它的方法和变量(比如ClassInMyDependency.exampleMethod()).
任何人都可以帮助我,因为我已经在网上搜索了几个小时,但仍然没有得到如何使用ClassLoader来做我刚才解释的.
提前谢谢了