programing

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

randomtip 2022. 7. 10. 20:59
반응형

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

편집, 실행, 컴파일 등의 올인원 툴로서 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)
       .........................................

이 문제는 버전에 관한 것이라고 생각합니다.자바의 일부 버전은 오래된 버전일 수도 있고 너무 새로운 버전일 수도 있습니다.

  1. 어떻게 고치죠?
  2. JDK를 설치하고 경로 변수를 JRE가 아닌 JDK로 설정해야 합니까?
  3. PATHJRE 'JDK

표시된 버전 번호는 클래스 파일이 호환되는 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 코드를 새로운 버전의 Java JRE로 실행하거나 Java 컴파일러에 대상 파라미터를 지정하여 컴파일러에 이전 Java 버전과 호환되는 코드를 생성하도록 지시해야 합니다.

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

javac -target 1.4 HelloWorld.java

Java 컴파일러의 새로운 버전에서는 부트스트랩클래스 경로가 설정되어 있지 않다는 경고가 표시될 수 있습니다.이 오류에 대한 자세한 내용은 bootclasspath를 사용하지 않고 오래된 소스를 설정하기 위한 블로그 게시물 New javac 경고에서 확인할 수 있습니다.

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

Eclipse에서는 메뉴 명령어 Window -> Preferences -> Java -> Compiler로 이동하여 컴파일러 컴플라이언스 레벨을 1.6으로 설정했습니다.

걱정하지 마, 내가 해결했어.

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

JRE 6 -> JDK 6

JRE 7 -> JDK 7

기타 등등.

이 에러는, 인스톨 한 것보다 새로운 버전의 Java로 컴파일 된 Java 「클래스」파일을 로드하려고 하고 있는 것을 의미합니다.

를 들어,의 '마음'은.class

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

  • Java 런타임 업그레이드 또는
  • 원본이 있는 경우 로컬 Java 컴파일러(있는 경우)를 사용하여 클래스를 다시 컴파일합니다.

    javac FileName 입니다.자바

개발자의 경우 다른 개발자가 .class 파일을 체크인하고 사용자보다 더 새로운 버전의 Java를 가지고 있을 때 발생할 수 있습니다.

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

이왕이면

Unsupported major.minor version 51.0

버전 51.0J2SE 7에 대응하고 있으며 Java 7에서 코드를 컴파일하여 낮은 버전을 사용하여 실행하려고 합니다.무엇을 확인하다java -version.Java 7 전 java java java java java java java java java java java 。PATH/JAVA_HOME 에서 적절한 변경을 하지 않는 경우는, 코드를 실행하려고 하는 버전과 같은 버전으로 컴파일 할 수 있습니다.는, 항상 패스 「」를할 수 ./home/user/jdk1.7.0_11/bin/javac ★★★★★★★★★★★★★★★★★」/home/user/jdk1.7.0_11/bin/java.

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

Eclipse 메뉴창 -> [설정] -> [ Java ]-> [컴파일러]에서 "프로젝트 고유의 설정 설정 구성"도 체크합니다.

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

Java 7에서 컴파일된 JAR 라이브러리와 Java Runtime으로 Java 6만 사용할 수 있습니다.새로운 라이브러리에서 발생할 수 있습니다.

는 설정 입니다.JAVA_HOMEJava 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★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

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

또는, 인스톨 할 수 있는 것을 확인합니다.

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-openjdkJava Runtime Environment (Java 런타임 환경)하려면 , 「」를 .java-1.7.0-openjdk-devel★★★★★★★★★★★★★★★★★★.

BSD

FreeBSD Ports 컬렉션에는 Openjdk7이라고 하는 OpenJDK7 패키지가 있어 재구성해야 할 가능성이 있습니다.

자세한 내용은 Open JDK Wiki 페이지를 참조하십시오.

창문들

Oracle 사이트에서 적절한 Java SE Development Kit 라이브러리를 설치하거나 설치하기만 하면 됩니다.

젠킨스

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

, Java(신규)가 사용됩니다.update-alternatives작동해야 합니다.

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

Eclipse의 솔루션:

  • 프로젝트 속성 우클릭 -> Java 빌드 경로 -> 라이브러리

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

  • 좌측의 Java 컴파일러로 이동하여 컴파일러 컴플라이언스 수준을 타겟으로 변경합니다.

나한테는 효과가 있었어.

저는 Ant 스크립트를 사용하여 어플리케이션을 작성할 때도 같은 문제에 직면했습니다.

응용 프로그램 개발에 이클립스를 사용하고 있으며 프로젝트의 빌드 속성에서 컴파일러 버전을 변경했습니다.하지만 그것은 나에게 효과가 없었다.그 후 Ant 스크립트로 컴파일러 버전을 제공할 수 있다는 것을 알게 되었습니다.

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

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

