如何在运行时动态加载JAR?为什么在Java中这么难呢?如果您想拥有任何类型的模块系统,则需要能够动态加载JAR。我听说有办法写你自己的ClassLoader但是,对于一些应该(至少在我看来)应该像调用一个包含JAR文件的方法一样简单的方法来说,这需要做大量的工作。对于这样做的简单代码有什么建议吗?
4 回答
宝慕林4294392
TA贡献2021条经验 获得超8个赞
URLClassLoader child = new URLClassLoader( new URL[] {myJar.toURI().toURL()}, this.getClass().getClassLoader());Class classToLoad = Class.forName("com.MyClass", true, child); Method method = classToLoad.getDeclaredMethod("myMethod");Object instance = classToLoad.newInstance(); Object result = method.invoke(instance);
蝴蝶刀刀
TA贡献1801条经验 获得超8个赞
下面的解决方案是恶意的,因为它使用反射绕过封装,但是它工作得完美无缺:
File file = ...
URL url = file.toURI().toURL();
URLClassLoader classLoader = (URLClassLoader)ClassLoader.getSystemClassLoader();
Method method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
method.setAccessible(true);
method.invoke(classLoader, url);
添加回答
举报
0/150
提交
取消