NoClassDefFoundError:名称错误
我编写了一个Java程序来使用Netbeans7.0.1testingREST风格的Web服务,它在那里工作的很好。 现在我写了build.xml文件来编译代码,当我尝试运行生成的.class文件时,我总是得到这个exception:
Exception in thread "main" java.lang.NoClassDefFoundError: ClientREST (wrong name: clientrest/ClientREST) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) at java.lang.ClassLoader.defineClass(ClassLoader.java:616) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) at java.net.URLClassLoader.access$000(URLClassLoader.java:58) at java.net.URLClassLoader$1.run(URLClassLoader.java:197) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:248) Could not find the main class: ClientREST. Program will exit.
名字和path是正确的,所以我为什么得到这个exception的任何想法?
线程“main”中的exceptionjava.lang.NoClassDefFoundError:ClientREST
所以,你运行它为java ClientREST
。 它期望没有任何package
的ClientREST.class
。
(错误名称:clientrest / ClientREST)
嗨,这个class正试图告诉你,它有一个package clientrest;
。 你需要从包的根目录运行它。 去一个文件夹,以便你在文件夹,而该文件夹又包含代表软件包的客户端文件夹,然后执行java clientrest.ClientREST
。
您不应该进入clientrest
包文件夹并执行java ClientREST
。
我遇到了这个错误使用命令行java:
java -cp stuff/src/mypackage Test
Test.java
驻留在包mypackage
。
相反,您需要将classpath -cp
设置为基本文件夹(在本例中为src),然后将程序包预先添加到文件名中。
所以最终会看起来像这样:
java -cp stuff/src mypackage.Test
在类path中可能存在您正在生成类的位置。 运行时使用jvm arg -verbose,并检查日志文件是否被加载。
输出也会给你线索从哪里加载的线索,确保你的类文件存在于那个位置。
要进一步注意Garry的回复:类path是类本身所在的基础目录。 所以如果类文件在这里 –
/home/person/javastuff/classes/package1/subpackage/javaThing.class
您将需要引用类path,如下所示:
/家庭/人/ javastuff /class
所以要从命令行运行,完整的命令将是 –
java -cp / home / person / javastuff / classes package1 / subpackage / javaThing
即上面的模板是
java_executable -cp classpath the_class_itself_within_the_class_path
这就是我最终得到我的工作,而没有在环境中的class级path
尝试下面的语法:
假设java文件驻留在这里: fm/src/com/gsd/FileName.java
所以你可以运行使用下面的语法:
(使当前目录为'fm')
java src.com.gsd.FileName