gpt4 book ai didi

Java 9,与 ClassLoader.getSystemClassLoader 的兼容性问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:11:22 26 4
gpt4 key购买 nike

以下代码将 jar 文件添加到构建路径,它在 Java 8 中运行良好。但是,它在 Java 9 中抛出异常,该异常与对 URLClassLoader 的转换有关。任何想法如何解决这个问题?最佳解决方案将对其进行编辑以同时适用于 Java 8 和 9。

private static int AddtoBuildPath(File f) {
try {
URI u = f.toURI();
URLClassLoader urlClassLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
Class<URLClassLoader> urlClass = URLClassLoader.class;
Method method = urlClass.getDeclaredMethod("addURL", URL.class);
method.setAccessible(true);
method.invoke(urlClassLoader, u.toURL());
} catch (NoSuchMethodException | SecurityException | IllegalArgumentException | InvocationTargetException | MalformedURLException | IllegalAccessException ex) {
return 1;
}

return 0;
}

最佳答案

您遇到了一个事实 the system class loader is no longer a URLClassLoader .如 ClassLoader::getSystemClassLoader 的返回类型所示,这是一个实现细节,尽管有不可忽略的代码量依赖于此。

从评论来看,您正在寻找一种在运行时动态加载类的方法。作为Alan Bateman points out ,这在 Java 9 中无法通过附加到类路径来完成。

您应该考虑为此创建一个新的类加载器。这具有额外的优势,您将能够摆脱新类,因为它们没有加载到应用程序类加载器中。如果您针对 Java 9 进行编译,您应该阅读 layers - 它们为您提供了加载全新模块图的清晰抽象。

关于Java 9,与 ClassLoader.getSystemClassLoader 的兼容性问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46694600/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com