java - 해결 - 이클립스 unsupportedclassversionerror




java.lang.UnsupportedClassVersionError를 수정하는 방법:지원되지 않는 major.minor 버전 (20)

어떻게 수정해야합니까?

이 오류는 클래스 코드를 실행하는 데 사용되는 JRE가 사용 된 Java 버전을 인식하지 못함을 의미합니다. 일반적으로 클래스 파일을 생성 한 Java 버전 (즉, 컴파일 된 파일)이 최신 버전이기 때문입니다.

이 문제를 해결하려면

a) Java 소스를 실행하는 데 사용되는 것과 동일하거나 이전 버전의 Java 컴파일러로 Java 소스를 컴파일하십시오. 즉 적절한 JDK를 설치하십시오.

b) 최신 버전의 Java 컴파일러로 Java 소스를 컴파일하지만 호환 모드에 있습니다. 즉, -target 매개 변수를 사용하십시오.

c) 클래스를 컴파일하는 데 사용 된 JDK와 동일하거나 더 새로운 버전 인 JRE에서 컴파일 된 클래스를 실행하십시오.

컴파일러에서 javac -version 을 사용하고 런타임에서 java -version 을 사용하여 현재 사용중인 버전을 확인할 수 있습니다.

JDK를 설치하고 PATH 변수를 JRE 대신 JDK에 설치해야합니까?

컴파일을 위해서 확실히 원하는 특정 JDK를 설치하고 구성하십시오.

런타임에서는 JDK 또는 독립 실행 형 JRE와 함께 제공되는 버전을 사용할 수 있지만 올바른 버전을 설치했는지, 그리고 PATH를 구성하여 놀라움이 없는지 확인하십시오.

JRE 또는 JDK의 PATH 변수의 차이점은 무엇입니까?

