2014-09-26 71 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