ग्रहण त्रुटि: अप्रत्यक्ष रूप से आवश्यक .class फ़ाइलों से संदर्भित?


185

मुझे ग्रहण में त्रुटि हुई। इस त्रुटि संदेश का क्या अर्थ है:

प्रकार iglu.ir.TermVector को हल नहीं किया जा सकता है। यह अप्रत्यक्ष रूप से आवश्यक .class फ़ाइलों से संदर्भित है


21
जार जोड़ें जिसमें आपकी परियोजना के स्रोत पथ में iglu.ir.TermVector शामिल है।
हैरी जॉय

2
यदि आप सुनिश्चित हैं कि कक्षा प्रदान की गई है, तो अपनी सभी परियोजनाओं पर एक साफ और ताज़ा प्रयास करें
मिरको

यह मेरे जार में सकर्मक निर्भरता के कारण मेरे साथ हुआ
जनक मीणा

बिल्कुल सही! इस जार को pom.xml निर्भरता में मौजूद होने की आवश्यकता है।
गौरव

जवाबों:


192

इसका अर्थ है: "एक वर्ग जिसे आप उपयोग करते हैं, उसे एक अन्य वर्ग की आवश्यकता होती है जो वर्गपथ पर नहीं है।" आपको क्लास जार में आवश्यक जार जोड़ने के लिए सुनिश्चित करना चाहिए (जैसा कि हैरी जॉय सुझाव देता है)।


3
सार्वभौमिक और सरल उत्तर जो मुझे अलग-अलग मामलों में बहुत मदद करते हैं :) THX
Mariusz Chw

आप विशेष रूप से कक्षाओं को हटाने की कोशिश कर रहे हैं, लापता प्रकार के संदर्भ के लिए मूल कक्षाएं जांचें। यदि ऐसा हमेशा नहीं होता है तो इस संदेश का अर्थ है, यह वही है जो संभवतः सबसे अधिक समय का मतलब है।
butallmj

हाँ मैंने पाया कि यह संदर्भित जार में कुछ लापता जार के कारण था :) धन्यवाद।
अली इमरान

21
@ अरे, यह परोक्ष रूप से संदर्भित क्यों कहता है ? क्या यह नहीं कहना चाहिए कि यह बिल्कुल संदर्भित नहीं है ?
पचेरियर

2
@ स्पेसियर जो सच नहीं होगा। यह आपका कोड नहीं है जो सीधे इस प्रकार को संदर्भित कर रहा है, बल्कि आपके कोड का उपयोग करता है, इसलिए आपके कोड से उस प्रकार पर निर्भरता "केवल" सकर्मक है, लेकिन यह वहां है। "अप्रत्यक्ष रूप से" आपको बताता है कि कहां देखना है।
hiergiltdiestfu

21

यह संभावित रूप से ग्रहण के भ्रमित होने की बात है क्योंकि यह एक वास्तविक त्रुटि है। मैंने उस त्रुटि को नजरअंदाज कर दिया और वेब सेवा को चलाया जिसकी एंडपॉइंटइंटरफेस ने इसके बारे में शिकायत की थी, और यह हर बार संवाद से निपटने के अलावा, मैं इसे चलाना चाहता था। बस एक और अपारदर्शी त्रुटि जो मुझे कुछ नहीं बताती है।


यह भी एक जार में नहीं है। यह उन सभी परियोजनाओं में शामिल है, जहां यह किसी भी प्रासंगिकता में शामिल है।
जेरी मिलर

3
मैंने इस समस्या को ग्रहण में अनुभव किया है, फिर भी मावेन के माध्यम से ठीक काम किया है। यह फिक्स परियोजना को आवश्यक कार्यक्षेत्र वाले ग्रहण कार्यक्षेत्र में प्रोजेक्ट को हटाने और फिर से आयात करना था।
PiersyP

यह कभी-कभी हो सकता है, लेकिन मैं उन त्रुटियों में चला गया हूं जो समान प्रतिक्रिया देते हैं, और परियोजना का निर्माण नहीं कर सकते हैं।
क्रिस्टोफर कॉनरी

13

यह मेरे साथ कभी-कभी होता है, मैंने हमेशा यह तय किया है कि पुराने गुणों को साफ करने के लिए "mvan ग्रहण: स्वच्छ" कमांड के साथ और फिर mvan ग्रहण चलाएं: ग्रहण -वृत्पर्व = 2.0 (निश्चित रूप से वेब परियोजना के लिए)। कुछ पुराने गुणों को बचाया गया है इसलिए ग्रहण कभी-कभी भ्रमित होता है।


