2014-09-26 70 views
0

我的文件夾c:\users\owner\desktop\test包含兩個文件:opencsv-2.3.jarTest.jar從cmd編譯javac時NoClassDefFoundError?

這裏是Test.jar的

import java.io.FileReader; 
import java.io.IOException; 
import au.com.bytecode.opencsv.CSVReader; 

public class Test { 

    public static void main(String[] args) throws IOException { 

    CSVReader reader = new CSVReader(
     new FileReader("C:\\Users\\owner\\Desktop\\test.csv")); 
    String[] newLine; 
    while ((newLine = reader.readNext()) != null) { 
     System.out.println(newLine[0]); 
    } 
    } 
} 

我試圖從CMD運行該代碼如下

cd c:\users\owner\desktop\test\ 
javac -cp "c:\users\owner\desktop\test\opencsv-2.3.jar;" Test.java 

它編譯好和並且創建了Test.class。但是,當我嘗試運行它,它拋出一個錯誤NoClassDefFoundError

java Test 

我擡頭類似的問題在網上,但似乎他們大多有一個問題,因爲他們從CMD運行時,它沒有指定package名。我沒有任何包裹(default)。爲什麼我得到這個錯誤?

+0

給你包的版本 – StackFlowed 2014-09-26 15:39:45

回答

1

你必須給輸入你的classpath與Java一起輸入的命令:

java -classpath .;c:\users\owner\desktop\test\opencsv-2.3.jar; Test 

,或者更緊湊的版本:

java -cp .;c:\users\owner\desktop\test\opencsv-2.3.jar; Test 

而且不要忘記的 '.' (常見的新手錯誤,通常是令人頭痛的問題),因爲它聲明你正在將當前工作目錄包含到classpath! (Windows)here(Unix)。

+0

謝謝。它工作完美。但是我沒有包含'.',它仍然可以工作'java -cp「c:\ users \ owner \ desktop \ test \ opencsv-2.3.jar;」測試'爲什麼我需要'.',如果它沒有它的話? – Buras 2014-09-26 15:43:56

+0

可能因爲您的應用程序未包含在程序包/名稱空間中。無論如何,相信我,只要每次*包括它*以避免頭痛... – 2014-09-26 15:46:01

1

執行像這樣

java -cp .;pathOfyourjar className // for windows 

java -cp .:pathOfyourjar className // for linux-like environment