본문 바로가기

Server Oriented/Server

ClassNotFoundException Unsupported major.minor version 51.0 조치 방법론

아래 메시지는 클래스가 없다는 거죠, 말 그대로..

java.lang.ClassNotFoundException

그런데 아래와 같은 에러 메시지도 같이 나온다면..?
시스템에 설정된 컴파일러가 컴파일을 못한다는 것.
Unsupported major.minor version 51.0

물론, 51.0 말고 49.0 이나 등등 수치는 다양하구요.
참고로, http://blog.naver.com/whdals0?Redirect=Log&logNo=110173529705 에서 설명된 대로는 아래와 같네요.

version 51.0 -> 컴파일 버젼 1.7

version 50.0 -> 컴파일 버젼 1.6

version 49.0 -> 컴파일 버젼 1.5

version 48.0 -> 컴파일 버젼 1.4


그런데, /WEB-INF/ 아래에 있는 .class 파일이 정상이라면..?

이건 뭐, 사용자가 .jsp 파일을 수정하여 시스템이 저장할 때, 컨테이너가 .class 파일을 생성할 수 없다는 거고,

이유는 java 버전이 맞지 않는다는 것.


리눅스든 어떤 OS 라도 .jdk 를 여러 버전 설치할 수 있는데..

해당 어플리케이션 서버(또는 WAS)가 컴파일 하려 할 때 버전이 맞지 않아 컴파일이 안 된다는 것.


리눅스라면 어플리케이션 서버를 동작시키는 OS 사용자 아이디로 접속해서,

cd 를 명령창에 입력했을 때.. 해당 OS 사용자의 기본 쉘 파일을 수정해서

java_HOME="/usr/jdk/j2sdk1.4.2_15"

export java_HOME

PATH=$java_HOME/bin:$RESIN_HOME/bin:.:$PATH

export PATH

JDK 가 설치된 경로나 버전에 따라 수정하면 되겠구요..


어쨌거나 기본은 어플리케이션 서버의 컨테이너는 OS 상에 세팅된 .javac 또는 .java 실행 경로와 classpath 가 적용된다는 것.

여기에 해당 어플리케이션 설정 파일에 세팅된 classpath 도 적용되긴 하겠죠.. ~.

기본쉘의 설정 파일을 수정했다면 실행을 해 주어야 하겠죠..
예를들어 b-shell 이었다면 'cd' 를 실행했을 때 옮겨진 경로에서 vi .bash_profile 로 해당 내용을 수정한 다음..
'. .bash_profile' 을 실행해야 적용이 됩니다. ~.