org.apache.tomcat.util.bcel.classfile.ClassFormatException: निरंतर पूल में अमान्य बाइट टैग: 15


83

मैं Tomcat 7 के साथ एक वेब सर्वर को Tomcat 7 के साथ दूसरे सर्वर में पोर्ट कर रहा हूं लेकिन Java 8 के साथ।

टॉमकैट सफलतापूर्वक शुरू होता है, लेकिन लॉग इन में 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)

क्या समस्या हो सकती है?


जावा 8 सपोर्ट पाने के लिए आपको आस्पेक्ट 1.8 की जरूरत है। stackoverflow.com/questions/23801950/…
अनंत लक्ष्मीकांत बोबड़े

@AnantLaxmikantbusde इस समस्या के कारण से असंबंधित है, जो टॉमकैट के उस विशिष्ट संस्करण और जेडीके के संस्करण के बीच एक बाईटेकोड असंगति है। सही उत्तर के लिए यह उत्तर देखें ।
vallismortis

जवाबों:


86

"ऑफ़िसिकल उत्तर" यह है कि टॉमकैट जावा 8 पर 7 रन करता है, http://tomcat.apache.org/whichversion.html ("जावा संस्करण 6 और बाद में" देखें)।

हालाँकि, यदि एनोटेशन स्कैनिंग सक्षम है (मेटाडेटा-पूरा = web.xml में "सही") तो BCEL (नए जावा 8 बाइट कोड को संसाधित करने में सक्षम नहीं) के कारण कुछ समस्याएँ हैं। आपको अपवाद मिलेगा (कम से कम टॉमकैट 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 (बेहतर जावा 8 समर्थन के साथ अपडेट किया गया कंपाइलर) को रिलीज़ करना।

(अद्यतन 2014-10-17) यदि आप एनोटेशन स्कैनिंग का उपयोग कर रहे हैं और आपका स्वयं का कोड जावा 8 आधारित नहीं है, तो एक और उपाय निम्नलिखित पंक्ति को जोड़ना है /etc/tomcat7/catalina.properties("एंटी-लॉन्चर.जर के बाद जोड़ा गया" संपत्ति का हिस्सा tomcat.util.scan.DefaultJarScanner.jarsToSkip):

junit.jar,junit-*.jar,ant-launcher.jar,\
jfxrt.jar,nashorn.jar

टॉमबेट 7.0.28 और ओरेकल जेडडीके 8_25 के साथ डेबियन 7.6 पर परीक्षण किया गया।


टॉमकैट 7.054 अभी भी jdk8 -compiler ध्वज का समर्थन नहीं करता है, stackoverflow.com/questions/25279729/…
ब्रिंक

1
स्पष्ट करने के लिए: यदि मेटाडेटा-पूर्ण = "सही" वेब में है। xml एनोटेशन प्रसंस्करण अक्षम होना चाहिए, है ना?
क्रिश्चियन के।

शायद, टिप्पणी पुरानी है, लेकिन 7.0.23 से 8.0.18 तक टॉमकट को बदलना मेरे लिए इस मुद्दे को स्वचालित रूप से हल करता है [विंडोज 7]
योहाने

Modifiying tomcat.util.scan.efaultJarScanner.jarsToSkip catalina.properties के भीतर टॉमकट 8 के लिए मेरे लिए काम किया। (कम से कम यह अन्य मुद्दों से पता चला!)
JGFMK

1
@SamuelThompson टॉमकैट 8 के लिए सही उत्तर के लिए यह उत्तर देखें ।
vallismortis

30

यह एक टॉमकैट बग था जो जावा 9 बाइटकोड के साथ फिर से जीवित हो गया था । सटीक संस्करण जो इसे ठीक करते हैं (दोनों जावा 8/9 बायटेकोड के लिए):

  • इसके बाद 9.0.0.M18 के लिए ट्रंक
  • 8.5.12 के बाद 8.5.12 के लिए
  • 8.0.x के बाद 8.0.42 के लिए
  • 7.0.76 के बाद 7.0.x

2
इससे मेरे लिए समस्या हल हो गई (टीडीकैट 8.0.27 के साथ JDK 8 विफल)
पाब्लो

1
मैं इस समस्या को tomcat 8.0.36 और log4j-api-2.11.0.jar के साथ प्राप्त करता हूं
stephan f

2
इससे समस्या हल हो गई। अपने Tomcat संस्करण को अपडेट करें
LFelix

8

टॉमकैट 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 के लिए) से वापस कर दिया गया है और फिर से लागू नहीं किया जाएगा।


