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 。 它期望没有任何packageClientREST.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