मैंने जावा में लिखे गए कुछ ओपन सोर्स सॉफ़्टवेयर डाउनलोड किए हैं और एक्लिप्स का उपयोग करके इसे संकलित करने की कोशिश की है। मुझे कुछ फाइलें मिलीं: " क्लास नाम 'का पदानुक्रम असंगत है "। इन त्रुटियों का क्या कारण है और मैं उन्हें कैसे ठीक करूं?
मैंने जावा में लिखे गए कुछ ओपन सोर्स सॉफ़्टवेयर डाउनलोड किए हैं और एक्लिप्स का उपयोग करके इसे संकलित करने की कोशिश की है। मुझे कुछ फाइलें मिलीं: " क्लास नाम 'का पदानुक्रम असंगत है "। इन त्रुटियों का क्या कारण है और मैं उन्हें कैसे ठीक करूं?
जवाबों:
इसका मतलब है कि आप एक गैर-मौजूदा इंटरफ़ेस लागू करने का प्रयास कर रहे हैं या आप एक गैर-मौजूदा वर्ग का विस्तार कर रहे हैं।
अपने ग्रहण को ताज़ा करने की कोशिश करें।
यदि यह काम नहीं करता है, तो इसका मतलब यह हो सकता है कि आपके पास एक JAR का संदर्भ है जो बिल्ड पथ में नहीं है। अपने प्रोजेक्ट के क्लासपाथ की जांच करें और सत्यापित करें कि इंटरफ़ेस या क्लास वाला जार इसमें है।
कभी-कभी ऐसा होता है जब आप एक जार जोड़ते हैं जिसकी आपको आवश्यकता होती है, लेकिन उन जार को शामिल न करें जिन्हें आईटी की आवश्यकता है। मेरे मामले में tomcat / lib में सभी जार जोड़ने से मुझे इस समस्या को हल करने में मदद मिली। मैं एक वेब-ऐप पर काम कर रहा हूं।
अपनी त्रुटियों (टैब "मार्कर") की जाँच करें। मेरे पास निम्न त्रुटि भी थी:
परियोजना में आवश्यक पुस्तकालय के लिए पुरालेख नहीं पढ़ा जा सकता है ...
और जब तय किया गया कि "असंगत-त्रुटि" गायब हो गई।
वास्तव में मैंने निर्माण पथ में जार जोड़े थे, लेकिन किसी कारण से उन्हें त्रुटि के साथ नहीं पढ़ा जा सका
परियोजना में आवश्यक पुस्तकालय के लिए पुरालेख को पढ़ा नहीं जा सकता है या एक वैध ज़िप फ़ाइल नहीं है
इसलिए इसके बजाय मैंने उन्हें "बाहरी जार" के रूप में जोड़ा। इससे मदद मिली और सभी संकलन समस्याएँ नहीं रहीं!
एक और मामला मेरे पास है। सही प्रोजेक्ट पथ दें, और इसे ग्रहण करने के लिए आयात करें।
फिर प्रोजेक्ट पर जाएं -> क्लीन -> क्लीन सभी प्रोजेक्ट।
यह त्रुटि आपको तब दिखाई देगी जब आपकी लाइब्रेरी फ़ाइल में कुछ क्लास में आपके पास classpath में गैर-मौजूदा क्लैसे (s) का संदर्भ होता है जो किसी अन्य जार फ़ाइल में हो सकता है। यहां, मुझे यह त्रुटि तब मिली जब मैंने जोड़ा नहीं org.springframework.beans-3.1.2.RELEASE.jar
था और एक कक्षा को बढ़ा दिया था org.springframework.jdbc.core.support.JdbcDaoSupport
, जो org.springframework.jdbc-3.1.2.RELEASE.jar
मेरे वर्गपथ में थी।
समस्या यह हो सकती है कि आपने गलत जार शामिल किए हैं। मुझे भी यही समस्या थी और इसका कारण यह था कि मैंने प्रोजेक्ट के बिल्ड पाथ में गलत डिफ़ॉल्ट JRE लाइब्रेरी को शामिल किया था। मैंने एक अन्य संस्करण के साथ जावा को स्थापित किया था और एक अलग संस्करण के साथ जावा की जेआरई फाइलें शामिल थी। (मैंने अपने सिस्टम में JRE 1.6 स्थापित किया था और JRE लाइब्रेरी 1.7 में पहले से स्थापित जावा के कारण बिल्ड पथ में शामिल था) हो सकता है कि क्या आप जाँच कर सकते हैं कि JRE लाइब्रेरी जिसे आपने बिल्ड पथ में शामिल किया है, सही संस्करण का है। जावा संस्करण जो आपने अपने सिस्टम में संस्थापित किया है।
मुझे एक्लिप्स जूनो पर इस समस्या का अनुभव हुआ, मूल कारण यह था कि हालांकि कुछ स्प्रिंग जार को क्षणिक मावेन निर्भरता द्वारा शामिल किया जा रहा था, जो कि वे गलत संस्करणों में शामिल थे।
इसलिए आपको यह जांचना चाहिए कि क्या एक मौड्यूलर फ्रेमवर्क का उपयोग वसंत के रूप में किया जा रहा है कि हर मॉड्यूल (या कम से कम सबसे महत्वपूर्ण: कोर, सेम, संदर्भ, अनूप, टीएक्स, आदि) एक ही संस्करण में हैं।
समस्या को हल करने के लिए मैंने क्षणिक निर्भरता के गलत संस्करण से बचने के लिए मावेन पर निर्भरता के बहिष्करण का उपयोग किया।
त्रुटि: "वर्ग नाम" प्रकार की पदानुक्रम असंगत त्रुटि है।
समाधान: अन्य OtherDepJar {} -> "other.dep.jar" के अंदर है ।
कक्षा DepJar OtherDepJar {} -> का विस्तार "dep.jar" के अंदर करती है ।
क्लास प्रॉब्लमेटिकक्लास DepJar {} -> का विस्तार मौजूदा प्रोजेक्ट के अंदर है।
यदि dep.jar प्रोजेक्ट के क्लासपाथ में है, लेकिन other.dep.jar प्रोजेक्ट के क्लासपैथ में नहीं है, तो ग्रहण "प्रकार की पदानुक्रम ... असंगत त्रुटि" दिखाएगा।
मेरे लिए, यह मुद्दा गलत आयात के कारण था। वास्तव में, v7 समर्थन पुस्तकालय को जोड़ने के बाद आयात को अद्यतन करने की आवश्यकता है।
यह आपकी परियोजना के प्रत्येक वर्ग के लिए निम्नानुसार करके तय किया जा सकता है :
import android.[*]
प्रत्येक कक्षा में, सभी पंक्तियों को हटा देंandroid.support.[*]
(और नहीं android.[*]
)।यह निश्चित रूप से था क्योंकि लापता निर्भरताएं जो मेरे मावेन pom.xml में नहीं थीं।
उदाहरण के लिए, मैं ब्रॉडलेफ़ ईकॉमर्स डेमो साइट के मेरे कार्यान्वयन के लिए एकीकरण परीक्षण बनाना चाहता था।
मैंने अपने कॉन्फ़िगरेशन फ़ाइलों और आधार परीक्षण कक्षाओं का पुन: उपयोग करने के लिए ब्रॉडलेफ़ कॉमर्स से एकीकरण परीक्षणों के साथ एक ब्रॉडलाइफ़ जार को शामिल किया था। उस परियोजना में अन्य परीक्षण निर्भरताएं थीं जिन्हें मैंने शामिल नहीं किया था और मुझे "असंगत पदानुक्रम" त्रुटि प्राप्त हुई।
Broadleaf / pom.xml से "परीक्षण निर्भरता" और संबंधित गुण चर की प्रतिलिपि बनाने के बाद, जो Broadleaf / pom.xml में प्रत्येक निर्भरता के लिए संस्करण प्रदान करते हैं, त्रुटि चली गई।
गुण थे:
<geb.version>0.9.3</geb.version>
<spock.version>0.7-groovy-2.0</spock.version>
<selenium.version>2.42.2</selenium.version>
<groovy.version>2.1.8</groovy.version>
निर्भरताएं थीं:
<dependency>
<groupId>org.broadleafcommerce</groupId>
<artifactId>integration</artifactId>
<type>jar</type>
<classifier>tests</classifier>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.broadleafcommerce</groupId>
<artifactId>broadleaf-framework</artifactId>
<version>${blc.version}</version><!--$NO-MVN-MAN-VER$ -->
<classifier>tests</classifier>
</dependency>
<dependency>
<groupId>com.icegreen</groupId>
<artifactId>greenmail</artifactId>
<version>1.3</version>
<type>jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.easymock</groupId>
<artifactId>easymock</artifactId>
<version>2.5.1</version>
<type>jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.easymock</groupId>
<artifactId>easymockclassextension</artifactId>
<version>2.4</version>
<type>jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>5.9</version>
<type>jar</type>
<classifier>jdk15</classifier>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>${groovy.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.gebish</groupId>
<artifactId>geb-core</artifactId>
<version>${geb.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.gebish</groupId>
<artifactId>geb-spock</artifactId>
<version>${geb.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.spockframework</groupId>
<artifactId>spock-core</artifactId>
<version>${spock.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-support</artifactId>
<version>${selenium.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-firefox-driver</artifactId>
<version>${selenium.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-chrome-driver</artifactId>
<version>${selenium.version}</version>
<scope>test</scope>
</dependency>
<!-- Logging -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
<type>jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.1</version>
<type>jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.6.1</version>
<type>jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.1</version>
<type>jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>2.3.1</version>
<type>jar</type>
<scope>test</scope>
</dependency>
यदि विस्तारित वर्ग में समस्या है, तो उपरोक्त त्रुटि संदेश प्रदर्शित होगा।
उदाहरण
class Example extends Example1 {
}
में मुद्दों को ठीक करें Example1
मेरे पास एक ही सटीक समस्या मार्कर था और एक विधि से @Override एनोटेशन को हटाकर इसे हल किया जो वास्तव में पहला कार्यान्वयन था ("सुपर" एक एक अमूर्त विधि) और ओवरराइड नहीं।
मेरे मामले में, कई वर्गों में आयात संदर्भों में एक अतिरिक्त शब्द था। मैंने इसे सही आयात करने के लिए सभी फाइलों को संपादित करके हल किया। मैंने मैन्युअल रूप से संपादन करना शुरू कर दिया। लेकिन जब मैंने पैटर्न देखा, तो मैंने इसे एक खोज के साथ स्वचालित कर दिया .. ग्रहण में। इससे त्रुटि का समाधान हुआ।
मेरे लिए यह Google API के साथ Android API स्तर को एक में बदल रहा था
मुझे भी यह समस्या हो रही थी ... मुझे पता चला कि कक्षा का वह पदानुक्रम जो इस अपवाद को फेंक रहा था, उसे ग्रहण द्वारा अपने मूल वर्ग में वापस नहीं लाया जा सकता ... I
मेरे मामले में, मेरे पास 3 जावा परियोजना है: ए, बी और सी ... जहां ए और बी मावेन परियोजनाएं हैं और सी एक नियमित जावा ग्रहण परियोजना है ...
प्रोजेक्ट ए में, मेरे पास इंटरफ़ेस "इंटरफ़ेसए" है ... प्रोजेक्ट बी में, मेरे पास "इंटरफ़ेसएबी" है जो "इंटरफ़ेसए" का विस्तार करता है। परियोजना सी में, मेरे पास कंक्रीट क्लास "क्लाससी" है जो "इंटरफ़ेसबी" को लागू करता है।
"प्रोजेक्ट C" अपने बिल्ड पथ में "प्रोजेक्ट B" शामिल था, लेकिन "प्रोजेक्ट A" नहीं था (इसलिए यह त्रुटि का कारण था) .... "C" के बिल्ड पथ के अंदर "प्रोजेक्ट A" शामिल करने के बाद सब कुछ सामान्य हो गया ...
मेरे पास एक वर्ग था जो OSPi के साथ एक परियोजना में लेबलप्रॉइडर का विस्तार करता है, वहां त्रुटि हुई। इसका हल यह था: org.eclipse.jface को आवश्यक प्लगिनों में जोड़ना। घोषणापत्र में आवश्यक संकुल जैसे org.eclipse.jface.viewers आयात करने के बजाय।
यदि आप केवल ग्रहण परियोजना का आयात कर रहे हैं तो 1. परियोजना संपत्तियों के तहत जावा निर्माण पथ सेटिंग पर जाएं। 2. यदि JRE सिस्टम लाइब्रेरी में एरर साइन अटैच है, तो उसे डबल क्लिक करके एडिट लाइब्रेरी विंडो खोलें। सिस्टम के सही जावा वर्जन के लिए एक्जीक्यूशन एन्वायरमेंट को बदलें या रेडियो बटन असाइन करके अन्य सेटिंग्स एडिट करें चुनें उनको। 4. फिनिश पर क्लिक करें
प्रोजेक्ट फ़ोल्डर पर राइट क्लिक करें और "जावा बिल्ड पाथ" चुनें। "जावा बिल्ड पाथ" के तहत आपको पुस्तकालयों को देखने में सक्षम होना चाहिए। ग्रहण उन पुस्तकालयों में से किसी में त्रुटि दिखाएगा। उन मुद्दों को हल करने से समस्या को हल करने में मदद मिलेगी।
मुझे एक शाखा से कुछ git मर्ज करने के बाद यह त्रुटि हुई जहां मेरी कक्षाओं ने एक नया इंटरफ़ेस बढ़ाया। यह पैकेज एक्सप्लोरर में फ़ाइल-ट्री को रीफ्रेश (F5) करने के लिए पर्याप्त था ग्रहण फ्रेम ।
ऐसा लगता है कि ग्रहण ने सब कुछ ठीक से अपडेट नहीं किया और इसलिए कक्षाएं एक गैर-मौजूदा-अभी तक इंटरफ़ेस का विस्तार कर रही थीं। ताज़ा करने के बाद, सभी त्रुटियां गायब हो गईं।
Maven
> करना थाDownload Source
।