etc./StackOverFlow

java.lang.UnsupportedClassVersionError 수정 방법: 지원되지 않는 major.minor 버전

청렴결백한 만능 재주꾼 2022. 1. 22. 07:11
반응형

질문자 :ERJAN


메모장 ++ 를 올인원 도구 편집, 실행, 컴파일 등으로 사용하려고합니다.

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 변수의 차이점은 무엇입니까?


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

보고된 주요 수치는 다음과 같습니다.

 Java SE 17 = 61, Java SE 16 = 60, Java SE 15 = 59, Java SE 14 = 58, Java SE 13 = 57, Java SE 12 = 56, 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

(출처: 위키피디아 )

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

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

 javac -target 1.4 HelloWorld.java

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


Juha Palomäki

java.lang.UnsupportedClassVersionError 컴파일 시간 동안 더 높은 JDK와 런타임 동안 더 낮은 JDK 때문에 발생합니다.


Vivek Kumar Ray

Eclipse에서 Window -> Preferences -> Java -> Compiler 메뉴 명령으로 이동한 다음 "Compiler Compliance level"을 1.6으로 설정했습니다.


Cacovsky

걱정하지 마세요. 해결했습니다.

실제로는 간단합니다. 동일한 버전으로 JRE/JDK를 모두 설치해야 합니다.

JRE 6 -> JDK 6

JRE 7 -> JDK 7

등등.


ERJAN

이 오류는 설치한 것보다 최신 버전의 Java로 컴파일된 Java "클래스" 파일을 로드하려고 함을 의미합니다.

예를 들어, .class 파일이 JDK 7용으로 컴파일되었을 수 있고 JDK 6으로 실행하려고 합니다.

따라서 해결책은 다음 중 하나입니다.

  • Java 런타임을 업그레이드하거나
  • 소스가 있는 경우 로컬 Java 컴파일러(있는 경우)를 사용하여 클래스를 다시 컴파일하십시오.

    javac 파일 이름.java

개발자의 경우 이것은 다른 개발자가 .class 파일을 체크인하고 그들이 당신보다 최신 버전의 Java를 가지고 있는 경우 발생할 수 있습니다!


Brad Parks

코드가 컴파일된 버전을 지원하지 않는 Java 버전으로 프로그램을 실행하려고 합니다. 따라서 기본적으로 코드를 더 높은 버전으로 컴파일하고 더 낮은 버전을 사용하여 실행해야 합니다.

당신이 얻는 대로

 Unsupported major.minor version 51.0

버전 51.0 은 Java 7에서 코드를 컴파일하고 더 낮은 버전을 사용하여 실행하려고 시도한 J2SE 7에 해당합니다. java -version 무엇을 표시하는지 확인하십시오. Java 7 버전이어야 합니다. 그렇지 않은 경우 PATH/JAVA_HOME에서 적절하게 변경하십시오. 또는 코드를 실행하려는 동일한 버전으로 컴파일할 수 있습니다. 구성이 혼란스러운 경우 항상 절대 경로를 제공할 수 있습니다 /home/user/jdk1.7.0_11/bin/javac/home/user/jdk1.7.0_11/bin/java .


Aniket Thakur

Mac에서 비슷한 상황이 발생했으며 다음 프로세스가 저에게 효과적이었습니다.

터미널에서 다음을 입력하십시오.

 vi ~/.profile

그런 다음 파일에 이 줄을 추가하고 저장합니다.

 export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk<version>.jdk/Contents/Home

