2012-02-09 1 views
0

java.lang.NoClassDefFoundErrorRunnig 항아리에 의존 자바 클래스 파일

나는 두 개의 jar 파일에 의존하는 자바 프로그램이 있습니다. 나는 명령을 사용하여 프로그램을 컴파일한다 :

javac -classpath jar1.jar:jar2.jar myprog.java 성공적으로 컴파일한다.

그러나 명령을 사용하여 프로그램을 실행하려고 시도하면 java -cp jar1.jar:jar2.jar myprogjava.lang.NoClassDefFoundError이됩니다. 제발 도와주세요, 내가 어디가 잘못 됐니?

우분투 10.04를 사용하고 있습니다.

실제 오류 : SelectionTask이 성공적으로 컴파일 후 생성 된 내 클래스 파일입니다

Exception in thread "main" java.lang.NoClassDefFoundError: userapps/SelectionTask_classes/SelectionTask 
Caused by: java.lang.ClassNotFoundException: userapps.SelectionTask_classes.SelectionTask 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 
Could not find the main class: userapps/SelectionTask_classes/SelectionTask. Program will exit. 

.

+1

있습니까? 그렇지 않은 경우 해당 .jar 파일의 절대/상대 경로를 지정해야합니다. – eternaln00b

+0

예, 두 항아리의 절대 경로를 지정했습니다 ..! 내가 실행하고 실제 명령은 다음과 같습니다 자바 -cp의 하둡 - 0.20.1-core.jar를 : lib 디렉토리/hadoopdb.jar userapps/SelectionTask_classes/SelectionTask –

+0

...이 링크는 당신에게 몇 가지 아이디어를 줄 수도있을 수 있습니다 HTTP : //javarevisited.blogspot.in/2011/06/noclassdeffounderror-exception-in.html –

답변

1

현재 디렉토리가 클래스 경로에도 있는지 확인하십시오. 으로 실행 해보십시오 :

java -cp .:jar1.jar:jar2.jar myprog 

를 컴파일 된 클래스 파일 myprog.class이 현재 디렉토리에있는 경우.

(이는 프로그램이 패키지에 들어 있지 않은 것으로 가정합니다.)

+0

같은 오류가 발생했습니다. 내 클래스 파일의 전체 경로를 지정합니다. java -cp hadoop-0.20.1-core.jar : lib/hadoopdb.jar userapps/SelectionTask_classes/SelectionTask.class. 그러나 classpath에 현재 디렉토리를 추가하는 것은 쓸모가 없었다. –

+0

@AbhishekSagar 위에 게시 된 명령 행에서 클래스 패스에 현재 디렉토리'.'를 추가하는 것을 보지 못했습니다. – Jesper

0

컴파일 된 Java 프로그램 (* .class) 파일이있는 디렉토리를 추가해야합니다. 그것은 현재 디렉토리에 있다면 당신은 다음과 같이 실행할 수있다 (통지 현재 작업 디렉토리를 의미하는 ".") : 오류에

java -cp .:jar1.jar:jar2.jar myprog 
+0

java -cp userapps/SelectionTask_classes : hadoop-0.20.1-core.jar : lib/hadoopdb.jar userapps/SelectionTask_classes/SelectionTask.class 여기서 userapps/SelectionTask_classes - 내 클래스 파일이있는 디렉토리입니다. 여전히 같은 오류입니다. –

+0

@AbhishekSagar, 맞습니다. "java"명령과 명령 행 매개 변수에 대한 문서를보십시오. 실제 클래스 파일의 경로가 아닌 JAR 파일의 이름과 CLASS 파일의 DIRECTORY를 반드시 지정해야합니다. – eternaln00b

+0

귀하의 명령이 다시 작동하지 않습니다! 거기에 dir이 지정되었지만 터미널에서 Java 사용이 표시됩니다. 내가 시도 : 자바 -cp 하둡 - 0.20.1-core.jar를 : lib 디렉토리/hadoopdb.jar : userapps/SelectionTask_classes/userapps/SelectionTask_classes/ (. 내가 클래스 파일의 이름 만 같은 오류를 제거) –

0

봐, 그것은 "userapps.SelectionTask_classes.SelectionTask을 찾을 수 없다는 불평 ", 이는 클래스 경로의 마지막 항목이 올바르게 지정되지 않았 음을 암시합니다. 이제, 가정 사용자가 지정한 JAR 파일은 다음 디렉토리 구조에 있다고 :

./hadoop-0.20.1-core.jar

./lib/hadoopdb.jar

./userapps은/SelectionTask_classes/

당신은 실행됩니다 : 컴파일 된 클래스/실행 파일과 같은 디렉토리에있는 jar 파일은

java -cp hadoop-0.20.1-core.jar:lib/hadoopdb.jar:userapps/SelectionTask_classes/ myprog 
+0

당신의 명령을 시도한 결과 다음과 같습니다 : 사용법 : java [-options] class [args ...] ... 그리고 자바 옵션을 사용하는 전체 매뉴얼. –

+0

java -cp hadoop-0.20.1-core.jar : lib/hadoopdb.jar : userapps/SelectionTask_classes/userapps/SelectionTask_classes/SelectionTask.class –

+0

클래스 파일의 전체 경로를 지정하지 마십시오. 반복적으로 언급했듯이 JAR 파일의 전체 경로 만 지정하십시오. CLASS 파일의 경우, 클래스 파일을 포함하는 디렉토리 만 지정하면됩니다. 따라서 위의 명령에서 마지막 항목은 필요하지 않습니다. – eternaln00b