动态加载类文件时抛出ClassNotFoundException

时间:2010-11-01 21:34:24

标签: java dynamic classpath classloader classnotfoundexception

我们有一个servlet项目,它包含(在许多其他类中)我们向用户公开的接口。

用户可以编译自己的类(以.class文件的形式)来实现提供的接口,并将它们放在我们项目知道的文件夹中。当servlet启动时,它使用URLClassLoader加载该文件夹中的所有.class文件。 (因此用户可以参与某些活动。)

据我所知,类文件的位置和加载正确,种类。当加载用户编译的.class文件时,抛出了ClassNotFoundException异常,但是它抱怨接口,它应该已经在类路径上。

Caused by: java.lang.ClassNotFoundException: com.company.project.OurInterface
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)

当动态加载.class文件时,是否有找不到接口的原因?

3 个答案:

答案 0 :(得分:3)

也许您没有为URLClassLoader指定父类加载器。

您的应用程序的类加载器应该是动态类加载器的父类加载器:

ClassLoader dynamicClassLoader = 
    new URLClassLoader(..., OutInterface.class.getClassLoader());

答案 1 :(得分:0)

也许是因为你试图从“动态类”-path加载该接口?你把接口放在那里会发生什么?

答案 2 :(得分:0)

可能是因为你正在使用不同的类加载器,而且它没有找到由它的类加载器加载的类。

您是否考虑过使用SPI代替? http://download.oracle.com/javase/1.4.2/docs/guide/jar/jar.html#Service%20Provider(对不起旧的链接,但方法是一样的。