PATH 환경 변수는 명령 쉘이 입력하는 명령을 찾을 위치를 알려줍니다. java 를 입력하면 명령 쉘 인터프리터는 PATH 변수에 지정된 모든 위치를 왼쪽에서 오른쪽으로 검색하여 실행 가능한 java 런타임을 찾습니다. 여러 버전의 Java가 설치되어있는 경우 (예 : PATH 변수에 지정된 여러 위치에 java 실행 파일이 있으면 왼쪽에서 오른쪽으로 갈 때 처음으로 실행되는 것이 실행됩니다.

컴파일러 명령은 javac 이며 JDK와 함께 제공됩니다. 런타임 명령은 java 이며 JDK와 함께 제공되며 JRE에 있습니다.

한 버전의 javac 설치되어 있고 (51.0 = Java 7) javac 설치되어 있고 동일한 버전의 java 설치되어 있지만 다른 이전 버전의 java 가 PATH의 앞부분에 나타나기 때문에 이전 버전의 java 가 대신 호출됩니다. 당신이 기대하는 것.

Notepad++ 을 사용하려고합니다. 올인원 도구로 편집, 실행, 컴파일하는 등의 작업을합니다.

JRE 설치되어 있고 ... / bin 디렉토리에 경로 변수를 설정했습니다.

메모장 ++에서 "Hello world"를 실행할 때 다음 메시지가 표시됩니다.

java.lang.UnsupportedClassVersionError: test_hello_world :
 Unsupported major.minor version 51.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
       .........................................

나는 여기서 문제가 버전에 관한 것이라고 생각한다. Java의 일부 버전이 오래되었거나 너무 새 것일 수 있습니다.

  1. 어떻게 수정해야합니까?
  2. JDK를 설치하고 경로 변수를 JRE 대신 JDK에 설치해야합니까?
  3. JRE 또는 JDK의 PATH 변수의 차이점은 무엇입니까?

1.7로 작성된 프로젝트에서 같은 문제가 발생하여 1.6에서 실행하려고했습니다.

Eclipse 내 솔루션 :

  • 프로젝트 속성 -> Java 빌드 경로 -> 라이브러리를 마우스 오른쪽 버튼으로 클릭하십시오.

  • JRE 시스템 라이브러리를 선택하고 오른쪽의 편집 을 클릭하고 대상 JRE를 선택하십시오.

  • 이제 왼쪽의 Java Compiler 로 이동하여 컴파일러 준수 수준 을 대상으로 변경합니다.

그것은 나를 위해 일했다.


Eclipse에서는 메뉴 -> 환경 설정 -> Java -> 컴파일러 로 이동 한 다음 "컴파일러 준수 레벨"을 1.6으로 설정했습니다.


Eclipse의 메뉴 -> 환경 설정 -> Java -> 컴파일러 에서도 "프로젝트 별 설정 구성"을 선택하십시오.

같은 Java 버전에서 오류가 발생하면 프로젝트의 폴더를 수동으로 삭제하십시오. 그런 다음 Eclipse를 다시 시작하십시오.


Java 7에서 일부 JAR 라이브러리를 컴파일 할 수 있으며 Java Runtime으로 Java 6 만 사용할 수 있습니다. 새로운 라이브러리가 생길 수도 있습니다.


Java 파일은 실행하려는 버전 (런타임 버전이 낮은 버전)과 다른 버전 (상위 컴파일러 버전)으로 컴파일됩니다.

하위 버전으로 컴파일 된 클래스는 이후 버전에서 실행될 것으로 예상됩니다. 그러나 반대 (더 높은 컴파일러 버전으로 컴파일하고 더 낮은 런타임 버전으로 실행하려고 시도하는 경우)는 때로는 가능하지 않습니다.

따라서 프로그램을 실행하려고 할 때이 오류가 표시됩니다. 지원되지 않는 major.minor 버전 xx

Q : Java 7에서 응용 프로그램을 만들었지 만 사용자가 실행하려고하면 지원되지 않는 major.minor 버전 51.0 오류가 발생합니다. 이것이 의미하는 바는 무엇이며 그것에 대해 무엇을 할 수 있습니까?

A : Java 7에서 javac을 사용하여 응용 프로그램을 컴파일하면 결과 클래스 파일의 버전 번호는 51.0이됩니다. 7 이전의 Java 버전은이 번호를 인식하지 못하므로 사용자는 응용 프로그램을 실행하기 전에 Java 7로 업그레이드해야합니다. Java 7 API를 사용하지 않는 경우 javac -target 1.6을 사용하여 응용 프로그램을 컴파일하여 1.6 호환 클래스 파일을 만들 수 있습니다. webstart를 사용하여 응용 프로그램을 배포하는 경우 필요한 최소 버전을 지정할 수 있습니다. 자세한 것은, 「Java Web Start」및 「JNLP」의 문서를 참조 해주세요. 현재 데스크톱에 Java 6을 사용하는 최종 사용자를 위해 자동 업데이트를 Java 7로 트리거하면이 문제는 해결됩니다. 이것에 대한 타임 라인은 아직 결정되지 않았으므로 개발자가 먼저 코드와 JDK 7 사이의 문제를 해결할 시간을 갖기를 원합니다.

(출처 : oracle.com .)


Oh Mac OS XI는 JAVA_HOME 변수를 설정하여이 문제를 해결할 수있었습니다.

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home

가장 많이 발생하는 문제는 JAVA_HOME 변수를 잘못 JAVA_HOME 변수는 여러 Java Runtime Environment가 설치된 경우 올바른 Java Development Kit 라이브러리를 가리켜 야합니다.

SDK Java 폴더의 위치를 ​​찾으려면 다음 명령을 실행하십시오.

jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));'

데비안 / 우분투

설치 한 java (openjdk)를 확인하려면 다음을 통해 확인하십시오.

dpkg -l "openjdk*" | grep ^i

또는:

update-java-alternatives -l

변경하려면 다음을 사용하십시오.

update-alternatives --config java

필요한 경우 sudo 접두사로 사용하십시오.

대체 자바 버전을 선택하십시오.

또는 설치할 수 있는지 확인하십시오.

apt-cache search ^openjdk

필요한 경우 sudo 접두사로 사용하십시오.

다음과 같이 설치할 수 있습니다.

apt-get install openjdk-7-jre

필요한 경우 sudo 접두사로 사용하십시오.

Fedora, Oracle Linux, Red Hat

다음을 통해 적절한 패키지를 설치 / 업그레이드하십시오 :

yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel

