同样的问题,但是构建了一个 Eclipse 插件。
Java中NoClassDefFoundError的原因是什么?
当 Java 虚拟机无法在运行时找到在编译期间可用的特定类时,Java 中的NoClassDefFoundError就会出现。例如,如果我们有一个类的方法调用或访问一个类的任何静态成员,并且该类在运行时不可用,那么 JVM 将抛出 NoClassDefFoundError。重要的是要了解这与 ClassNotFoundException 不同,后者仅在尝试在运行时加载类时出现,并且名称是在运行时而不是在编译时提供的。许多 Java 开发人员将这两个错误混为一谈而感到困惑。
简而言之,如果在编译期间存在类但在运行期间在 java 类路径中不可用,则会出现NoClassDefFoundError 。
Java中java.lang.NoClassDefFoundError和ClassNotFoundException的区别
很多时候,我们将自己与java.lang.ClassNotFoundException和java.lang.NoClassDefFoundError混淆了,尽管它们都与 Java Classpath 相关,但它们彼此完全不同。当 JVM 尝试在运行时动态加载类时出现ClassNotFoundException,这意味着您在运行时给出类的名称,然后 JVM 尝试加载它,如果在类路径中找不到该类,则会抛出java.lang.ClassNotFoundException. 而在 NoClassDefFoundError 的情况下,有问题的类在编译期间存在,这就是程序成功编译但在运行时不可用的原因。在我看来,NoClassDefFoundError 比 ClassNotFoundException 更容易解决,因为在这里我们知道 Class 在构建期间存在,但它完全取决于环境,如果您在 J2EE 环境中工作,即使存在 class,您也可以获得 NoClassDefFoundError 因为它可能不存在对相应的 ClassLoader 可见。
更多详情:http: //javarevisited.blogspot.com.es/2011/06/noclassdeffounderror-exception-in.html
现在是 Eclipse 插件的解决方案
当我们得到NoClassDefFoundError时,类路径至少没有在一个地方定义。在 Eclipse 插件中,这些都是需要定义外部库的类路径的地方:
- 项目属性:右键单击项目,然后单击属性。然后是 Java 构建路径,然后是库。最后添加库的罐子(外部或项目文件夹中)
- 在 plugin.xml 文件中:打开 plugin.xml 文件,然后单击选项卡 Runtime。在 Classpath 部分中添加库。在选项卡中单击 Build 并在 Extra Classpath Entries 中添加库。
就这样。
对于 Android 项目应该是一个类似的解决方案,因为这种错误来自错误的类路径定义。