org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 19 at
정보: Starting Servlet Engine: Apache Tomcat/7.0.47
심각: Unable to process Jar entry [META-INF/versions/11/module-info.class] from Jar [jar:file:/C:/Users/PC/.m2/repository/com/zaxxer/HikariCP/3.4.5/HikariCP-3.4.5.jar!/] for annotations org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 19 at org.apache.tomcat.util.bcel.classfile.Constant.readConstant(Constant.java:133) at org.apache.tomcat.util.bcel.classfile.ConstantPool.(ConstantPool.java:60) at org.apache.tomcat.util.bcel.classfile.ClassParser.readConstantPool(ClassParser.java:209) at org.apache.tomcat.util.bcel.classfile.ClassParser.parse(ClassParser.java:119) at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:2134) at org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:2010) at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1976) at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1961) at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1319) at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:878) at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:376) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5322) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) at java.util.concurrent.FutureTask.run(FutureTask.java:266) 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)
[개발환경]
- 자바 8
- 톰캣 7.0.47
- 스프링
[원인] 톰캣이 자바버전에 완벽히 호환되지 않는다.
[설명] 톰캣 7에서 사용되는 BCEL 라이브러리의 몇몇 기능들이 자바8 바이트 코드 형식과 호환되지 않는다.
[해결]
1. 톰캣 8 업그레이드
2. 그냥 쓴다
- 톰캣 공식 홈페이지 에 따르면 톰캣 7은 자바6 이상에서 사용 가능하다고 명시되어 있으며 사용에 큰 문제는 없다.
하지만 몇몇 블로그에 Web.xml 에서 metadata-complete="true"를 추가하여 해결한다고 나와있는데..
metadata-complete를 true 로 설정할 경우
자바 자체 서블릿 어노테이션 기능인 @WebServlet, @WebFilter, and @WebListener 등이
스캔되지 않아 작동하지 않음으로 매우 위험하다.
(오라클 서블릿 상세설명서 에서 metadata-complete키워드 검색하여 참고)
물론, 스프링 프레임워크는 스프링 자체 컨테이너를 사용하기 때문에 상관이없다.
그래도 metadata-complete는 왠만하면 피하는걸로...