2
मुझे इस कड़ी में java 8 का कोई संबंध नहीं मिला।
माइकल_एस

2

यह समस्या इसलिए हो रही है क्योंकि आपने jre1.8.0_101-1.8.0_101-fcs.i58.rpm और साथ ही jdk-1.7.0_80-fcs.x86_64.rpm स्थापित किया है। तो बस अपने jre rpm की स्थापना रद्द करें और अपना आवेदन पुनः आरंभ करें। यह काम करना चाहिए।



1

मेरे लिए यह युद्ध से सवाल में जार को हटाकर काम किया। मावेन के साथ, मुझे सिर्फ उदाहरण के लिए बाहर करना पड़ा

    <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>

1
Unable to process Jar entry [module-info.class] from Jar [jar:file:/xxxxxxxx/lombok-1.18.4.jar!/] for annotations
org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 19

1. अद्यतन और नीचे तर्क में संलग्न करें <root or instance tomcat folder>/conf/catalina.properties

org.apache.catalina.startup.ContextConfig.jarsToSkip=...,lombok-1.18.4.jar

2.-टू-पुलिश परियोजना को झुकना और तैनात करना।


मुझे १.१४. (संस्करण पर वापस लौटना पड़ा (उसी प्रमुख विशेषताओं के साथ AFAIK, इसलिए यहाँ कोई बड़ी बात नहीं है)
अटोरस

0

मुझे इस मुद्दे का सामना करना पड़ा tomcat 7 + jdk 1.8 के साथ

जावा 1.7 और निचले संस्करणों के साथ यह ठीक काम कर रहा है।

विंडो -> वरीयताएँ -> जावा -> स्थापित jre

मेरे मामले में मैंने jre1.8 को JDK 1.7 में बदल दिया

और तदनुसार प्रोजेक्ट फेस को संशोधित करें, उसी जावा संस्करण का चयन करें, जैसा कि चयनित इंस्टॉल किए गए JRE में है।


@ आशीष रतन ने JDK 8. के ​​लिए सही जवाब के लिए यह उत्तर देखें
vallismortis

0

मुझे इसी तरह की त्रुटि मिली (org.aspectj.apache.bcel.classfile.ClassFormatException: निरंतर पूल में अमान्य बाइट टैग: 15) जब पहलू 1.8.13 का उपयोग कर रहा हो। समाधान सभी संकलित को jdk 8 में संरेखित करना था और सावधान किया जा रहा था कि एस्पज लाइब्रेरी (उदाहरण के लिए 1.6.13) के अन्य संस्करणों को बिल्डपैथ / क्लासपाथ में न डालें।


0

मैं एक ही समस्या है जब tomcat7 के साथ अपने स्प्रिंग बूट एप्लिकेशन को चला रहा था: चलाएं

यह मावेन pom.xml में निम्नलिखित निर्भरता के साथ त्रुटि देता है:

    <dependency>
        <groupId>org.junit.vintage</groupId>
        <artifactId>junit-vintage-engine</artifactId>
    </dependency>
SEVERE: Unable to process Jar entry [module-info.class] from Jar [jar:file:/.m2/repository/org/apiguardian/apiguardian-api/1.1.0/apiguardian-api-1.1.0.jar!/] for annotations
org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 19

Jul 09, 2020 1:28:09 PM org.apache.catalina.startup.ContextConfig processAnnotationsJar
SEVERE: Unable to process Jar entry [module-info.class] from Jar [jar:file:/.m2/repository/org/apiguardian/apiguardian-api/1.1.0/apiguardian-api-1.1.0.jar!/] for annotations
org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 19

लेकिन जब मैं इसे परीक्षण के दायरे में सही ढंग से निर्दिष्ट करता हूं, तो यह त्रुटि नहीं देता है:

    <dependency>
        <groupId>org.junit.vintage</groupId>
        <artifactId>junit-vintage-engine</artifactId>
        <scope>test</scope>
    </dependency>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.