2012-09-11 3 views
1

내 프로젝트의 JAR 파일을 실행 한 후 NoClassDefFoundError가 표시됩니다. Eclipse 디버깅은 정상적으로 작동하지만 JDK 1.7을 설치 한 이후 Windows 명령 java -jar myproject.jar을 사용할 때마다이 오류가 발생합니다.Java 7로 업데이트 한 후 NoClassDefFoundError

Java 1.6을 사용하여 잘 작동했습니다.

여기서 오류 로그의 :

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Layout 
at program.Main.main(Main.java:20) 
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Layout 
at java.net.URLClassLoader$1.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
... 1 more 

내가 그것에 대해 검색 좀 있지만, 올바른 해결책을 찾을 수 없습니다.

이미 무슨 짓을 : 자바 1.7 -uninstall의 log4j에 하나의 참조 -create 빈 프로젝트 (그것에서 자바 1.7을 제거한 후) 대신에 다른 컴퓨터의 클래스 경로 꼬 시러 다니구 -check 를 1.6를 설치

<?xml version="1.0" encoding="UTF-8"?> 
<classpath> 
<classpathentry kind="src" path="src"/> 
<classpathentry kind="con"path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/> 
<classpathentry kind="lib" path="lib/RXTXcomm.jar"/> 
<classpathentry kind="lib" path="lib/log4j-1.2.15.jar"/> 
<classpathentry kind="output" path="bin"/> 
</classpath> 

당신은 어떻게해야 다른 어떤 생각을 가지고 있습니까 : 라이브러리 => 같은 문제가 여기

그리고는 클래스 경로 파일입니까?

감사합니다,

닐스

편집 : 내가 "실행 가능한 JAR"대신 간단한 'JAR'로 프로젝트를 내보낼 경우, 프로그램은하지만 (내가 사용하고 다른 라이브러리를 사용하지 시작 RxtxComm).

java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver 

EDIT2 : 여기에 내가 얻을 로그의 내가 마지막으로 윈도우/system32 폴더에 rxtxSerial.dll으로 바꾸어 마지막 문제를 해결. 그래도 프로젝트를 JAR 파일로 내보내고 왜 지금 dll 파일을 사용해야하는지 왜 더 이상 작동하지 않는지 이해할 수 없습니다.

+1

당신이이 질문을 보았다 [항아리 여기] main.java http://stackoverflow.com/questions/502960/eclipse :

  • 은 클래스 패스에 항아리를 추가 -how-to-build-an-executable-jar-with-external-jar? – user1516873

  • +0

    단순한 JAR 파일 대신 runnable JAR 파일로 내보내는 것으로 작동합니다. 다른 오류가 발생하지만 프로그램이 시작되고 화면에 내용이 인쇄됩니다. –

    +0

    실행 가능한 JAR로 작업하게했습니다. 감사합니다 ;-) –

    답변

    2

    jar 파일을 실행할 때 log4j의 jar 파일이 클래스 경로에 있습니까?

    • 당신이 다른 사람 사이에 포함 된 CLASSPATH 시스템 변수를 가지고는, log4j에의 항아리가

    • 에 위치해 있습니다 wher 폴더 인수로 log4j에 항아리 폴더에 병

      을 시작할 때 이렇게 되었 : 하나 있는지 확인

      자바 -jar yourJar.jar -classpath C : \ myLog4JJarFolder

    UPDATE :

    Andrew Thompson의 설명에 따르면 -jar 인수를 사용하면 -classpath 인수가 쓸모 없게됩니다 (무시됩니다). 당신은 또한 출시 인수로 메인 클래스의 완전한 이름을 사용할 필요가 명령 줄에서 클래스 경로를 지정 할 수 있도록 :

    내가 체크하는 몇 가지, 위뿐만 아니라
    java -classpath "c:\dir1;c:\dir2" package.subPackage.MainClass 
    
    +1

    'java -jar yourJar.jar -classpath c : \ myLog4JJarFolder''-jar' 옵션을 지정하면'-classpath' 옵션이 무시됩니다. –

    +0

    Doh, 네 말이 맞아, 나는 내 anwer을 업데이 트뿐만 아니라 나 같은 다른 천재를위한 원본을 남겨주세요. –

    +0

    당신이 말한대로 했어요. 나는 프로젝트의 bin 폴더에 들어가서 클래스를 시작했다 : java -classpath "C : \ Documents and Settings \ Nils \ workspace \ Transcodeur2.1 \ src> java -classpath"C : \ Program Files \ Java \ jdk1.6.0_34 \ lib \ log4j-1.2.15.jar "fr.sncf.transcodeur.Main 그러나 나는 이것을 얻습니다 : 스레드"main "의 예외 java.lang.NoClassDefFoundError : fr/sncf/transcodeur/Main 또한 ".class"파일 확장명 (..Main.class)은 변경되지 않았습니다. Btw, 콘솔을 사용하는 것이 편안하지 않습니다. (IDE로 작업하면됩니다!) –

    0

    :

    • 실행 파일 JAR에 모든 자원을 패키지했는지 확인하십시오.항아리를 추출하고 확인하기 만하면됩니다.

      자바 -cp

    +0

    JAR 파일을 검사했는데 모든 라이브러리 (lib 디렉토리와 .class 파일이있는 "lib"폴더)에 있습니다. java -cp 명령을 실행하면 오류가 발생합니다 : 스레드에서 예외가 발생했습니다. "main"java.lang .NoClassDefFoundError : Transcodeur2/1 \ src \ fr \ sncf \ transcodeur \ Main/java 발생 원인 : java.lang.ClassNotFoundException : Transcodeur2.1 \ src \ fr \ sncf \ transcodeur \ Main.java 경로가 올바르지 않아야합니다. 이후 복사/Windows 탐색기에서 붙여 넣기 –

    +0

    두 가지가 필요합니다. 1 : java 명령을 실행중인 현재 작업 디렉토리 및 2 : 입력중인 명령 (예 : java -cp /src/main/lib/myjar.jar main.java) –

    관련 문제