Java 1.8 ASM ClassReader क्लास फाइल को पार्स करने में विफल रहा - शायद एक नए जावा क्लास फाइल संस्करण के कारण जो अभी तक समर्थित नहीं है


87

मेरा वेब एप्लिकेशन JDK 1.7 पर ठीक चलता है लेकिन निम्न अपवाद के साथ 1.8 पर क्रैश होता है (जेटी 8 के साथ एप्लिकेशन सर्वर स्टार्टअप के दौरान)। मैं स्प्रिंग संस्करण का उपयोग कर रहा हूं: 3.2.5। कृपया।

अपवाद:

org.springframework.core.NestedIOException: ASM ClassReader failed to parse class file - probably due to a new Java class file version that isn't supported yet

मुझे लगता है कि वसंत के कारण समस्या होती है और "asm.jar" पुस्तकालय जिस पर यह निर्भर करता है।

मैं इसका कैसे समाधान करूं?


क्या आप अपने वेबप को जावा 8 या जावा 7 के रूप में संकलित कर रहे हैं? यदि 8, तो जावा 7 को लक्षित करने वाली अपनी कक्षाओं को संकलित करना संभव है, लेकिन फिर भी इसे जावा 8 के तहत
चलाएं

3
यदि आप Java8 को लक्षित करना चाहते हैं, तो आपको स्प्रिंग 4
पाब्लो लोज़ानो

यह 1.7 के लिए संकलित है, लेकिन जावा 8 सुविधाओं के लिए कोई समर्थन नहीं है। तो इस मामले में jdk 8 का उपयोग करना sence नहीं बनाता है
stanislav.chetvertkov

जवाबों:


119

जैसा कि @prunge और @Pablo Lozano ने कहा, अगर आपको Java 8 (--target 1.8) पर कंपाइल कोड चाहिए, तो आपको Spring 4 की आवश्यकता है, लेकिन यदि आप स्प्रिंग 3.2.X पर चलते हैं, तो भी आप Java 8 पर संकलित Java 8 के ऐप्स चला सकते हैं।

की जाँच करें http://docs.spring.io/spring/docs/current/spring-framework-reference/html/new-in-4.0.html

ध्यान दें कि जावा 8 बाइटकोड स्तर (-getget 1.8, आवश्यकतानुसार- सोर्स 1.8) स्प्रिंग फ्रेमवर्क 4.0 के रूप में पूरी तरह से समर्थित है। विशेष रूप से, स्प्रिंग 3.2 आधारित अनुप्रयोगों को लक्ष्य के रूप में अधिकतम जावा 7 के साथ संकलित करने की आवश्यकता होती है, भले ही वे जावा 8 रनटाइम पर तैनात हों। जावा 8 आधारित अनुप्रयोगों के लिए कृपया स्प्रिंग 4 में अपग्रेड करें।


यह काम किया, धन्यवाद! किसी कारण से मैं वसंत 4 रिलीज से चूक गया हूं :-)
stanislav.chetvertkov

2
यह मेरे साथ भी होता है, भले ही कोड अभी भी 1.7 को लक्षित करने के लिए संकलित है, मैंने केवल रनटाइम को जावा में बदल दिया है 8. कोई विचार?
ऑरसेला

1
, ItayK के जवाब देखें वहाँ वसंत 3.2.8 में एक बग है और नीचे है कि सही एएसएम संस्करण का उपयोग नहीं होगा, यह 3.2.9- में भी निश्चित होती है
chrismarx

2
3.2.10 में एक और बग तय किया गया था, इसलिए मैं 3.2.16 या जो भी नवीनतम हो, के साथ जाने की सलाह दूंगा। यहां मुख्य स्प्रिंग बग्स तय किए गए हैं: मेटाडेटा रीडिंग कभी भी जावा के लिए ASM का उपयोग नहीं करना चाहिए। * और javax। * प्रकार (विशेष रूप से JDK 8 पर) Java 8: ASM5 विज़िटर को इंटरकॉस्पेशल / स्टेटिक को पार्स करने के लिए आवश्यक है
माइकल