मैंने प्रोजेक्ट को साफ किया (प्रोजेक्ट-> क्लीन से ...) और इसने काम किया।
अनु शिबिन जोसेफ राज

mvn eclipse:cleanऔर / या mvan eclipse:eclipseयह काम करने के लिए जादू की चाल है।
एंटोनी मार्टिन

13

दूषित मावेन भंडार के कारण मुझे यह त्रुटि हुई

इसलिए, समस्या को ठीक करने के लिए, मुझे बस इतना करना होगा कि मैं अपने रिपॉजिटरी में जाऊं और उस फ़ोल्डर को हटा दूं जहां संबंधित .jar था, फिर update mavenएक्लिप्स में बाध्य करें ।


1
यह मेरे लिए काम करता है, जबकि उपरोक्त सभी नहीं था। समस्या तब हुई जब मेरी टीम के एक साथी ने पोम से रिपॉजिटरी के संस्करण को अपडेट किया।
iaL

8

ऐसा लगता है कि यह एक ज्ञात मुद्दा है (बग 67414) जिसे 3.0 में हल किया गया था ... किसी ने टिप्पणी की है कि यह 3.4 में भी उनके लिए हो रहा है।

इस बीच, आसपास का काम परियोजना से जेआरई सिस्टम लाइब्रेरी को हटाने और फिर इसे वापस जोड़ना है।

Here are the steps:

बिल्ड त्रुटि वाले प्रोजेक्ट के गुणों पर जाएं (राइट क्लिक> गुण)

"बिल्ड पथ" अनुभाग में "लाइब्रेरीज़" टैब देखें

सूची में "JRE सिस्टम लाइब्रेरी" ढूंढें (यदि यह गायब है तो यह त्रुटि संदेश ग्रहण बग नहीं बल्कि गलत कॉन्फ़िगर किया गया प्रोजेक्ट है)

"JRE सिस्टम लाइब्रेरी" निकालें

"लाइब्रेरी जोड़ें ..." को हिट करें, "JRE सिस्टम लाइब्रेरी" चुनें और प्रोजेक्ट के लिए उपयुक्त JRE जोड़ें (जैसे। 'कार्यक्षेत्र डिफ़ॉल्ट RRE')

लाइब्रेरी चयन में "समाप्त" और प्रोजेक्ट गुणों में "ओके" मारो और फिर प्रोजेक्ट के फिर से निर्माण की प्रतीक्षा करें

उम्मीद है कि त्रुटि का समाधान हो जाएगा ...


हां। मुझे स्प्रिंग-वेब-3.0.1 के साथ भी यही समस्या थी। कृपया ध्यान दें कि यह pom.xml में एक निर्भरता के रूप में पंजीकृत था, और पहले से ही कुछ संदर्भों में एक निर्भरता के रूप में काम कर रहा था, जब मैंने http.csrf () बनाया था। अक्षम करें ()। cors ()। अक्षम करें ()। httpBasic () और। ()। प्राधिकृत करें .ests () .MantMatchers (PUBLIC_MATCHERS) .permitAll ()। anysequestest ()) प्रमाणित यह टूट गया। फिर मैंने जार फ़ाइल डाउनलोड की और इसे पारंपरिक मैनुअल तरीके से आयात किया।
त्सुकिरोग्लौ फोटिस

5

यह त्रुटि तब होती है जब जार फ़ाइल में कक्षाएं जार की फ़ोल्डर संरचना के समान संरचना का पालन नहीं करती हैं।

उदाहरण के लिए यदि आपके पास वर्ग फ़ाइल में पैकेज com.test.exam है और इस वर्ग फ़ाइल के बाहर बनाए गए classes.jar में संरचना परीक्षण है ।exam ... त्रुटि डाली जाएगी। आपको अपनी classes.jar के पैकेज स्ट्रक्चर को सही करना होगा और फिर इसे एक्लिप्स बिल्ड पथ में शामिल करना होगा ...


4

मुझे यह अपवाद मिला क्योंकि ग्रहण jdk के एक अलग संस्करण में काम कर रहा था, बस सही, साफ और निर्माण में बदल गया और काम किया!


3

मुझे इस समस्या का एक दिलचस्प मामला ग्रहण के साथ 4.4.2 था। मेरी परियोजना (P1) ने एक बाहरी वर्ग (प्रोजेक्ट P2) को एक ही नाम से दो विधियों के साथ संदर्भित किया लेकिन अलग-अलग तर्क प्रकार:

public static void setItem(Integer id) …
public static void setItem(Item item) …

प्रकार Itemएक तीसरी परियोजना पी 3 में निहित था, जिसे मैं यहां दिखाई नहीं देना चाहता था। P1 को केवल पहली विधि कहा जाता है:

