2012-10-08 14 views
5

जब मैं अपनी परियोजना को जेडीके 7 या जेडीके 6 के साथ एक्लिप्स में संकलित और चलाता हूं तो सब ठीक है। हालांकि करने के बाद उस चींटी का उपयोग कर और फिर प्रणाली JDK7 का उपयोग कर इसे चलाने के लिए करने की कोशिश की निर्माण, मैं त्रुटि मिलती है:जावा 7 - असंगत स्टैकमैप फ्रेम - समाधान को समझने में सहायता की आवश्यकता क्यों है

असंगत stackmap विधि myClass.myMethod में शाखा लक्ष्य 25 पर फ्रेम() [[Ljava/लैंग/वस्तु; 14

मैं हर जगह देखा है ऑफसेट और Stackoverflow पर यहाँ अच्छे सवाल की एक जोड़ी पाया:

दोनों मूल रूप से एक के रूप में -XX:-UseSplitVerifier जोड़ने के लिए सुझाव देते हैं जेवीएम विकल्प जिसने इस मुद्दे को हल किया। मैं अभी भी पूरी तरह से समझ में नहीं आता क्यों लेकिन स्पष्ट रूप से this bug report मदद करने के लिए लगता है। दुर्भाग्यवश मुझे अभी भी यह नहीं मिला है ...

मैंने किसी एक प्रश्न पर ध्यान दिया कि कोई पहलू उन्मुख प्रोग्रामिंग का उपयोग कर रहा था, जिसने मुझे लगता है कि मैं Guice (Google की DI ढांचा) का उपयोग कर रहा हूं जो समस्या का कारण बन सकता है लेकिन मैं नहीं देख सकता कि कैसे। ऐसा लगता है कि जेडीके 7 का समर्थन करना है।

मैं प्रोगुआर्ड का भी उपयोग कर रहा हूं लेकिन यह भी जेडीके 7 के साथ काम करने का अनुमान है।

वैसे भी इस बिंदु पर मुझे नहीं पता कि यह कामकाज मूल रूप से पिछले जेडीके (इस मामले में जेडीके 6) संस्करण में वापस आने के अलावा क्यों काम कर रहा है, जब कोड का कुछ हिस्सा बाइट कोड (जो कि यही कारण है कि मुझे लगता है कि यह DI से संबंधित है) कोड। लेकिन मैं अभी भी उचित लिंक बनाने में सक्षम नहीं हूं। और मैं भी रास्ता बंद कर सकता था !!

अगर कोई यह बता सकता है कि क्या हो रहा है या ऐसा क्यों होता है तो मैं बेहद सराहना करता हूं। इसके अलावा मुझे वास्तव में कामकाज का उपयोग करने से नफरत है क्योंकि यह एक दीर्घकालिक समाधान पर विचार नहीं करता है।

+0

* "ऐसा लगता है कि जेडीके 7 का समर्थन करना है।" * - शायद इसका समर्थन छोटी है। क्या आपने गुइस इश्यू ट्रैकर/समूह/सूचियों की खोज की है? –

+0

अपने अंक ट्रैकर –

+0

में बग के मामले में कुछ भी नहीं ढूंढ पाए हैं मेरा अनुमान यह होगा कि जावा 7 में उन्होंने अधिक आक्रामक बाइट कोड को सत्यापित करने के लिए जोड़ा है और बाइट कोड के साथ जो भी गुइस कर रहा है, वह निर्भरता इंजेक्शन करता है उन चेक के साथ काम न करें –

उत्तर

3

जावा 7 के रूप में, संकलित बाइटकोड में अतिरिक्त StackMapTable विशेषताएँ होनी चाहिए। ये क्लास लोडिंग समय पर कक्षाओं का निर्माण करने के लिए जेवीएम के अंदर सत्यापनकर्ता की सहायता करते हैं। जावा के पहले संस्करण अधिक उदार हैं, बिना गुणों के धीमे सत्यापन पर वापस आ रहे हैं।

उपकरण जो मूल संकलित बाइटकोड संशोधित करते हैं (संकलन के ठीक बाद ProGuard, निष्पादन से पहले एओपी ढांचे, ...) संशोधित कोड के साथ लगातार गुणों को अद्यतन करने की आवश्यकता है। अगर वे ऐसा करने में असफल होते हैं, तो आपको त्रुटि संदेश "असंगत स्टैकमैप फ्रेम" मिल जाएगा।

प्रोगार्ड को यह वरीयता ठीक करना चाहिए; मुझे इसके साथ किसी भी समस्या से अवगत नहीं है। यदि आप अभी भी ProGuard लागू किए बिना त्रुटि देखते हैं, तो समस्या DI या AOP के साथ झूठ बोलनी चाहिए।