java.lang.UnsupportedClassVersionError : .class 파일의 버전 번호가 잘못 되었습니까?


140

소스에서 컴파일 해야하는 오픈 소스 라이브러리를 포함하면이 오류가 발생합니다. 이제 웹의 모든 제안은 코드가 한 버전으로 컴파일되어 다른 버전에서 실행되었다는 것을 나타냅니다 (이전 버전의 새로운 기능). 그러나 내 시스템에는 하나의 JRE 버전 만 있습니다. 내가 명령을 실행하면 :

$ javac -version
javac 1.5.0_18

$ java -version
java version "1.5.0_18"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_18-b02)
Java HotSpot(TM) Server VM (build 1.5.0_18-b02, mixed mode)

Java 라이브러리의 속성을 Eclipse에서 확인하면 얻을 수 있습니다. 1.5.0_18

따라서 클래스 자체 내부에서 다른 예외를 던지고 있다고 결론 지어야합니까 ?? 가능합니까?


2
클래스 경로에 먼저있을 수있는 라이브러리의 컴파일 된 버전이 있습니까?
Jeff Storey

좋은 생각이지만 아닙니다. 'find 사용하여 확인했습니다. -name '* .jar'| xargs는 JAR 폴더가있는 lib 폴더에서 찾습니다. 게다가 Eclipse가 CLASSPATH를 사용하지 않았다고 생각합니까? 다른 좋은 제안?
grmn.bob 1

jre src 코드를 다시 작성하려고 할 때 cmd 에서이 find -name '* .jar'명령을 사용하는 방법 ... 그리고이 cmd를 실행해야합니다 .... javalobby.org/java/forums /t103334.html ..... 내 jdk는 C : \ Program Files \ Java \ jdk1.6.0_31에 있습니다
Learner

답변:


185

나는 이와 같은 오류 메시지가 보통 옳다는 것을 배웠다. 그것이 아마도 (당신의 마음에) 오류 가보고 된 것과 같지 않을 때, 당신은 다른 지역에서 문제를 찾고 있습니다 ... 몇 시간 후에 원래의 오류 메시지가 실제로 옳았다는 것을 알 수 있습니다.

Eclipse를 사용하고 있기 때문에 Thilo가 올바른 것으로 생각합니다.이 메시지가 표시 될 가능성이 가장 높은 이유는 프로젝트 중 하나가 1.6 클래스를 컴파일하기 때문입니다. Eclipse에는 javac가 아닌 자체 컴파일러가 있고 1.6 클래스를 컴파일하려면 1.5 JRE 만 있으면되므로 시스템에 1.5 JRE 만 있는지는 중요하지 않습니다. 이상 할 수 있으며이를 허용하려면 설정을 선택 취소해야하지만 방금 관리했습니다.

해당 프로젝트의 경우 프로젝트 속성 (일반적으로 Alt + Enter), Java 컴파일러 섹션을 확인하십시오. 다음은 1.6을 컴파일하도록 구성되었지만 1.5 JRE 만있는 프로젝트의 이미지입니다.

여기에 이미지 설명을 입력하십시오


완전히 동의합니다 ... 그래서 제 의견으로는 정확하게 지적하는 방법에 대한 질문을했습니다. 나는 Eclipse 내부 클래스를 몰랐다. 라이브러리는 명령 행에서 'javac'로 컴파일되어 내 Eclipse 프로젝트에 통합되었습니다. 커맨드 라인에서 프로젝트를 컴파일하려고합니다. 과거에이 문제를 분명히 해결했으며 귀하의 제안은 환상적입니다.
grmn.bob

3
소스가있는 JDK가있는 경우 Eclipse에 중단 점을 추가하고로드하려고하는 클래스를 볼 수 있어야합니다. 가장 쉬운 방법은 아마도 UnsupportedClassVersionError 생성자에서 중단 점 (또는 Eclipse 예외 중단 점, 'J!'아이콘) 일 경우 어떻게 도달했는지 검사 할 수 있습니다.
Joshua McKinnon

확인. 건물에서 전문가를 찾았고 Eclipse를 내 명령 행과 동일한 JRE를 가리킬 수있었습니다. 그런 다음 1.6에 대해 다시 빌드하고 1.6에 대해 실행했으며 모두 작동합니다. 분명히, 나는 1.5가 아닌 것은 잘못되었습니다. 그는 어디를보아야하는지 보여주었습니다. 도움을 주셔서 감사합니다. 이제 다음 문제로 넘어갑니다. :)
grmn.bob

2
나는 같은 문제가 있었다. 내가 한 실수는 1.5 JRE 및 1.6 컴파일러를 사용하는 것이 었습니다. 지원되지 않는 클래스 버전 오류를 해결하지 못했습니다. 그래서 나는 일식에 1.6 JRE를 설치하고 1.6 컴파일러를 사용했습니다. 그런 다음 모든 것이 잘 작동하기 시작했습니다.
Vanchinathan Chandrasekaran

1
이 문제를 두 번째로 찾아서 검색하고이 답변을 찾은 것이 옳았 기 때문에 두 번째로 투표하고 싶습니다. > _ <
AlbeyAmakiir

