2011-09-22 100 views
39

我編寫了一個Java程序,使用Netbeans7.0.1測試REST風格的Web服務,它在那裏工作的很好。現在我寫的build.xml文件編譯的代碼,當我嘗試運行生成的.class文件,我總是得到這個異常:NoClassDefFoundError:錯誤的名稱

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

你的類路徑是關閉的目錄,你可能想發佈您的Ant腳本,或者至少它的相關部分。 –

回答

87

Exception in thread "main" java.lang.NoClassDefFoundError: ClientREST

所以,你跑它作爲java ClientREST。它期望ClientREST.class沒有任何package


(wrong name: clientrest/ClientREST)

嘿,該類想告訴你,它有一個package clientrest;。您需要從軟件包根目錄運行它。將一個文件夾放到文件夾中,該文件夾中包含表示軟件包的clientrest文件夾,然後執行java clientrest.ClientREST

你應該不是走進clientrest包文件夾內並執行java ClientREST

+17

1年後,這只是爲我節省了一大堆時間/精力。我愛SE。 – Joe

+1

Yup同樣在這裏...我已經看到在問題中提出的方式中使用的java命令,但是,我必須配置什麼才能工作? –

+0

@Balusc你是我的超級英雄! – xyz

1

可能您在類中生成類的位置不存在於類路徑中。運行時使用jvm arg -verbose,並檢查日誌是否正在加載類。

輸出還會告訴您線索從哪裏加載的位置,確保您的班級文件存在於該位置。

+1

檢查異常消息。他把它作爲'ClientREST'運行,但是「錯誤的名字」消息說'clientrest/ClientREST'這意味着這個類實際上在'clientrest'包中,因此應該作爲'clientrest.ClientREST'運行。 – BalusC

6

我遇到使用命令行Java這樣的錯誤:其中Test.java駐留在包mypackage

java -cp stuff/src/mypackage Test

相反,您需要將類路徑-cp設置爲基礎文件夾(在本例中爲src),然後將程序包預先添加到文件名中。

所以它最終會看起來像這樣:

java -cp stuff/src mypackage.Test

2

進一步注意到在加里的答覆:類路徑是類本身所在的基本目錄。因此,如果類文件就在這裏 -

/home/person/javastuff/classes/package1/subpackage/javaThing.class

您需要如下引用類路徑:

/家/人/ javastuff /班

所以從從命令行運行,完整的命令是 -

java命令的/ home /人/ javastuff /班包1 /分裝/ javaThing

即對於上面的模板是

java_executable -cp類路徑the_class_itself_within_the_class_path

那怎麼我終於得到了我,而無需在環境中的類路徑

1

嘗試下面的語法工作:

假設java文件駐留在這裏:fm/src/com/gsd/FileName.java

因此,您可以使用以下語法運行:

(使當前目錄爲「FM」)

java src.com.gsd.FileName

相關問題