2010-09-11 321 views
19

我對java的使用經驗不足,這讓我瘋狂。我寫了一個java程序FileManagement,我需要從命令行運行它。從命令行運行Java程序Linux

我可以在命令行用javac FileManagement/*.java編譯它,這將創建該文件夾中的所有類,但是當我嘗試java FileManagement.Main它說:

Exception in thread "main" java.lang.NoClassDefFoundError: FileManagement/Main

的事情是,我已經在嘗試相同的過程遠程計算機,它工作正常。這不是我的工作。

+0

http://www.skylit.com/javamethods/ faqs/javaindos.html爲初學者提供了一個很好的介紹。 – Pramod 2013-06-20 08:00:47

+0

@Pramod。該鏈接是爲了儘管... – Larry 2014-09-16 08:19:58

回答

20

如果您Main類是在一個名爲FileManagement包,然後嘗試:

java -cp . FileManagement.Main 

FileManagement文件夾的父文件夾。

如果您Main類不在包(默認包),那麼CDFileManagement文件夾,並嘗試:

java -cp . Main 

有關CLASSPATH以及如何JRE查找類的更多信息:

+0

工作!非常感謝。解決問題 – Altober 2010-09-11 19:01:12

+0

@Altober,很高興聽到這一點。我鼓勵你閱讀一下關於類路徑的內容,以便你知道爲什麼它不起作用。 – 2010-09-11 19:03:14

+0

很感謝您的時間 – Altober 2010-09-11 19:04:13

1

你班上的軟件包名稱是什麼?如果沒有包名稱,那麼最有可能的解決方案是:

java -cp FileManagement Main 
+0

感謝您的時間巴特K給出了相同的解決方案,它的工作。再次感謝Thomas – Altober 2010-09-11 19:05:46

+1

如果主類名爲「Main」(無包),並且該類僅在名爲「FileManagement」的目錄中。與cd FileManagement相同; java cp。主對話 – 2010-09-11 20:20:08

+0

啊,對不起,您已將'FileManagement'添加到類路徑中。我以爲你試着執行'FileManagement'並給'Main'作爲命令行參數。 – 2010-09-11 20:55:32

5

讓我們來了解它的語法。

  1. 如果類文件存在於當前目錄中。

    java -cp。文件名

  2. 如果類文件存在於目錄中。轉到父目錄並在cmd下面輸入。

    java -cp。 dir1.dir2.dir3.fileName

  3. 如果外部罐的依賴的話,

    java命令:./ jarName1:./ jarName2文件名

    希望這有助於。

1

(這是KISS答案。)

比方說,你有幾個。在當前目錄中的java文件:

$ ls -1 *.java 
javaFileName1.java 
javaFileName2.java 

比方說,他們每個人都有一個main()方法(因此他們的方案,而不是庫),然後對它們進行編譯做:

javac *.java -d . 

這會產生如很多子文件夾都與.java文件關聯的「包」有關。在我的情況下內同一包名packageName下,所以用這個名字僅生成一個文件夾中所有的java文件,所以執行它們:

java -cp . packageName.javaFileName1 
java -cp . packageName.javaFileName2