이것은, 서포트되고 있지 않은 큰 마이너한 문제를 해결하는 데 도움이 되었습니다.

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

몇몇 사람들이 다른 곳에서 대답했듯이, Java 프로그램은 컴파일된 것보다 더 오래된 버전의 Java에서 실행되고 있습니다.하위 호환성을 위해 "크로스 컴파일"해야 합니다.바꿔 말하면, 소스와 타겟의 Java 버전이 일치하지 않습니다.

Eclipse 메뉴에서 옵션을 변경하는 것은 Eclipse를 사용하지 않는다고 말한 원본 포스터에 대한 답변이 되지 않습니다. 1 OpenJDK javac 1.7을 사용하면 1.을 할 수 .-source ★★★★★★★★★★★★★★★★★」-target또한 컴파일 시 타깃버전(즉 오래된 버전)의 rt.jar 파일을 제공합니다.1.6 JRE를 실제로 설치하는 경우 설치를 가리킬 수 있습니다(예: Ubuntu에서는 /usr/lib/java-6-openjdk-i386/jre/rt.jar, SunOS에서는 /usr/jdk/jre/lib/rtjar).죄송합니다. 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

이걸 바탕으로...

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

  • 메이븐 자바 열기 및 java -version다음 중 하나:

    Enter image description here

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

    Enter image description here

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>
       .....

UPDATE:: 설정: source ★★★★★★★★★★★★★★★★★」target로로 합니다.1.88을 하는 경우).

Eclipse에서 Ant를 실행할 때 동일한 오류 메시지가 표시되었지만, 여기에 언급된 다른 솔루션으로는 문제가 해결되지 않았습니다.재미있는 것은 Windows 명령줄에서 Ant를 실행하는 것은 정상적으로 실행되고 있었기 때문에 Eclipse 내에서 설정상의 문제가 발생했다는 것입니다.

이클립스에서는 Ant가 실행할 환경을 지정할 수 있으며, 이 환경은 JDK가 아닌 JRE로 설정되었습니다.

  • [ Run ] > [ External Tools ]-> [ External Tools Configurations ]으로 이동합니다.
  • 프로젝트의 Ant build.xml을 선택합니다(여러 프로젝트가 있는 경우).
  • 탭 'JRE' 활성화
  • 여기에서 '별도 JRE: jre6'을 선택했습니다.1.6 또는 1.7 시리즈에서 JDK로 변경했을 때 오류가 사라졌습니다.

상위 버전의 JDK를 컴파일하여 하위 버전의 JDK/JRE에서 실행하려고 했습니다.

이것을 확인하려면 , 다음의 버전 정보를 참조해 주세요.

javac -version

java -version

서로 다르며 javac의 버전 번호가 더 높아집니다.

이 문제를 해결하려면 JDK 버전의 java를 사용하거나 새로운 JRE/JDK를 사용하는 것도 좋습니다.

which javac를 들어, '아까', '아까', '아까', '아까',/usr/bin/javac 됩니다./usr/bin/java <program>.

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

어떻게 고치죠?

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

이 문제를 해결하려면 다음 중 하나를 수행합니다.

a) Java 소스를 실행하는 데 사용되는 Java 컴파일러와 같거나 오래된 버전의 Java 컴파일러로 컴파일합니다.즉, 적절한 JDK를 인스톨 합니다.

버전의 컴파일러와 모드로 b) Java를 합니다.Java는 Java를 사용합니다.-target파라미터를 지정합니다.

c) 컴파일된 클래스를 JRE에서 실행합니다.이 클래스는 클래스 컴파일에 사용된 JDK와 동일하거나 새로운 버전입니다.

에서 현재 사용하고 있는 버전을 확인할 수 있습니다.javac -version컴파일러용 및java -version를 선택합니다.

JDK를 설치하고 PATH 변수를 JRE가 아닌 JDK로 설정해야 합니까?

컴파일을 위해 필요한 특정 JDK를 설치하고 구성합니다.

런타임에는 JDK 또는 스탠드아론 JRE와 함께 제공되는 버전을 사용할 수 있지만, 어떤 경우에도 올바른 버전을 설치하고 PATH를 설정하여 예기치 않은 상황이 발생하지 않도록 하십시오.

JRE 또는 JDK의 PATH 변수와 다른 점은 무엇입니까?