ExternalClass.setItem(Integer.valueOf(12345));

तो दूसरी विधि, जिसका उपयोग किया Item कक्षा का उपयोग किया था, का उपयोग नहीं किया गया था, और यह सच है कि पी 3 संकलन क्लासपाथ में नहीं था - अगर इसका उपयोग नहीं किया जाता है तो क्यों करना चाहिए।

फिर भी ग्रहण ने मुझे बताया

The type ...Item cannot be resolved.
It is indirectly referenced from required .class files

कमांड लाइन से संकलित करने से ऐसे किसी भी मुद्दे का उत्पादन नहीं हुआ। दूसरी विधि का नाम बदलना (यहां अप्रयुक्त!) ने ग्रहण में समस्या को दूर कर दिया, भी।


2
मैं बिल्कुल वैसा ही ग्रहण फोटोन रिलीज के साथ समस्या (4.8.0) का सामना कर रहा हूँ
डेलफिन


2

यदि आप अभी भी अपने सेटअप में कुछ भी गलत नहीं पाते हैं, तो आप प्रोजेक्ट की कोशिश कर सकते हैं -> कार्यक्षेत्र में सभी परियोजनाओं को साफ और साफ करें।

संपादित करें: क्षमा करें, verbose_mode का सुझाव नहीं देखा ... एक ही बात


2

मेरे लिए, यह तब होता है जब मैं अपने jdk को 1.8.0_60 पर अपग्रेड करता हूं, जब कि मेरे पुराने सेट का उपयोग लंबे समय से किया जाता है। अगर मैं वापस jdk1.7.0_25 पर आता हूं, तो ये सभी समस्याएँ दूर हो जाती हैं। यह JRE और पुस्तकालयों के बीच संगतता के बारे में एक समस्या लगती है।


1

मुझे त्रुटि तब मिली जब मैं सिर्फ कुछ svn सेटिंग्स बदल रहा था और कोड में कुछ भी नहीं। बस परियोजनाओं की सफाई में त्रुटि तय हुई।


1

मेरे मामले में, मैंने एक प्रोजेक्ट बनाया minSdkVersion=9और उसका और बनाया targetSdkVersion=17। मैंने स्वचालित रूप से उत्पन्न किया libs/android-support-v4.jar। मुझे भी इस्तेमाल करने की ActionBarActivityआदत डालनी थी android-support-v7-appcomapt.jar। इसलिए मैंने बस android-support-v7-appcompat.jarफ़ाइल को android-sdk/extras/andrid/support/v7/appcompat/libsफ़ोल्डर से कॉपी किया और अपने प्रोजेक्ट libsफ़ोल्डर में पेस्ट किया । और इससे उपरोक्त त्रुटि हुई। इसलिए मूल रूप से, मुझे अपने प्रोजेक्ट फ़ोल्डर android-support-v4.jarसे फ़ाइल डालने की आवश्यकता थी । मेरे ज्ञान के अनुसार फ़ाइल में फ़ाइल पर निर्भरता थी । इसलिए, इसे अपनी परियोजना की आवश्यकता थी, मेरे प्रोजेक्ट के बजाय, स्वचालित रूप से बनाई गई फ़ाइल।android-sdk/extras/andrid/support/v7/appcompat/libslibsv7.jarv4.jarv4.jarv4.jar


1

जल्दी और बस मैंने इसे इस तरह से तय किया (मैं ADT संस्करण का उपयोग करता हूं: v21.0.0-531062 विंडोज एक्सपी होम संस्करण पर)

  1. प्रकट फ़ाइल खोल दी।
  2. मौजूदा प्रोजेक्ट minSdkVersion को उसी मान में परिवर्तित किया गया जो maxSdkVersion (सलाह: यह एक नई परियोजना बनाने के लिए अच्छा हो सकता है और देखें कि यह maxSdkVersion है)
  3. प्रकट फ़ाइल सहेजें।
  4. प्रोजेक्ट पर राइट क्लिक करें और बिल्ड प्रोजेक्ट चुनें।
  5. शीर्ष मेनू से: प्रोजेक्ट - क्लीन .. - चेक केवल संबंधित प्रोजेक्ट, नीचे मैंने चेक किया एक निर्माण तुरंत शुरू करें और केवल चयनित प्रोजेक्ट और ओके बनाएं।
  6. जावा फ़ाइल खोलें - अब कोई लाल त्रुटि नहीं!
  7. ऊपर चरण 1 पर वापस जाएं और वापस जाने के लिए मिनीस्कर्ट बदलकर इसका मूल मूल्य (जितना संभव हो उतने एंड्रॉइड वर्जन को सुपरपार्ट करें)।

