gpt4 book ai didi

java - URLClassloader 依赖项

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:29:27 26 4
gpt4 key购买 nike

在我之前的问题中,我询问了如何加载远程 jar 文件。我当前的代码是这样的:

//f is the path to the jar
URLClassLoader loader = new URLClassLoader(new URL[]{f.toURI().toURL()});
Class<?> jarClass = Class.forName(main, true, loader);
Class<? extends Module> module = jarClass.asSubclass(Module.class);

Constructor<? extends Module> constructor = module.getConstructor();
System.out.println(constructor);

Module module = constructor.newInstance();

这很好用,但是远程加载的模块扩展了加载它们的 jar 中的一个类,这给出了这个错误:

Caused by: java.lang.ClassNotFoundException: package.whatever.Module,我认为这是因为它使用的是 URLClassLoader 而不是 getClass().getClassLoader().. 我怎样才能让它使用 URLClassLoader 然后回退到默认的?

谢谢,
巴特

最佳答案

您可以将您的应用程序类加载器设置为 url 类加载器的父类:

URLClassLoader loader = new URLClassLoader(
new URL[]{f.toURI().toURL()}, Module.class.getClassLoader());

来自Oracle Java tutorial (类加载机制):

The Java platform uses a delegation model for loading classes. The basic idea is that every class loader has a "parent" class loader. When loading a class, a class loader first "delegates" the search for the class to its parent class loader before attempting to find the class itself.

关于java - URLClassloader 依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16405388/

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