2014-09-29 6 views
11

मुझे 7u45 से 8u20 तक खान की एक नई परियोजना के जेडीके संस्करण को स्विच करते समय मुझे एक अजीब त्रुटि आई।जावा 8 के साथ LogManager (l4j2) का उपयोग करते समय त्रुटि (java.lang.reflect.AnnotatedElement को हल नहीं किया जा सकता है)

The type java.lang.reflect.AnnotatedElement cannot be resolved. It is indirectly referenced from required .class files 

इस कोड है:: मेरी कक्षा की शुरुआत में एक हानिरहित LogManager घोषणा निम्न त्रुटि के साथ से इनकार कर दिया जा रहा है

public class Class1 { 
    private static Logger log = LogManager.getLogger(Class1.class); 
    ... 

ग्रहण मुझे का निर्माण पथ कॉन्फ़िगर करने का प्रस्ताव है, लेकिन मैं नहीं है विचार क्या कॉन्फ़िगर करना है क्योंकि मुझे उस त्रुटि की अंतर्निहित समस्या नहीं है।

संस्करण 7 के साथ जेडीके का उपयोग करके, सब कुछ ठीक काम करता है।

उत्तर

23

अपने स्वयं के कंपाइलर के साथ जेडीके 8 और आईडीई (या कोई अन्य कोड प्रोसेसिंग टूल/फ्रेमवर्क) का उपयोग करते समय, जैसे कि एक्लिप्स, आपको जावा 8 समर्थन के साथ एक संस्करण में टूल अपडेट करना होगा, भले ही आप इसका उपयोग नहीं कर रहे हों नई जावा 8 विशेषताएं।

कारण यह है कि संकलक इन वर्गों का संदर्भ देने वाले आपके सॉफ़्टवेयर को संकलित करने के लिए जेआरई की नई श्रेणी फ़ाइलों को लोड करने में सक्षम होना चाहिए।

कभी-कभी जब आप कक्षा फ़ाइलों के नए संस्करण संख्या को अनदेखा करते हैं तो आप पुराने कंपाइलर से दूर हो सकते हैं। लेकिन कुछ प्रकार पुराने वर्ग फ़ाइल पार्सर्स को भ्रमित करेंगे क्योंकि वे नई सुविधाओं का उपयोग करते हैं, विशेष रूप से AnnotatedElement, जो अब default विधियां हैं, और Map.Entry, interface जो अब static विधियां हैं।

ऐसा लगता है कि ग्रहण संदर्भों के बीच कोई फर्क नहीं पड़ता है जिसके लिए कोई वर्ग फ़ाइल नहीं मिल सकती है और क्लास फाइलें पढ़ने में विफल रहीं, "« classname » हल नहीं किया जा सकता"।

यह ईसीजे का उपयोग एम्बेडेड कंपाइलर के रूप में सभी उपकरणों और ढांचे पर लागू होता है।

+0

ठीक है, तर्क लगता है। धन्यवाद! :) – Corsair

+3

बस पूर्णता के लिए, यह तब लागू होता है जब संकलक त्रुटि में उल्लिखित वर्ग ['Map.Entry'] है (http://docs.oracle.com/javase/8/docs/api/java/util/Map .ntry.html) (जैसा कि बहुत सारे प्रश्नों में है) क्योंकि 'इंटरफ़ेस' में अब' स्थिर 'विधियां हैं ... – Holger

+1

आपको अपना आईडीई अपडेट करने की आवश्यकता नहीं है। आप एक पुराने जेडीके/जेआरई भी स्थापित कर सकते हैं और निर्दिष्ट कर सकते हैं कि ग्रहण पुराने संस्करण (विंडो> प्राथमिकताएं> स्थापित जेआरई) का उपयोग करें। जैसे मैंने सी: \ प्रोग्राम फ़ाइलें \ जावा \ jdk1.7.0_67 \ jre निर्दिष्ट किया है और त्रुटि चली गई है। – Jim

1

इस बिलाव (question डुप्लीकेट के रूप में बंद कर दिया और यहां पुनर्निर्देश गया था) ग्रहण के भीतर से चलाने में आप के लिए होता है, → सर्वर → → संपादित रनटाइम वातावरण → बिलाव संस्करण ... प्राथमिकताएं पर जाएं और यह सुनिश्चित करें चयनित JRE से मेल खाता है टॉमकैट संस्करण। (शायद आपको एक स्थापित करने की आवश्यकता है।)

+0

वास्तव में वास्तव में समस्या को सुधारने के तरीके के रूप में व्यावहारिक सलाह प्रदान करने के लिए किया गया है! – Geeb

0

मैं जेआरई 8 से जेआरई 7 में बदलता हूं और एक्लिप्स को पुनरारंभ करता हूं तो यह ठीक काम करता है।

0

मैं जेआरई 8 के साथ एक्लिप्स हेलीओस का उपयोग कर रहा था और सॉफ़्टवेयर को समस्या को हल करने का अद्यतन कर रहा था।

अब मैं ग्रहण मंगल ग्रह का उपयोग कर रहा है और बस ठीक काम करता है ->https://eclipse.org/downloads/

0

समाधान 1:

स्रोत स्तर बदलने का प्रयास करें।

  1. प्रोजेक्ट> प्राथमिकताएं> जावा कंपाइलर पर जाएं।
  2. परियोजना विशिष्ट सेटिंग्स सक्षम करें
  3. संकलक अनुपालन स्तर 1.4 या उससे नीचे सेट करें।
  4. पुनः प्रारंभ

समाधान 2:

  1. एक नया कार्यक्षेत्र बनाएँ।
  2. प्रोजेक्ट फ़ाइलों को नए वर्कस्पेस में कॉपी करें।
  3. प्रोजेक्ट को ग्रहण और पुनर्निर्माण में आयात करें।
संबंधित मुद्दे