यह काम किया लेकिन समस्या हर कुछ दिनों में लौट आती है। मैं ऊपर जैसा ही करता हूं और यह मुझे हल करता है और मुझे विकसित होने देता है।


0

क्लास फ़ाइल गुम होने के पहले से सुझाए गए कारण के अलावा, यह त्रुटि डुप्लिकेट क्लास फ़ाइल का संकेत भी दे सकती है, इस त्रुटि की रिपोर्ट तब करती है जब बिल्ड पथ पर कोई क्लास फ़ाइल किसी अन्य वर्ग का उपयोग करती है जिसमें बिल्ड पथ में एकाधिक परिभाषाएँ होती हैं।


0

चूँकि आप हमें बहुत कम जानकारी देते हैं, सबसे अधिक संभावना है कि आपने क्या किया, जो कि बनाने के लिए एक अविश्वसनीय रूप से आसान गलती है, जो कि शीर्षक के बजाय है

Build Path > Configure Build Path > Projects

और वहां से अपने अतिरिक्त प्रोजेक्ट फ़ोल्डर को जोड़ने के बजाय, आप गए

Build Path > Configure Build Path > Libraries

और इसके बजाय अपने प्रोजेक्ट फ़ोल्डर को वहां से जोड़ा।

यह निश्चित रूप से मामला है यदि आपका कोड सब ठीक है, लेकिन स्वचालित रूप से आयात को पुन: व्यवस्थित करने पर ctrl+space com.your.additionalproject के संदर्भ में आपके आयात विवरणों के बजाय शॉर्टकट के करने पर, आपके संदर्भ सभी bin.com.your.additionalproject को इंगित करते हैं।

बिन नोट करें। मतलब यह है कि आप-अप्रत्यक्ष रूप से अपनी कक्षा को अपनी अन्य परियोजना फ़ोल्डर संरचना को लाइब्रेरी के रूप में मानकर अपनी कक्षा का उल्लेख कर रहे हैं, जिससे आपका आईडीई ठीक उसी बाइनरी क्लास को खोजने का काम कर रहा है जिसे आप संदर्भित कर रहे हैं।

इसे ठीक करने के लिए, पुस्तकालयों से फ़ोल्डर को हटा दें, और इसके बजाय इसे प्रोजेक्ट टैब के तहत जोड़ें, और अपने आयातों को पुनर्गठित करें। आपका प्रोजेक्ट ठीक काम करना चाहिए।


0

जब मैं एक नए ग्रहण संस्करण का उपयोग करता हूं और पिछले कार्यक्षेत्र का उपयोग करने का प्रयास करता हूं, जिसका उपयोग मैंने पुराने ग्रहण संस्करण के साथ किया था, तो यह त्रुटि उत्पन्न हुई।

यहां बताया गया है कि मैं इस समस्या को कैसे हल करता हूं:

पैकेज एक्सप्लोरर पर मेरी परियोजना पर राइट क्लिक करें -> गुण -> जावा बिल्ड पथ -> पुस्तकालय -> मुझे JRE सिस्टम लाइब्रेरी पर एक त्रुटि (क्रॉस साइन) दिखाई देती है। क्योंकि रास्ता नहीं मिल सकता है। -> JRE सिस्टम लाइब्रेरी पर डबल क्लिक करें -> "कार्यक्षेत्र डिफ़ॉल्ट JRE" विकल्प चुनें -> समाप्त -> ठीक है। -> BUM IT काम कर रहा है

FYI करें।


0

मेरे मामले में यह मेरी pom.xmlफ़ाइल में एक नई निर्भरता जोड़ने का परिणाम था ।

नई निर्भरता एक पुस्तकालय (2.5) के पुराने संस्करण पर निर्भर करती थी। उसी पुस्तकालय को मेरे द्वारा दूसरे पुस्तकालय की आवश्यकता थीpom.xml , लेकिन उसे संस्करण 3.0 की आवश्यकता थी।

किसी कारण से, जब मावेन का सामना इन संघर्षों से होता है, तो यह सबसे हालिया संस्करण को छोड़ देता है। ग्रहण में जब pom.xmlआप देखते हैं कि नीचे निर्भरता हल करने के लिए "निर्भरता पदानुक्रम" टैब का चयन कर सकते हैं। यहां आप पाएंगे कि क्या पुस्तकालय (और इस प्रकार वर्ग) को इस कारण से छोड़ दिया गया है।

मेरे मामले में यह नए संस्करण को बंद करने जैसा सरल था। आप प्रविष्टि को राइट-क्लिक करके ऐसा कर सकते हैं - इसे संदर्भ मेनू में बंद करने का विकल्प है।


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