我编写了一个java程序来使用Netbeans7.0.1测试RESTful Web服务,它在那里工作得很好。现在我编写了build.xml文件来编译代码,当我尝试运行生成的.class文件时,我总是遇到这个异常:
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.
名称和路径是正确的,所以任何想法为什么我得到这个例外?
答案 0 :(得分:98)
线程“main”中的异常java.lang.NoClassDefFoundError:ClientREST
因此,您将其作为java ClientREST
运行。它期待ClientREST.class
没有任何package
。
(错误的名称:clientrest / ClientREST)
嘿,班级试图告诉你它有一个package clientrest;
。您需要从包根目录运行它。转到一个文件夹,以便您在文件夹中,该文件夹又包含代表包的clientrest
文件夹,然后执行java clientrest.ClientREST
。
您应该不进入clientrest
包文件夹并执行java ClientREST
。
答案 1 :(得分:9)
我使用命令行java遇到了这个错误:
java -cp stuff/src/mypackage Test
其中Test.java
位于包mypackage
。
相反,您需要将类路径-cp
设置为基本文件夹,在本例中为src,然后将包前置于文件名。
所以最终会看起来像这样:
java -cp stuff/src mypackage.Test
答案 2 :(得分:4)
要进一步注意Garry的回复:类路径是类本身所在的基本目录。所以,如果类文件在这里 -
/home/person/javastuff/classes/package1/subpackage/javaThing.class
您需要引用类路径,如下所示:
/家庭/人/ javastuff /类
因此,要从命令行运行,完整命令将为 -
java -cp / home / person / javastuff / classes package1 / subpackage / javaThing
即。上面的模板是
java_executable -cp classpath the_class_itself_within_the_class_path
这就是我如何在没有环境中的类路径的情况下让我工作的方式
答案 3 :(得分:2)
类路径中可能存在生成类的位置。运行时运行时使用jvm arg -verbose并检查日志是否正在加载类。
输出还将为您提供有关加载clasess的位置的线索,确保您的类文件存在于该位置。
答案 4 :(得分:2)
尝试以下语法:
假设java文件驻留在此处:fm/src/com/gsd/FileName.java
所以你可以使用以下语法运行:
(将当前目录设为'fm')
java src.com.gsd.FileName