▶ 오류 모음

org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 19 at

SieunLim 2021. 4. 27. 11:43
728x90

정보: 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는 왠만하면 피하는걸로...

 

반응형