여기서 버전은 컴퓨터에 있는 버전(예: 1.7.0_25 입니다.

편집기를 종료한 다음 다음 명령을 입력하여 적용합니다.

 source ~/.profile

그런 다음 java -version을 입력하여 결과를 확인합니다.

 java -version

.profile 파일이란?

.profile 파일은 숨김 파일입니다. 프로필 파일이 있는 사용자가 로그인할 때 실행할 명령을 시스템에 알려주는 선택적 파일입니다. 예를 들어 내 사용자 이름이 bruno이고 /Users/bruno/에 .profile 파일이 있는 경우 모든 내용 로그인 절차 중에 실행됩니다.

출처: http://computers.tutsplus.com/tutorials/speed-up-your-terminal-workflow-with-command-aliases-and-profile--mac-30515


Tony

Eclipse 메뉴 Window -> Preferences -> Java -> Compiler에서 "Configure Project Specific Settings"도 확인하십시오.

동일한 Java 버전에서 여전히 오류가 발생하는 경우: 프로젝트의 빌드 폴더를 수동으로 삭제해 보십시오. 그런 다음 이클립스를 다시 시작하십시오.


Andreas L.

Java 7에서 컴파일된 일부 JAR 라이브러리를 가질 수 있으며 Java 런타임으로 Java 6만 사용할 수 있습니다. 일부 새 라이브러리에서 발생할 수 있습니다.


Rio

가장 일반적인 문제는 여러 개를 설치한 경우 올바른 Java Development Kit 라이브러리를 가리켜야 하는 JAVA_HOME

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 접두사를 붙입니다.

대체 Java 버전을 선택합니다.

또는 설치할 수 있는 항목을 확인하십시오.

 apt-cache search ^openjdk

필요한 경우 sudo 접두사를 붙입니다.

그런 다음 예를 들어 다음을 설치할 수 있습니다.

 apt-get install openjdk-7-jre

필요한 경우 sudo 접두사를 붙입니다.

페도라, 오라클 리눅스, 레드햇

다음을 통해 적절한 패키지를 설치/업그레이드합니다.

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

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

비에스디

FreeBSD Ports 컬렉션에 openjdk7 이라고 하는 OpenJDK 7 패키지가 있습니다. 이 패키지는 아마도 재구성해야 할 것입니다.

참조: OpenJDK 위키 페이지 .

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

젠킨스

Jenkins에서 이 문제가 발생하는 경우 다음을 참조하세요.

update-alternatives 을 사용하여 올바른 버전의 Java(최신 버전)를 선택하면 작동합니다.


kenorb

내 애플리케이션을 빌드하기 위해 Ant 스크립트로 작업할 때도 동일한 문제에 직면했습니다.

내 애플리케이션 개발에 Eclipse 를 사용하고 프로젝트의 빌드 속성에서 컴파일러 버전을 변경했습니다. 그러나 그것은 나를 위해 작동하지 않았습니다. 그런 다음 Ant 스크립트에서 컴파일러 버전을 제공할 수 있다는 것을 알게 되었습니다.

Java 파일을 컴파일하는 섹션에서 Ant 스크립트를 수정했습니다.

 <target name="build-java" depends="prepare-build"> <echo message="Compiling java files"/> <javac .... target="1.5"... </javac> </target>

이것은 지원되지 않는 주요 사소한 문제를 해결하는 데 도움이되었습니다.


Mandar Pandit

JDK 1.7을 설치했을 때 문제가 해결되었습니다.


user3168034

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

Eclipse의 내 솔루션:

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

  • JRE 시스템 라이브러리를 선택 하고 오른쪽에서 편집 을 클릭하고 대상 JRE를 선택합니다.

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

그것은 나를 위해 일했습니다.


Ben

여러 사람들이 다른 곳에서 대답했듯이 Java 프로그램은 컴파일된 것보다 이전 버전의 Java에서 실행되고 있습니다. 이전 버전과의 호환성을 위해 "크로스 컴파일"되어야 합니다. 다시 말해서 소스 및 대상 Java 버전 간에 불일치가 있습니다.

Eclipse 메뉴에서 옵션을 변경해도 Eclipse를 사용하지 않는다고 말한 원래 포스터에는 답변이 되지 않습니다. OpenJDK javac 버전 1.7에서 -source-target 매개변수를 사용하고 컴파일 시간에 대상 버전(즉, 이전 버전) 의 rt.jar 파일을 제공하면 1.6에 대해 교차 컴파일할 수 있습니다. 실제로 1.6 JRE를 설치하는 경우 해당 설치를 가리킬 수 있습니다(예: Ubuntu의 /usr/lib/jvm/java-6-openjdk-i386/jre/lib/rt.jar, /usr/jdk/jdk1. 분명히 SunOS의 6.0_60/jre/lib/rt.jar입니다. 죄송합니다. Windows 시스템에서는 어디에 있는지 모르겠습니다.) 이렇게:

 javac -source 1.6 -target 1.6 -bootclasspath /usr/lib/jvm/java-6-openjdk-i386/jre/lib/rt.jar HelloWorld.java

인터넷에서 rt.jar을 다운로드하고 가리킬 수 있는 것 같습니다. 이것은 너무 우아하지 않습니다.

 javac -source 1.6 -target 1.6 -bootclasspath ./rt.jar HelloWorld.java

Mace Ojala

이를 바탕으로...

 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를 추가합니다.


Adit Ya

  • Maven을 사용하는 경우 Java 컴파일 레벨을 설정하십시오. 명령줄을 열고 컴파일 수준에 대해 java -version

    여기에 이미지 설명 입력

  • IntelliJ IDEA를 사용하는 경우 프로젝트 → 파일설정빌드 실행 배포컴파일러Java 컴파일러를 선택 합니다. 그런 다음 다음 이미지와 같이 바이트 코드를 1.7로 변경합니다.

    여기에 이미지 설명 입력


ethemsulan

Maven 을 사용하는 동안 이 문제가 발생 하면 플러그인 Maven Compiler를 사용하여 코드를 컴파일할 수 있습니다.

 <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


Thamme Gowda

Eclipse에서 Ant를 실행할 때 동일한 오류 메시지가 표시되었지만 여기에 언급된 다른 솔루션은 내 문제를 해결하지 못했습니다. 재미있는 점은 Windows 명령줄에서 Ant를 실행하는 것이 제대로 실행되고 있었기 때문에 Eclipse 내에서 구성 문제여야 한다는 것이었습니다.

Eclipse에서 Ant가 실행되어야 하는 환경을 지정할 수 있으며 이는 JDK 대신 JRE로 설정되었습니다.

  • 이동: 실행 -> 외부 도구 -> 외부 도구 구성 ...
  • 프로젝트에 대한 Ant build.xml 선택(여러 프로젝트가 있는 경우)
  • 탭 'JRE' 활성화
  • 여기서는 'Separate JRE: jre6'을 선택했습니다. 이것을 1.6 또는 1.7 시리즈에서 JDK로 변경하면 오류가 사라졌습니다.

ckielstra

더 높은 버전의 JDK를 사용하여 컴파일하고 더 낮은 버전의 JDK/ JRE 에서 실행하려고 했습니다.

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

 javac -version java -version

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

이 문제를 해결하려면 JDK 버전에서 Java를 사용하거나 작동하는 최신 JRE/JDK가 있는 경우 실행하십시오.

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

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


L Lawliet

어떻게 수정합니까?

이 오류는 클래스 코드를 실행하는 데 사용되는 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가 설치되어 있는 경우 - 즉 java 실행 파일이 있는 경우 왼쪽에서 오른쪽으로 이동할 때 처음 만나는 것이 실행됩니다.

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

javac 한 버전(51.0 = Java 7)이 설치되어 있고 동일한 버전의 java 설치되어 있지만 다른 이전 버전의 java 가 PATH에 더 일찍 나타나므로 당신이 기대하는 것.


Vihung

Java 6으로 되돌리고 이전에 Java 7로 컴파일된 클래스를 실행하려고 할 때 이 문제가 발생했습니다. 저에게 효과가 있었던 것은 환경 설정 > Java > 컴파일러 --> 규정 준수 수준을 1.6으로 설정하고 결정적으로 "프로젝트 설정 구성"이었습니다.


user3534268

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

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

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

누군가 "service tomcat [stop/start]"를 사용하여 Tomcat 7을 다시 시작하는 것으로 나타났습니다.

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

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

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

$ ps -ef | 그렙 자바
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 -버전
자바 버전 "1.7.0_15"


oraclesoon

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

 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 이상)을 사용하세요.`


Siddharth

Java 파일이 실행하려는 버전(낮은 런타임 버전)과 다른 버전(높은 컴파일러 버전)으로 컴파일되었습니다.

낮은 버전으로 컴파일된 클래스는 이후의 높은 버전에서 실행될 것으로 예상된다는 것이 기본적인 이해입니다. 그러나 반대(더 높은 컴파일러 버전으로 컴파일되고 더 낮은 런타임 버전으로 실행하려고 시도)는 때때로 불가능합니다.

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

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

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

(출처: oracle.com .)


Manohar

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

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

TomTom

먼저 기본을 제대로 합시다...

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

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

따라서 기본 라이브러리를 JDK 대신 JRE로 사용하면 항목을 가져오는 데 좋은 시간을 보낼 수 있지만 컴파일되지는 않습니다.

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


Creative_Cimmons

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

서버 런타임 환경

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

여기에 이미지 설명 입력

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


Mike-Bell

내 단위 테스트를 실행하기 위해 명령줄에서 내 프로젝트에 대해 Maven 컴파일을 실행해야 하는 문제가 있었습니다. 테스트 클래스를 변경하고 Eclipse가 자동으로 재컴파일하도록 하면 "Unsupported major.minor version 51.0" 오류가 발생합니다.

JDK6과 JDK7이 모두 설치되어 있지만 모든 JRE 설정은 pom과 Eclipse의 프로젝트 속성 페이지에서 모두 1.6을 가리키고 있었습니다. Maven 업데이트 프로젝트 및/또는 새로 고침으로 이 문제가 해결되지 않았습니다.

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


Matthew Wise

JDK 7을 사용하여 Java 클래스를 컴파일했으며 JDK 6에서 동일한 클래스를 실행하려고 합니다.


Sagar Varpe

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

siddmuk2005

출처 : http:www.stackoverflow.com/questions/10382929/how-to-fix-java-lang-unsupportedclassversionerror-unsupported-major-minor-versi

반응형