解决方法NoClassDefFoundError用于错误的目录结构

时间:2016-09-19 20:19:32

标签: java classloader

我正在尝试使用自定义类加载器来加载可能位于文件系统任何位置的随机@using (Html.BeginForm("UpdateOrder", "OrderController", FormMethod.Post)) { // some inputs here } <p id="user_info">Some text here</p> 文件。我编写了我的类加载器以扩展.class,覆盖ClassLoaderfindClass()方法,并读入类文件的字节流。尝试调用loadClass()

时会出现此问题

我得到的确切错误是:

ClassLoader.defineClass()

我知道问题在于本机类加载功能并不像Exception in thread "main" java.lang.NoClassDefFoundError: Test (wrong name: com/foo/bar/Test) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:800) 不住在Test.class中这样的事实。有什么方法可以让我的工作吗?我的类加载器已经有代码来检查定义的类是否符合特定的包。我真的不明白为什么本机方法不允许这样做(除了安全性,在这个用例中我不需要,然后事件,让我用脚射击自己)。

1 个答案:

答案 0 :(得分:1)

本机类加载器,即ClassLoader.defineClass1,对目录结构一无所知。它只加载一个字节数组。

错误消息表明作为参数传递给defineClass的二进制名称与从类数据字节中发现的实际名称不匹配。最简单的解决方法是在调用defineClass时设置name=null

注意:您只需将其移动到其他目录即可更改类的包。包名称嵌入在类文件数据中。您必须使用正确的package指令重新编译源代码,或者在加载时使用字节码检测框架修改类文件字节。