org.apache.tomcat.util.bcel.classfile.ClassFormatException : 상수 풀의 잘못된 바이트 태그 : 15
Tomcat 7에서 Java 8을 사용하는 다른 서버로 Tomcat 7에서 웹 응용 프로그램을 이식하고 있습니다.
Tomcat이 성공적으로 시작되지만 로그에는 다음 catalina.out이 표시됩니다.
org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 15
at org.apache.tomcat.util.bcel.classfile.Constant.readConstant(Constant.java:131)
at org.apache.tomcat.util.bcel.classfile.ConstantPool.<init>(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:2049)
at org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:1931)
at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1899)
at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1885)
at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1281)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:855)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:346)
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:5172)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:899)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:875)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:618)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1100)
at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1618)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
무엇이 문제일까요?
"공식적인 대답"은 Tomcat 7이 Java 8에서 실행된다는 것입니다. http://tomcat.apache.org/whichversion.html("Java 버전 6 이상 ")을 참조하세요.
그러나 주석 스캔이 활성화 된 경우 (web.xml의 metadata-complete = "true") BCEL로 인해 몇 가지 문제가 있습니다 (새 Java 8 바이트 코드를 처리 할 수 없음). 다음과 같은 예외가 발생합니다 (적어도 Tomcat 7.0.28에서는).
SEVERE: Unable to process Jar entry [jdk/nashorn/internal/objects/NativeString.class] from Jar [jar:file:/usr/lib/jvm/jdk1.8.0_5/jre/lib/ext/nashorn.jar!/] for annotations
org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 15
at org.apache.tomcat.util.bcel.classfile.Constant.readConstant(Constant.java:131)
주석 스캔을 사용 하지 않는 경우 릴리스 7.0.53 (더 나은 Java 8 지원으로 업데이트 된 컴파일러)부터 모든 것이 잘 작동합니다.
(UPDATE 2014년 10월 17일) 귀하의 경우 하는 주석을 사용한 스캔 및 기반 자바 (8) 자신의 코드를하지 않는 또 다른 솔루션에 다음 줄을 추가하는 것입니다 /etc/tomcat7/catalina.properties(재산의 일부 있도록 "개미 launcher.jar"이후에 추가 텍스트 tomcat.util.scan.DefaultJarScanner.jarsToSkip) :
junit.jar,junit-*.jar,ant-launcher.jar,\
jfxrt.jar,nashorn.jar
Debian 7.6에서 Tomcat 7.0.28 및 Oracle JDK 8_25로 테스트되었습니다.
이것은 Java 9 바이트 코드로 다시 나타난 Tomcat 버그 였습니다 . 이 문제를 수정하는 정확한 버전 (Java 8/9 바이트 코드 모두)은 다음과 같습니다.
- 9.0.0.M18 이후의 트렁크
- 8.5.12 이상의 경우 8.5.x
- 8.0.42 이상의 경우 8.0.x
- 7.0.76 이상의 경우 7.0.x
Tomcat 7.0.58 이상으로 업데이트합니다.
참조 : https://bz.apache.org/bugzilla/show_bug.cgi?id=57173#c16
이 회귀를 유발 한 성능 향상은 트렁크, 8.0.x (8.0.16 이상) 및 7.0.x (7.0.58 이상)에서 되돌려졌으며 다시 적용되지 않습니다.
이 문제는 jre1.8.0_101-1.8.0_101-fcs.i58.rpm과 jdk-1.7.0_80-fcs.x86_64.rpm을 설치했기 때문에 발생합니다. jre rpm을 제거하고 응용 프로그램을 다시 시작하십시오. 잘 될 것입니다.
나에게 bcel을 6.0으로 업그레이드하면 문제가 해결되었습니다.
나는 tomcat 7 + jdk 1.8 에서이 문제에 직면했습니다.
Java 1.7 이하 버전에서는 잘 작동합니다.
창-> 환경 설정-> 자바-> 설치된 jre
제 경우에는 jre1.8을 JDK 1.7로 변경했습니다.
이에 따라 프로젝트 패싯을 수정하고 선택한 설치된 JRE에있는 것과 동일한 Java 버전을 선택합니다.
I got similar error (org.aspectj.apache.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 15) while using aspectj 1.8.13. Solution was to align all compilation into jdk 8 and being careful not to put aspectj library's (1.6.13 for instance) other versions to buildpath/classpath.
For me it worked, by removing the jars in question from the war. With Maven, I just had to exclude for example
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxb-provider</artifactId>
<version>${resteasy.version}</version>
<exclusions>
<exclusion>
<groupId>com.sun.istack</groupId>
<artifactId>istack-commons-runtime</artifactId>
</exclusion>
<exclusion>
<groupId>org.jvnet.staxex</groupId>
<artifactId>stax-ex</artifactId>
</exclusion>
<exclusion>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>txw2</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.xml.fastinfoset</groupId>
<artifactId>FastInfoset</artifactId>
</exclusion>
</exclusions>
</dependency>
'program story' 카테고리의 다른 글
| gdb에서 새 스레드 / 스레드 종료 메시지를 비활성화하려면 어떻게해야합니까? (0) | 2020.11.18 |
|---|---|
| Scala에서 Applicative Functor를 사용해야하는시기와 이유 (0) | 2020.11.18 |
| 아나콘다에서 스파이더를 업데이트하는 방법 (0) | 2020.11.18 |
| 클래스 메서드와 함께 super 사용 (0) | 2020.11.18 |
| Naive Bayes 분류기의 정확도를 향상시키는 방법은 무엇입니까? (0) | 2020.11.18 |