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 모드로 볼 수 있는 편집기로 열어본다.
그러면 맨 앞에 다음과 같이 시작한다.
...
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의 최상위 패키지 디렉토리 아래에서 다음과 예와 같이 입력한다.
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
'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 |