PATH 환경변수는 명령어셸에 입력하는 명령어 검색처를 나타냅니다.입력할 때java명령어 셸 인터프리터는 에서 지정된 모든 위치를 조사합니다.PATH변수(왼쪽에서 오른쪽으로)를 선택하여 적절한 값을 찾습니다.java실행할 런타임 실행 파일.여러 버전의 Java가 설치되어 있는 경우(즉,javaPATH 변수에서 지정된 여러 위치에서 실행 가능한 파일이 왼쪽에서 오른쪽으로 이동할 때 가장 먼저 발생하는 파일이 실행됩니다.

컴파일러 명령어는javacJDK에만 포함되어 있습니다.runtime 명령어는 다음과 같습니다.javaJDK와 함께 제공되며 JRE에 포함되어 있습니다.

아마도 하나의 버전(51.0 = Java 7)이 있을 것입니다.javac설치되어 있으며, 같은 버전의 의java설치되었지만 다른 이전 버전의java는 PATH의 앞부분에서 표시되며, 이는 사용자가 예상하는 것이 아니라 호출됩니다.

Java 6으로 돌아가서 Java 7로 컴파일된 클래스를 실행하려고 했을 때 이 문제가 발생하였습니다.[ Preferences ]> [ java ]> [ compiler ] -- > 컴플라이언스 레벨을 1.6으로 설정하고, 중요한 것은 「프로젝트 설정」입니다.

오늘 Ubuntu 12.04.2 LTS(Precision Pangolin)의 Tomcat 7에 다음 오류 메시지가 표시되었습니다.

/var/log/localhost.2014-04-08.log:
2014년 4월 8일 오전 9:00:55 AM org.apache.catalina.core.Standard Context 필터 시작
심각: 예외 시작 필터 스트럿 2
java.displaces를 클릭합니다.UnsupportedClassVersionError: controller/ReqAccept: 지원되지 않는 major.minor 버전 51.0(클래스 컨트롤러를 로드할 수 없습니다).승인 필요)

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

알고 보니 누군가가 "service tomcat [stop/start]"를 사용하여 Tomcat 7을 재시작했습니다.

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

이로 인해 "Unsupported major.minor version 51.0" 오류가 발생합니다.

"/etc/init.d/tomcat7 [stop/start]"를 사용하여 Tomcat7을 재부팅하자 문제가 해결되었습니다.

$ ps - ef | grep java
tomcat7 31886 1 80 20:24 ?00:00:10 /usr/local/flash/jdk1.7.0_15/bin/flash
$ /usr / local / filename / jdk 1 . 7 . 0 _ 15 / bin / filename - 버전
Java 버전 "1.7.0_15"

내가 풀었어.실행:

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 이후)을 사용합니다.`

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

낮은 버전으로 컴파일된 클래스는 더 높은 버전으로 실행될 것으로 예상된다는 것은 기본적인 이해입니다.그러나 그 반대(높은 컴파일러 버전으로 컴파일되어 낮은 런타임 버전으로 실행하려고 하는 경우)는 매우 어렵습니다.

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

Q: Java 7에서 응용 프로그램을 작성했는데 사용자가 실행하려고 하면 Unsupported major.minor version 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).

오 Mac OS X JAVA_를 설정함으로써 이 문제를 해결할 수 있었습니다.HOME 변수:

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

일단 기본부터 제대로...

JRE는 NetBeans/Eclipse/standalone의 컴포넌트로 라이브러리, JVM, Java 플러그인 및 Java Web Start를 제공합니다.Compliance 또는 Debugger는 주의해 주세요.

JDK는 컴플라이언스 및 디버거와 함께 JRE의 슈퍼셋입니다.

따라서 기본 라이브러리를 JDK가 아닌 JRE로 사용하면 데이터를 가져오는 데 시간이 걸리지만 컴파일이 되지 않습니다.

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

이 경우는 서버 런타임 설정에 문제가 있었습니다.

Server Runtime Environment

JRE가 필요한 버전인지 확인합니다.

enter image description here

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

유닛 테스트를 실행하기 위해 명령줄에서 프로젝트에서 Maven 컴파일을 실행해야 하는 문제가 있었습니다.테스트 클래스를 변경하여 이클립스를 자동으로 재컴파일하면 "Unsupported major.minor version 51.0" 오류가 발생했습니다.

JDK6와 JDK7을 모두 설치했지만 모든 JRE 설정이 폼과 이클립스의 프로젝트 속성 페이지에서 1.6을 가리키고 있었습니다.Maven Update Project 및/또는 새로 고침으로 인해 문제가 해결되었습니다.

마지막으로 프로젝트를 닫고 다시 열려고 했는데, 이것으로 해결된 것 같았습니다!HTH

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

  • JDK 7.0.55를 설치하고 Java for JDK 7.0.55를 설정합니다.
  • 빌드 경로 JDK 7.0.55로 구성하여 JDK 7.0.55로 프로젝트를 빌드합니다.
  • Eclipse for JDK 7.0.55 메뉴에서 Windows -> Preferences -> Java -> Compiler - 1.7 을 선택합니다.

언급URL : https://stackoverflow.com/questions/10382929/how-to-fix-java-lang-unsupportedclassversionerror-unsupported-major-minor-versi

반응형