धन्यवाद ,, यह <groupId> org.apache.maven.plugins </ groupId> <विरूपण साक्ष्य> maven-compiler-plugin </ विरूपण साक्ष्य> <कॉन्फ़िगरेशन> <source> 1.7 </ source> <लक्ष्य> 1.7 </ /> रखकर काम किया। लक्ष्य> </ कॉन्फ़िगरेशन> के बजाय <groupId> org.apache.maven.plugins </ groupId> <विरूपण साक्ष्य> maven-compiler- प्लगइन </ विरूपण साक्ष्य> <कॉन्फ़िगरेशन> <स्रोत> 1.8 / स्रोत> <लक्ष्य> 1.8 < / लक्ष्य> </ कॉन्फ़िगरेशन>
आशुतोष एस।

67

यदि आप इस त्रुटि का सामना करते हैं, भले ही आप -getget 1.7 के साथ संकलित करते हैं, तो कृपया ध्यान दें कि यह स्प्रिंग फ्रेमवर्क में एक बग के कारण है जो ASM क्लासरीडर को jdk classes (java। * या javax। *) लोड करने का कारण बनता है, जो निश्चित रूप से हैं। -Ggetget 1.8 के साथ संकलित।

यह, वसंत 3.2.8 और नीचे के पुराने ASM संस्करण के साथ संयुक्त है, जो 1.8 वर्ग फ़ाइलों के पार्सिंग का समर्थन नहीं करता है, इस त्रुटि को भी जन्म दे सकता है।

इस मुद्दे के बारे में अधिक जानकारी यहां पाई जा सकती है: https://jira.spring.io/browse/SPR-11719

इसे स्प्रिंग फ्रेमवर्क संस्करण 3.2.9 में तय किया जाना चाहिए, जो जल्द ही जारी होने वाला है।

बेशक, स्प्रिंग फ्रेमवर्क 4 में अपग्रेड करना भी समस्या को हल करेगा, क्योंकि इसमें पहले से ही एएसएम का एक नया संस्करण शामिल है।

हालाँकि, अगर किसी कारण से आप अभी तक संस्करण 4 में अपग्रेड नहीं कर सकते हैं, तो यह जानना अच्छा है कि इसका विकल्प (जल्द ही) है।


6
स्प्रिंग 3.2.9 में अपग्रेड करने से मुझे मदद मिली।
सेंगिज

2
यह स्वीकार किए जाते हैं जवाब, क्योंकि यह स्पष्ट रूप से बताते हैं कि समस्या क्या है होना चाहिए
Willa

2
स्प्रिंग 3.2.5 के साथ यह समस्या थी, 3.2.9 में बदल गई और समस्या हल हो गई। एकदम सही जवाब।
Salvatorelab

काहे, खुशी है कि मुझे स्प्रिंग 4 में अपग्रेड करने की आवश्यकता नहीं थी। शानदार जवाब!
रुडोल्फसन

0

यदि आप जावा 8 या अगले संस्करण का उपयोग करते हैं तो आपको स्प्रिंग संस्करण को अपग्रेड करने की आवश्यकता है और स्प्रिंग संस्करण 4.xxx होना चाहिए


0

मुझे भी यही समस्या थी और इसे हल किया। मैं जावा के साथ स्प्रिंग 3.x का उपयोग कर रहा हूं। 8. यदि उपरोक्त समाधान जार को बदलने में काम नहीं कर रहे हैं और खोज करते हैं कि क्या वे जार आपके द्वारा उपयोग किए जा रहे जावा संस्करण के साथ संगत हैं या नहीं। वसंत 3.x जावा 8 के साथ संगत नहीं है।


0

इस मुद्दे को हल करने के लिए java 8 के लिए स्प्रिंग 4 का उपयोग किया जा सकता है। मैंने अभी इसका परीक्षण किया है और यह काम करता है। यह समस्या स्प्रिंग 3.2.9-RELEASE संस्करण के बाद से तय की गई है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.