programing

자바 클래스 파일 형식의 메이저버전 번호 목록

prostudy 2022. 6. 29. 20:34
반응형

자바 클래스 파일 형식의 메이저버전 번호 목록

다음 자바 메이저버전 번호 리스트를 다른 투고에서 보았습니다.

  • Java 1.2는 메이저버전 46을 사용합니다.
  • Java 1.3은 메이저버전 47을 사용합니다.
  • Java 1.4는 메이저버전 48을 사용합니다.
  • Java 5는 메이저버전 49를 사용합니다.
  • Java 6은 메이저버전 50을 사용합니다.
  • Java 7은 메이저버전 51을 사용합니다.
  • Java 8은 메이저버전 52를 사용합니다.
  • Java 9는 메이저버전 53을 사용합니다.
  • Java 10은 메이저버전 54를 사용합니다.
  • Java 11은 메이저버전 55를 사용합니다.
  • Java 12는 줄자버전 56을 사용합니다.
  • Java 13은 메이저버전 57을 사용합니다.
  • Java 14는 메이저버전 58을 사용합니다.
  • Java 15는 메이저버전 59를 사용합니다.
  • Java 16은 메이저버전 60을 사용합니다.
  • Java 17은 메이저버전 61을 사용합니다.

이 리스트는 어디서 온 거예요?이에 대한 구체적인 참고 사항이 있습니까?마이너 버전도 보여 주는 것이 좋습니까?

이것들은 클래스 버전에서 나온 것입니다.Java 5 런타임에서 Java 6용으로 컴파일된 것을 로드하려고 하면 "compatible class version, got 50, expected 49"라는 오류가 나타납니다.아니면 그런 비슷한 것.

자세한 내용은 바이트 오프셋7 을 참조해 주세요.

추가 정보는 이쪽에서도 확인할 수 있습니다.

Wikipedia 페이지에서 클래스 파일 형식을 설명하는 Java 클래스 파일 버전 목록을 찾았습니다.

http://en.wikipedia.org/wiki/Java_class_file#General_layout

바이트 오프셋6 및 7 아래에 대응하는 Java VM 버전이 나열됩니다.

메이저 버전 번호의 공식 소스:

Java Virtual Machine Specification, 4장.클래스 파일 형식

JVM 규격의 최신 공개 버전은 여기에서 확인할 수 있습니다.

"클래스 파일의 오류 컴파일러"에 문제가 있는 경우 이클립스를 통해 프로젝트의 JRE를 대응하는 것으로 변경함으로써 이 문제를 해결할 수 있습니다.

  1. 빌드 패스
  2. 빌드 경로 구성
  3. 친구가 마지막으로 보여주는 표의 대응자로 라이브러리를 변경합니다.
  4. "jar file"을 생성하여 컴파일 및 실행합니다.

내가 그랬더니 효과가 있었어.

에 클래스 파일이 있는 경우build/com/foo/Hello.class다음 명령을 사용하여 컴파일된 Java 버전을 확인할 수 있습니다.

javap -v build/com/foo/Hello.class | grep "major"

사용 예:

$ javap -v build/classes/java/main/org/aguibert/liberty/Book.class | grep major
  major version: 57

OP의 표에 따르면 메이저버전57은 클래스 파일이 JDK 13바이트 코드레벨로 컴파일된 것을 의미한다.

클래스에 대해 .lessfilter에서 javap을 사용하기 때문에 컴파일을 해제하고 어떤 버전으로 컴파일되었는지 직접 알 수 있습니다.

*.class)
echo "/** "
javap -verbose "$1" | grep version | sed -e 's/50/Java6/' -e 's/51/Java7/' -e 's/52/Java8/' -e 's/53/Java9/' -e 's/54/Java10/' -e 's/55/Java11/' -e 's/56/Java12/' -e 's/57/Java13/'
echo " **/"
java -jar ~/bin/cfr-0.150.jar "$1" | enscript --color --language=ansi --highlight=java -o - -q
;;

(이전 답변에 코멘트로 추가할 수 없지만 코드를 포맷할 수 없어서 다른 사람에게 도움이 될 수 있다고 생각했습니다.)

(답변보다 정말 장황한 코멘트...)

이 질문은 "버전 목록은 어디에서 왔는가?"에 관한 것이었다.

응답에서는, 「파일 형식」의 JAVA SE 사양을 참조하고 있습니다.꽤 신뢰할 수 있는 것 같습니다(Wiki에서도 바이트 6(메이저 버전) 값을 참조하고 있습니다).이 답변은 받아들여져야 합니다.


가지 은 이 정하느냐에 이 맞춰져 것 같습니다.javap 돼요.그것들은 별개의 질문이어야 한다. '없음', '없음'javap버전을 검색하는 방법은 unix 명령어입니다.fileClassFile 구조체에 지정되어 있는를 읽습니다.

: ,,file myClass.class혹은 더 우아하게file -b myClass.class | awk -F',' '{print $NF}'

예:

$ find * -name "*.class" -exec file -b {} \; | awk -F',' '{print $NF}' | sort -u
 version 45.3
 version 50.0 (Java 1.6)
 version 52.0 (Java 1.8)

언급URL : https://stackoverflow.com/questions/9170832/list-of-java-class-file-format-major-version-numbers

반응형