java class 버전차이에 의한 오류 및 해결

시스템 | 2022.01.16 04:37

기존 데스크탑에서 자바어플리케이션 개발 및 배포를 해오다 얼마전부터 데스크탑의 맛탱이가는 증세를 보고 개발환경을 노트북으로 바꾸는 과정이었다.

jdk최신버전 설치후 STS4설치하고 war import해서 로컬에서 빌드하니 정상적으로 나왔다. 서버쪽 수정 후 서버에 배포하니 웹서비스들이 미쳐돌아가고 있었다. 하나는 500에러를 내뿜고 하나는 고양이만 나오고 있었다. 분명 심각한 문제가 발생한 것이다.

톰캣 로그를 보았다.

Caused by: java.lang.UnsupportedClassVersionError: kr/pe/innu/stock/dao/StockDaoImpl has been compiled by a more recent version of the Java Runtime (class file version 61.0), 
this version of the Java Runtime only recognizes class file versions up to 52.0 
(클래스 [kr.pe.innu.stock.dao.StockDaoImpl]을(를) 로드할 수 없습니다)
...
org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [kr.pe.innu.stock.service.StockServiceImpl] for bean with name 'stockService' defined in ServletContext resource 
[/WEB-INF/spring/appServlet/servlet-context.xml]: problem with class file or dependent class; nested exception is java.lang.UnsupportedClassVersionError: kr/pe/innu/stock/service/StockServiceImpl has been compiled by a more recent version of the Java Runtime 
(class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0 
(클래스 [kr.pe.innu.stock.service.StockServiceImpl]을(를) 로드할 수 없습니다)

대충보니 클래스파일은 version 61로 되어 있는데 이 시스템은 version 52까지 인식하는거 같다.

노트북에 jdk 최신버전(J2SE 17)을 설치했었는데 아무래도 이게 문제인거 같다. 우선 개발환경과 배포환경의 jdk버전을 맞추는게 필요했다. 최신버전보다는 이전버전으로 개발환경의 jdk(J2SE8)를 다시 설치했다.

그리고 STS의 컴파일러 적용버전을 바꿔주었다.

STS를 다시 켜서 빌드를 하고 클래스버전을 확인하니 배포서버의 버전과 같았고 정상 배포됨을 확인했다.

자바 클래스 버전은 jdk1.1이 메이저버전 45 이고 이후 1씩 증가한다. 나의 배포서버는 Centos7이며 J2SE8(메이저버전 52)이고 현재 최신버전은 J2SE17(메이저버전 61)이다.

 

 

 

 


"시스템" 카테고리의 다른 글

댓글쓰기

"java class 버전차이에 의한 오류 및 해결" 의 댓글 (0)