'클래스 파일 버전'에 해당되는 글 4

  1. 2010.09.08 Eclipse 프로젝트에 에러 표시가 없어지지 않는 경우 해결방법
  2. 2009.10.19 자바 클래스 파일 버전 확인
  3. 2009.08.04 javap로 클래스 파일 버전 확인
  4. 2009.08.04 java.lang.UnsupportedClassVersionError

Eclipse 프로젝트에 에러 표시가 없어지지 않는 경우 해결방법

하위 디렉토리에 에러는 없는데 프로젝트에는 에러 표시가 있다.


Problems 뷰를 보면 원인을 찾을 수 있다.

- 위 경우는 컴파일러 버전이 맞지 않은 경우다.
Java compiler level does not match the version of the installed Java project facet.

Java Compiler - Compiler compliance level과 Project Facets의 버전을 맞춘다.

Java Compiler-Compiler compliance level, Generated .class files compatibility, Source compatibility에서 버전을 변경할 수 있다.(org.eclipse.jdt.core.prefs에 저장됨)
Dynamic Web Project에서는 직접 변경해야 되는 경우가 생길 수 있다.

- 형상관리시스템에서 소스를 update했는데 test/ 가 없어진 경우도 있었음.

- ClassNotFoundException 이 발생했는데 확인해 보니 클래스 파일이 생성되지 않았다.
Problems 뷰에 자세히 나와 있다.

The project was not built due to "Could not delete '/Sample/build/classes/com'.". Fix the problem, then try refreshing this project and building it since it may be inconsistent


자바 클래스 파일 버전 확인

  1. javap로 클래스 파일 버전 확인
  2. 클래스파일을 바이트단위로 읽어서 버전 확인하기 : Check the class version
  3. java.class.version으로 확인하기
  4. 울트라에디터에서 확인하기


  5. 에디트플러스에서 확인하기


javap로 클래스 파일 버전 확인

> javap -verbose EDIReply
Compiled from "EDIReply.java"
public class com.edi.intra.EDIReply extends com.edi.intra.EDIBase
  SourceFile: "EDIReply.java"
  minor version: 0
  major version: 46
  Constant pool:
const #1 = class    #2;    //  com/edi/intra/EDIReply
const #2 = Asciz    com/edi/intra/EDIReply;

- ClassNotFoundException이 발생했음. 웹로직에서 런타임 버전과 컴파일된 클래스의 버전이 다른 경우에 발생하였다는 말에 javap 명령으로 버전 확인

[todo] os, 자바 시스템 프로퍼티를 확인해 볼 것. 현재 서버에 구동되고 있는 클래스파일의 버전 확인해 볼것.

java.lang.UnsupportedClassVersionError

java.lang.UnsupportedClassVersionError: spring/TestGreeting (Unsupported major.minor version 49.0) java.lang.UnsupportedClassVersionError: Bad version number in .class file

위 상황은 6.0에서 컴파일한 클래스를 5.0에서 돌렸을 때 발생
아마 5.0에서 컴파일한 클래스를 그 하위 버전에서 실행시켰을때 일거 같다.

 

Exception in thread "main" java.lang.UnsupportedClassVersionError: Xxx has been compiled by a more recent version of the Java Runtime (class file version 59.0), this version of the Java Runtime only recognizes class file versions up to 52.0

STS - Java Build Path - JRE 1.8, Project Facets - Java 1.4 였음. 1.8로 설정해서 처리

 

클래스 버전(java.class.version)

  • version 50.0 : 6.0
  • version 49.0 : 5.0
  • version 48.0 : 1.4
  • 46 이 1.2 라고는 하지만, 이 문서에서는 1.4.1
    Eclipse에서 Generated .class files compatibility를 1.2로 했을 때 46으로 나타남.