본문 바로가기
Java

컴파일된 class 파일의 클래스 버전 확인하기

by 자바초보자 2015. 10. 7.
728x90

http://greatkim91.tistory.com/66

 

컴파일된 class 파일의 클래스 버전 확인하기

문제발생시 2008/09/20 23:05

다음 도약을 위하여

가끔 java.lang.UnsupportedClassVersionError를 만나는 경우가 있다. 이는 실행하는 JVM이 지원하지 못하는 java class version을 로드할려고 할 경우 발생한다.

Java는 버전이 올라가면서 class 파일의 포맷과 그 버전도 올라가기도 한다. 물론 상위 JVM은 이전 버전의 java compiler로 컴파일된 이전 버전의 java class도 구동을 하지만 그 반대는 아니다.
즉 최신의 java class 전의 java class를 예전의 JVM으로 구동할 수 없을 수 있다는 것이다. 이 경우 앞의 에러가 발생한다.

편집기로 Java Class 버전 확인하기
의외로 간단하며 컴파일된 Java class를 울트라에디터 같이 HEX 모드로 볼 수 있는 편집기로 열어본다.
그러면 맨 앞에 다음과 같이 시작한다.

00000000h: CA FE BA BE 00 00 00 32 00 67 07 00 02 01 00 27
...


CA FE BA BE 는 Java class라는 Magic Number이고 그 뒤에 java class version이 보인다. 위의 경우는 32인데 이것은 16진수이고 10진수로 계산하면 50 이된다. 즉 이 java class의 version은 50이라는 것이다.
JDK 버전마다 class 버전은 다음과 같다.

  • 48: java 1.4.2
  • 49: java 5
  • 50: java 6

즉 이 클래스는 java 6 로 컴파일 된 클래스이며 java 5나 그 이하의 jvm에서 이 클래스를 사용할 경우 앞의 에러를 만날 수 있다.

javap로 확인하기
JDK에 javap라는 명령어가 있다. java class의 최상위 패키지 디렉토리 아래에서 다음과 예와 같이 입력한다.

prompt> javap -verbose kr.nextree.nexdic.actions.AddTermAction
public class kr.nextree.nexdic.actions.AddTermAction extends org.eclipse.jface.action.Action
  SourceFile: "AddTermAction.java"
  minor version: 0
  major version: 50
  Constant pool:
const #1 = class        #2;     //  kr/nextree/nexdic/actions/AddTermAction
const #2 = Asciz        kr/nextree/nexdic/actions/AddTermAction;
const #3 = class        #4;     //  org/eclipse/jface/action/Action
...

major version을 보면 class 버전을 확인할 수 있다.

major version: 51 => 1.7

 

 

 

 

javap -verbose FileCompileAction | grep version

 

  minor version: 0
  major version: 50

 

 

 

728x90

'Java' 카테고리의 다른 글

map key 값 가져오기  (0) 2015.11.04
List to array, array to List  (0) 2015.11.03
Field static 유무  (0) 2015.10.30
server version servlet version jsp version  (0) 2015.10.13
Java 코딩 지침  (0) 2015.10.08