gpt4 book ai didi

尝试在 glassfish 中动态加载类时出现 java.lang.ClassNotFoundException

转载 作者:太空宇宙 更新时间:2023-11-04 08:15:34 24 4
gpt4 key购买 nike

我正在尝试动态加载 .jar 文件中包含的类。我知道整个类名,并且确信该类实现了 AlgorithmClass 接口(interface)。我的代码如下所示:

addURLToSystemClassLoader(dir.toURI().toURL());
Class cl = Class.forName(algorithm.getClassName());
AlgorithmClass algorithmClass = (AlgorithmClass)cl.newInstance();

其中 dir 是 .jar 文件的 File 对象,addURLToSystemClassLoader(URL) 如下所示:

private void addURLToSystemClassLoader(URL url) throws IntrospectionException {
URLClassLoader systemClassLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
Class<URLClassLoader> classLoaderClass = URLClassLoader.class;
try {
Method method = classLoaderClass.getDeclaredMethod("addURL", new Class[]{URL.class});
method.setAccessible(true);
method.invoke(systemClassLoader, new Object[]{url});
} catch (Throwable t) {
t.printStackTrace();
throw new IntrospectionException("Error when adding url to system ClassLoader ");
}
}

我检查过,URL 正在添加到类加载器中。

当我尝试获取 Class 对象时,出现错误:

严重:javax.servlet.ServletException:java.lang.ClassNotFoundException:id3.Algorithm

(id3.Algorithm 是我尝试加载的类的全名)

我尝试创建一个新的类加载器,如下所示:

ClassLoader cload = new URLClassLoader(new URL[]{dir.toURI().toURL()}, ClassLoader.getSystemClassLoader());
Class cl = Class.forName(algorithm.getClassName(), false, cload);
AlgorithmClass algorithmClass = (AlgorithmClass)cl.newInstance();

但随后我收到错误:

java.lang.NoClassDefFoundError:lib/algorithm/AlgorithmClass

我尝试使用系统类加载器具有的所有 URL 创建一个新的 URLClassLoader,但效果是相同的。

“最糟糕”的部分是,这两种方法在我用于测试这部分代码的 jUnit 测试中都工作得很好。

我使用 Glassfish 3.1.1 作为我的应用服务器。

最佳答案

dir 不应包含“lib”。试试这个:

 ClassLoader cload = new URLClassLoader(new URL[]{dir.toURI().toURL()}, Thread.currentThread().getContextClassLoader());
Class cl = Class.forName(algorithm.getClassName(), true, cload);
AlgorithmClass algorithmClass = (AlgorithmClass)cl.newInstance();

关于尝试在 glassfish 中动态加载类时出现 java.lang.ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10486530/

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