java-1.7.0-openjdk 패키지에는 JRE (Java Runtime Environment) 만 포함되어 있습니다. Java 프로그램을 개발하려면 java-1.7.0-openjdk-devel 패키지를 설치하십시오.

BSD

openjdk7 이라는 FreeBSD 포트 콜렉션에는 아마도 재구성이 필요한 OpenJDK 7 패키지가 있습니다.

참조 : OpenJDK wiki 페이지 .

Windows

Oracle 사이트 에서 적절한 Java SE Development Kit 라이브러리를 설치하거나 설치하십시오.

젠킨스

Jenkins에서이 문제가 발생하면 다음을 참조하십시오.

그러나 update-alternatives 올바른 버전의 Java (newer)를 update-alternatives 하면 효과가 있습니다.


나는 그것을 해결했다. 나는 달렸다 :

JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386

오류는 오해의 소지가 있습니다. Unsupported major.minor version 51.0 . 이는 버전 51 (Java 7)이 지원되지 않는다는 인상을줍니다. Java 6을 사용해야합니다.

오류는 다음과 같아야합니다.

현재 Java 버전 인 50은 지원되지 않습니다. Java 버전 7 (51 : 0 이상)을 대신 사용하십시오 .`


나는 단위 테스트를 실행하기 위해 커맨드 라인에서 프로젝트에 Maven 컴파일을 실행해야한다는 문제가있었습니다. 테스트 클래스를 변경하고 Eclipse가 자동으로 다시 컴파일하도록하면 "지원되지 않는 major.minor 버전 51.0"오류가 발생합니다.

JDK6과 JDK7이 모두 설치되어 있지만 JRE 설정은 모두 pom과 Eclipse의 프로젝트 속성 페이지에서 모두 1.6을 가리키고 있습니다. Maven Update Project 및 / 또는 새로 고침을하지 않아도이 문제를 해결할 수 있습니다.

마지막으로 프로젝트를 닫고 다시 열어 보았습니다.이 문제가 해결 된 것 같습니다! HTH


더 낮은 버전의 JDK / JRE 에서 컴파일 및 실행을 위해 JDK의 상위 버전을 사용했습니다.

이를 확인하려면 버전 정보를 확인하십시오.

javac -version

java -version

그들은 다를 것이고 javac는 더 높은 버전 번호를 가질 것이다.

이 문제를 해결하려면 JDK 버전의 java를 사용하거나 JRE / JDK가 더 최신 버전인지 확인하십시오.

which javac 가 위치를 알려줍니다 (예 : /usr/bin/javac . /usr/bin/java <program> 사용하여 직접 실행하십시오.

또는 영구 변수로 환경 변수를 설정할 수 있습니다.


먼저 몇 가지 기본 사항을 알아 보겠습니다.

JRE는 NetBeans / Eclipse / standalone의 구성 요소로서 라이브러리, JVM, Java 플러그인 및 Java 웹 시작 기능을 제공합니다. 컴파일러 나 디버거는 제공하지 않습니다.

JDK는 컴파일러 및 디버거와 함께 JRE의 상위 집합입니다.

따라서 JDK 대신 JRE로 기본 라이브러리가 있으면 물건을 가져 오는 데는 시간이 걸리지 만 컴파일되지는 않습니다.

대신 경로를 JDK로 설정하십시오 (NetBeans를 사용하고 netbeans / etc / netbeans.conf의 netbeans.conf를 사용하여 설정하고 경로를 변경합니다).


오늘이 오류 메시지는 Ubuntu 12.04.2 LTS (Precise Pangolin)의 Tomcat 7에 나타났습니다.

/var/log/tomcat7/localhost.2014-04-08.log :
2014 년 4 월 8 일 9:00:55 AM org.apache.catalina.core.StandardContext filterStart
심각 : 필터 struts2 시작 예외
java.lang.UnsupportedClassVersionError : controller / ReqAccept : 지원되지 않는 major.minor 버전 51.0 (클래스 controller.ReqAccept을로드 할 수 없음)

Struts 애플리케이션은 Java 7로 컴파일됩니다.

누군가 Tomcat 7을 다시 시작하기 위해 "서비스 바람둥이 [stop / start]"를 사용합니다.

$ ps -ef | grep java
tomcat7 31783 1 32 20:13? 00:00:03 / usr / lib / jvm / default-java / bin / java ...
$ / usr / lib / jvm / default-java / bin / java -version
자바 버전 "1.6.0_27"

"지원되지 않는 major.minor 버전 51.0"오류가 발생합니다.

"/etc/init.d/tomcat7 [stop / start]"를 사용하여 Tomcat 7을 다시 시작하면 문제가 해결되었습니다.

$ ps -ef | grep java
tomcat7 31886 1 80 20:24? 00:00:10 /usr/local/java/jdk1.7.0_15/bin/java
$ /usr/local/java/jdk1.7.0_15/bin/java -version
자바 버전 "1.7.0_15"


이 문제는 Java 6로 돌아가서 이전에 Java 7로 컴파일 된 클래스를 실행하려고 시도했을 때 발생했습니다. 환경 설정> java> 컴파일러 -> 준수 수준을 1.6으로 설정하고 결정적으로 "프로젝트 설정 구성"을 사용했습니다.


이것을 바탕으로 ...

J2SE 8 = 52
J2SE 7 = 51
J2SE 6.0 = 50
J2SE 5.0 = 49
JDK 1.4 = 48
JDK 1.3 = 47
JDK 1.2 = 46
JDK 1.1 = 45

Eclipse에서 패키지 탐색기의 프로젝트를 마우스 오른쪽 단추로 클릭하십시오.

빌드 경로 -> 빌드 경로 구성

아래에:

Java 빌드 경로 -> 라이브러리 -> 라이브러리 추가 -> JRE 시스템 라이브러리 -> 설치된 JRE -> 검색을 누르 십시오 .

검색이 완료된 후 사용할 수있는 목록에서 라이브러리를 선택하여 필수 JRE를 추가하십시오.


제 경우에는 문제가 서버 런타임 구성에있었습니다.

JRE가 필요한 버전인지 확인하십시오.

프로젝트는 버전 1.7이고 서버 JRE는 1.6 버전으로 설정되었으며 적절한 Java 버전으로 변경된 후 정상적으로 시작되었습니다.


표시된 버전 번호는 클래스 파일이 호환되는 JRE의 버전을 설명합니다.

보고 된 주요 번호는 다음과 같습니다.

Java SE 11 = 55,
Java SE 10 = 54,
Java SE 9 = 53,
Java SE 8 = 52,
Java SE 7 = 51,
Java SE 6.0 = 50,
Java SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45

(출처 : Wikipedia )

실제 문제점을 수정하려면 최신 버전의 Java JRE로 Java 코드를 실행하거나 Java 컴파일러에 target 매개 변수를 지정하여 컴파일러가 이전 Java 버전과 호환 가능한 코드를 작성하도록 지시해야합니다.

예를 들어 Java 1.4와 호환되는 클래스 파일을 생성하려면 다음 명령 줄을 사용하십시오.

javac -target 1.4 HelloWorld.java

최신 버전의 Java 컴파일러에서는 설정되지 않은 부트 스트랩 클래스 경로에 대한 경고를받을 수 있습니다. 이 오류에 대한 자세한 내용은 블로그 게시물에서 제공됩니다. bootclasspath없이 이전 소스를 설정하는 새로운 javac 경고입니다 .


Maven 사용 Maven 문제가 발생하면 플러그인 Maven 컴파일러를 사용하여 코드를 크로스 컴파일 할 수 있습니다.

 <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
       .....

업데이트 : JDK 8을 사용하는 경우 sourcetarget1.8 설정하십시오.


java.lang.UnsupportedClassVersionError 컴파일 타임 동안 JDK가 높고 런타임 동안 JDK가 낮기 때문에 발생합니다.


  • JDK 7.0.55를 설치하고 JDK 7.0.55 용 Eclipse for Java를 설정하십시오.
  • 빌드 경로 JDK 7.0.55에서 구성하여 JDK 7.0.55로 프로젝트를 빌드하십시오.
  • Windows -> 환경 설정 -> Java -> 컴파일러 -> 1.7을 선택하여 JDK 7.0.55 용 Eclipse에서 컴파일러를 설정하십시오.






unsupported-class-version