9

완전한 "깨끗한"작업을 시도한 다음 Eclipse (Project-> Clean ...)에서 다시 빌드 했습니까?

명령 행에서 "javac"및 "java"로 바로 컴파일하고 실행할 수 있습니까? 제대로 작동합니까?

프로젝트를 마우스 오른쪽 버튼으로 클릭하고 "속성"으로 이동 한 다음 "자바 빌드 경로"로 이동하면 탭 아래에 의심스러운 항목이 있습니까? 이것은 본질적으로 CLASSPATH입니다.

Eclipse 환경 설정에서 "Java"섹션의 "Installed JREs"섹션을 다시 확인하여 원하는 것과 일치하는지 확인할 수 있습니다.

어딘가에 낡은 .class 파일이 있거나 사용중인 Java 버전에서 컴파일 타임 / 런타임 불일치가 발생합니다.


예 (완전 청소); 그것을 시도하지 않았습니다 (cmd 줄에서 프로젝트); 아마 / 아니오 (Iclipse "Java Build Path"에서 항목을 제거했습니다); 그렇게했습니다 (JRE-버전 #이있는 곳).
grmn.bob

5

Eclipse로 컴파일 했습니까? 다른 컴파일러 (javac 아님)를 사용합니다. 이 오류가 발생하지 않아야하지만 (모든 것이 올바르게 구성된 경우) 대신 javac로 컴파일하려고 시도 할 수 있습니다.

문제가 해결되면 Eclipse에 잘못된 컴파일러 설정이 있는지 확인하십시오. 특히 Java 5를 대상으로합니다.


그것이 제가 배우고있는 것입니다. 두 가지를 같은 방식으로 작성하려고합니다 (cmd 줄 및 / 또는 일식).
grmn.bob

1
감사합니다 Thilo, 오늘 Eclipse와 Java 및 클래스 버전에 대해 많은 것을 배웠습니다. 개미에 대해서도 조금 .
grmn.bob

2

나도 같은 오류가 발생했습니다. 그 이유는 Maven을 사용하여 프로젝트를 컴파일하고있었습니다. JDK7을 가리키는 JAVA_HOME이 있었으므로 컴파일에 Java 1.7이 사용되었으며 프로젝트를 실행할 때 JDK1.5를 사용했습니다. .classpath 파일에서 아래 항목을 변경하거나 스크린 샷에서와 같이 일식을 변경하면 문제가 해결되었습니다.

classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5

또는 식의 실행 구성을 다음과 같이 변경하십시오. 여기에 이미지 설명을 입력하십시오


1

또한 프로젝트에서 더 높은 버전의 Java 용으로 컴파일 된 jar 파일을 확인하십시오. 이들이 자신의 라이브러리 인 경우 대상 버전 속성을 javac로 변경하여이 문제를 해결할 수 있습니다.

<javac destdir="${classes.dir}"
            debug="on" classpathref="project.classpath" target="1.6">

0

이 일이 발생할 수있는 또 다른 시나리오는 호스트 이클립스에서 이클립스 인스턴스 (디버그 등의 경우)를 시작할 때입니다.이 경우 프로젝트의 클래스 경로에서 프로젝트 레벨 또는 JRE 라이브러리를 변경해도 도움이되지 않습니다. 중요한 것은 대상 Eclipse 환경을 시작하는 데 사용되는 JRE입니다.


0

항상 명백한 것도 점검하십시오. 실수로 서버의 추가 및 제거 작업에 대한 잘못된 리소스를 가져 왔을 때이 오류가 발생했습니다. 간과하기 쉽습니다.


0

프로젝트 폴더에서 프로젝트 특정 설정 파일 (Eclipse workspace / project folder / .settings /)을 삭제하면됩니다. 분명히 삭제 후 프로젝트를 정리하고 빌드해야합니다.


0

java 1.7을 사용하도록 프로젝트 변경 : 작동하려면 다음 단계를 수행하십시오.

  • 컴파일러 준수 수준 변경
  • 프로젝트 JRE / JDK를 같은 수준으로 변경하십시오 (제 경우 1.7)
  • 프로젝트에서 참조하는 모든 프로젝트에서 동일한 변경을 수행하십시오.
  • JRE / JDK (또는 동일한 레벨)를 사용하도록 실행 / 디버그 구성을 변경하십시오.

작동하지 않는?

  • 프로젝트 삭제 디렉토리
  • 깨끗한
  • 재건

그래도 작동이 안되는?

프로젝트 디렉토리에서 편집하십시오. .settings / org.eclipse.jdt.core.prefs> 대상 레벨이 적용되었는지 확인하십시오

행운을 빕니다!


0

서버에 필요한 jre를 변경 하여이 문제를 해결했습니다 (제 경우에는 바람둥이입니다). Eclipse의 서버 탭에서 서버를 두 번 클릭하고 (서버 구성을 위해 페이지를 열려면) 런타임 환경을 클릭 한 후 JRE 필요를 변경하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.