2012-03-26 258 views
2

所以我在這裏有一個noob時刻,我從來沒有用過命令行來運行一個java程序,但我現在需要。我遇到的問題是,當我嘗試運行該程序時,出現ClassNotFoundException。我的課叫做OmadUpdate。我已經使用javac命令將OmadUpdate.java文件編譯到OmadUpdate.class中。我檢查了目錄,他們都肯定是有,但是當我運行java OmadUpdate命令,它給了我一個錯誤信息說從命令行運行Java程序

Exception in thread "main" java.lang.NoClassDefFoundError: OmadUpdate (wrong name:  org/openmetadata/main/OmadUpdate) 
...... 
...... 
Could not find the main class: OmadUpdate. Program will exit 

但其正確的,在目錄中。當我輸入目錄時,我有兩個OmadUpdate.class和OmadUpdate.java。我甚至嘗試使用「java org.openmetadata.main.OmadUpdate」,因爲它是它的包名。我很難過。感謝您的幫助。

+0

你能發佈你的源代碼文件嗎?這些文件是否在正確的文件夾層次結構中(即在稱爲「org」的文件夾內名爲「openmetadata」的文件夾內名爲「main」的文件夾中的OmadUpdate.java?是否在java源文件頂部使用「包」聲明? – zachelrath 2012-03-26 20:58:39

+0

另請參閱:http ://堆棧溢出。com/questions/502960/eclipse-how-to-build-an-executable-jar-with-external-jar – 2016-09-08 19:25:29

回答

7

你的類似乎已經在org.openmetadata.main包被宣佈。

爲了讓java正確加載類,它需要位於與包結構匹配的正確目錄結構中。

因此,org.openmetadata.main.OmadUpdate的類文件應位於目錄org\openmetadata\main中。

然後,當你運行java命令時,這個目錄結構的根目錄應該在類路徑上 - 一個簡單的例子,這意味着你的當前目錄應該是org\openmetadata\main的父目錄。

當運行java你需要指定使用期限不斜線的完整類名,即

java org.openmetadata.main.OmadUpdate 
+1

感謝大家如此快速的回答,但這是工作的人,-cp並沒有縫隙幫助,我所要做的只是java org.openmetadata.main.OmadUpdate。謝謝一堆! – decal 2012-03-27 01:40:19

0

推出與您的類路徑Java應用程序設置:

java -cp . org.openmetadata.main.OmadUpdate 
1

類名有自己的嵌套包名用句點分隔,而目錄使用斜線。賠率是好的,你試過java -cp . org/openmetadata/main/OmadUpdate的時候,你應該有(因爲你指定一個類名)試圖java -cp . org.openmetadata.main.OmadUpdate

注意,對於這個工作,你必須在目錄中運行它的正上方org子目錄。否則,classpath僞指令cp .將在錯誤的目錄中開始搜索。

4

你用javac編譯類之後,您將有以下目錄結構:

org/ 
    openmetadata/ 
    main/ 
     OmadUpdate.class 
     OmadUpdate.java 

確保你在組織的父目錄,然後運行

java -cp . org.openmetadata.main.OmadUpdate 
0

- cp。不會做任何我不認爲的事情。您必須確保在正確的目錄中調用java,這是第一個包名稱/文件夾的一部分(在您的案例中)

您需要使用完整的包和類名來運行它。