从外部jar加载类时,只有几个类的NoClassDefFoundError

时间:2016-03-08 12:02:11

标签: java jar classloader external

我正在尝试加载外部jar中包含的所有类。我不能将jar作为库包含在我的项目中,我必须从用户定义的未知位置加载它。到目前为止,我正在使用扩展urlclassloader的类加载器加载类。这是来源:

Cast<string>

奇怪的是,在1800多个课程中,我只获得了37个课程和#34; NoClassDefFoundError&#34;抛出。这些课程没有加载,因为我的程序因为Nullpointers而无法正常工作。

这是我正在加载的jar:http://www.file-upload.net/download-11374317/craftbukkit-1.8.8.jar.html
就我所知,这是源头:https://hub.spigotmc.org/stash/projects/SPIGOT/repos/craftbukkit/browse
这是我能找到的文档:https://hub.spigotmc.org/javadocs/bukkit/

我怎么能设法加载这37个班级?我尝试用字节读取它们并使用方法&#34; defineClass&#34;加载它们。类加载器,但这种方法也无法加载它们。有人知道如何解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

如果没有看到错误原因,很难知道。

通常这是由于类路径中没有包含依赖项(由ClassNotFoundException导致无法加载超类的类加载器包含在NoClassDefFoundError中)或静态中的某些运行时异常引起的田野或街区。

值得指出NoClassDefFoundErrorhttps://stackoverflow.com/a/5756989/4483113

的优秀解释

答案 1 :(得分:0)

您的应用似乎达到了65K方法的限制,这是Android的一个非常着名的限制。 来源:https://developer.android.com/tools/building/multidex.html#dev-build

有关其他信息,请参阅: java.lang.NoClassDefFoundError exception on some devices

答案 2 :(得分:0)

访问它们时,

java.lang.NoClassDefFoundErrorjava.lang.NoSuchMethodError会在运行时抛出,并且类加载器无法加载类,因为它不存在于类路径中。如果您的程序从不尝试在运行时访问类路径中不存在的类或方法,那么您将永远不会获得NoClassDefFoundErrorNoSuchMethodError