org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException
이전 프로젝트를 다른 서버로 이관중에 다음과 같은 오류가 발생했다.
SEVERE: Compilation error org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException at org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader.(ClassFileReader.java:372) at org.apache.jasper.compiler.JDTCompiler$1.findType(JDTCompiler.java:232) at org.apache.jasper.compiler.JDTCompiler$1.findType(JDTCompiler.java:188) at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:113) at org.eclipse.jdt.internal.compiler.lookup.UnresolvedReferenceBinding.resolve(UnresolvedReferenceBinding.java:49) at org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.resolveType(BinaryTypeBinding.java:122) at org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage(PackageBinding.java:168) at org.eclipse.jdt.internal.compiler.lookup.Scope.getType(Scope.java:2472) at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1006) at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1258) at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.resolve(CompilationUnitDeclaration.java:539) at org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:763) at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:468) at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:459) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:378) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:353) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:340) at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:646) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) |
해당 프로젝트는 java7로 개발되어있었는데 서버에는 java8밖에 없었다.
그래서 이관할 때 java8로 프로젝트를 다시 빌드해서 올리려고 했다.
java7을 서버에 설치하기 귀찮아서 ㅠㅠ..
기존에 java7에서 java8로 변경하고 컴파일 버전까지 java8로 바꿨다.
로컬에서 java와 tomcat 버전을 올리고 오류가 나는 것이 있는지 확인했고 컴파일이 잘되는지, 기능 전체는 테스트 하지 않았지만 특정 기능들이 정상동작하는지 등등 간단하게 확인했을 땐 문제가 없었다.
로컬에서도 정상적으로 실행됬다.
그런데 운영에 올라가서는 위와 같은 오류가 계속 발생했다.
해당 내용으로 찾아보니 jvm 버전이 안맞는다, jsp 파일이 제대로 컴파일 되지 않았다. 라이브러리 디펜던시가 안맞는다 등등...
꽤 다양한 상황에서 저 오류가 나오는 것 같았다.
그래서 해결하기 쉬운놈들부터 차근차근 해보기로 했다.
일단 jsp 파일이 제대로 컴파일 되지 않았을 수 있으니 clean 또는 컴파일된 jsp_java 파일, class 파일 등등 모두 삭제후 다시 시도했는데 결과는 같다.
그래서 라이브러리 디펜던시가 안맞는건지 확인하려 했더니... 프로젝트에서 쓰고있는 라이브러리가 좀 많아서 일단 패스했다.
이걸 다 바꾸기엔 시간도 걸리고 리스크도 보였다.
그래서 서버의 jvm 버전을 변경했다.
귀찮아서 안한건데 ...ㅠㅠㅠㅠ
기존에 설치되어있던 java를 프로젝트가 동작했던 java7로 다운그레이드 했다.
그랬더니 정상적으로 동작했다.
원인을 찾아서 java8로 꼭 업그레이드 해야 하는 것은 아니라서 일단 넘어갔다.
나중에 테스트해보면 답이 나올 테지만 내 생각에는 java 버전을 올리면서 특정 라이브러리중에 디펜던시가 어긋나고 그러다보니 컴파일 오류가 발생했고 위와 같은 상황까지 오지 않았나 예상해 본다.