दिलचस्प पोस्ट
एंड्रॉइड एसएमएस प्रोग्राम को हटाना क्या .NET (C # या VB.NET) के लिए कोई UPnP लाइब्रेरी है? दशमलव विभाजक अल्पविराम (',') संख्या के साथ संपादनटैप में सामान्य इनपुट प्रकार सुपर कन्स्ट्रक्टर को कैसे खोलें? IIS7 न्यूनतम अनुमति अनुरोधों को देने में विफल रहा $ गुंजाइश और $ रूट स्कोप के बीच अंतर क्या नेट रिमोटिंग वास्तव में बहिष्कृत है? इस अभिव्यक्ति की भाषा $ {pageContext.request.contextPath} वास्तव में JSP EL में क्या करती है? स्थिर पुस्तकालय में उद्देश्य-सी श्रेणियां अजगर: कॉल करने वाला विधि नाम कैसे नामित विधि में मिलता है? आप सरल PostgreSQL स्क्रिप्ट में चर का उपयोग कैसे करते हैं? कैरेक्टर एन्कोडिंगफ़िल्टर स्प्रिंग सुरक्षा 3.2.0 के साथ मिलकर काम नहीं करता है वसंत MVC प्रकार रूपांतरण: PropertyEditor या कनवर्टर? AJAX का उपयोग करके PHP फ़ाइल से उत्तर प्राप्त करें जावास्क्रिप्ट पार्स फ्लोट मेरे अल्पविराम के बाद दशकों की अनदेखी कर रहा है

मेवेन निर्भरता पर नोक्लेस डीफफाउंड एरर

मैवेन का मेरा पहला उपयोग और मैं निर्भरता के साथ फंस गया हूँ

मैंने ग्रहण और अतिरिक्त निर्भरता के साथ एक मैवेन प्रोजेक्ट बनाया है, और यह समस्याओं के बिना काम कर रहा था।

लेकिन जब मैं इसे कमांड लाइन के माध्यम से चलाने की कोशिश करता हूं:

$ mvn package # successfully completes $ java -cp target/bil138_4-0.0.1-SNAPSHOT.jar tr.edu.hacettepe.cs.b21127113.bil138_4.App # NoClassDefFoundError for dependencies 

यह निर्भरता को डाउनलोड करता है, सफलतापूर्वक बनाता है, लेकिन जब मैं इसे चलाने का प्रयास करता हूं, तो मुझे नोक्लासफफ़ाउंड एरर मिलता है:

 Exception in thread "main" java.lang.NoClassDefFoundError: org/codehaus/jackson/JsonParseException at tr.edu.hacettepe.cs.b21127113.bil138_4.db.DatabaseManager.<init>(DatabaseManager.java:16) at tr.edu.hacettepe.cs.b21127113.bil138_4.db.DatabaseManager.<init>(DatabaseManager.java:22) at tr.edu.hacettepe.cs.b21127113.bil138_4.App.main(App.java:10) Caused by: java.lang.ClassNotFoundException: org.codehaus.jackson.JsonParseException at java.net.URLClassLoader$1.run(URLClassLoader.java:217) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:205) at java.lang.ClassLoader.loadClass(ClassLoader.java:321) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) at java.lang.ClassLoader.loadClass(ClassLoader.java:266) ... 3 more 

मेरा पॉम। एक्सएमएल इस तरह है:

 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>tr.edu.hacettepe.cs.b21127113</groupId> <artifactId>bil138_4</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>bil138_4</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-asl</artifactId> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-asl</artifactId> <version>1.9.6</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.6</version> </dependency> </dependencies> </dependencyManagement> </project> 

क्या कोई मेरी मदद कर सकता है?

वेब के समाधान से एकत्रित समाधान "मेवेन निर्भरता पर नोक्लेस डीफफाउंड एरर"

जब मैं इसे चलाने की कोशिश करता हूं, मुझे नोक्लास डीफफाउंड एरर मिलता है

इसे कैसे चलाएं? आप संभवतः इसे अपने मैवेन क्लासपाथ को सही ढंग से आयात किए बिना ग्रहण के साथ चलाने का प्रयास कर रहे हैं उस के लिए ग्रहण को एकीकृत करने के लिए m2eclipse प्लगइन देखें

यह सत्यापित करने के लिए कि आपका Maven कॉन्फ़िग सही है, तो आप ऐप का उपयोग करके अपने ऐप को चला सकते हैं:

 mvn exec:java -D exec.mainClass=<your main class> 

अद्यतन: पहले, exec:java चलने में आपकी त्रुटि के बारे में exec:java , आपका मुख्य वर्ग tr.edu.hacettepe.cs.b21127113.bil138_4.App । कक्षा के नामों के बारे में बात करते समय, वे (लगभग) हमेशा डॉट-अलग होते हैं सरल वर्ग का नाम सिर्फ अंतिम भाग है: आपके मामले में App । पूरी तरह से योग्य नाम पूर्ण पैकेज और सरल वर्ग का नाम है, और जब आप किसी चीज़ को चलाने के लिए चाहते हैं तो आप मेवेन या जावा को देते हैं। जो आप उपयोग करने का प्रयास कर रहे थे वह एक स्रोत फ़ाइल के लिए फ़ाइल सिस्टम पथ था। यह एक पूरी तरह से अलग जानवर है एक वर्ग का नाम आम तौर पर सीधे एक क्लास फ़ाइल में अनुवाद करता है जो कि फ़ाइल पथ में स्रोत फ़ाइल की तुलना में वर्ग पथ में पाया जाता है। आपके विशिष्ट मामले में, प्रश्न में क्लास फ़ाइल संभवत: target/classes/tr/edu/hacettepe/cs/b21127113/bil138_4/App.class क्योंकि target/classes/tr/edu/hacettepe/cs/b21127113/bil138_4/App.class target/classes लिए संकलित करता है, और जावा पारंपरिक रूप से प्रत्येक स्तर के लिए एक निर्देशिका बनाता है पैकेजिंग का

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

आपके वर्ग पथ को कम से कम और लाइन फ़ीड के बिना होने की आवश्यकता होगी:

 target/bil138_4-0.0.1-SNAPSHOT.jar: /home/utdemir/.m2/repository/org/codehaus/jackson/jackson-core-asl/1.9.6/jackson-core-asl-1.9.6.jar: /home/utdemir/.m2/repository/org/codehaus/jackson/jackson-mapper-asl/1.9.6/jackson-mapper-asl-1.9.6.jar 

ध्यान दें कि विंडोज पर विभाजक एक अर्धविराम (;) है

मैं इसे जल्द ही नहीं देख पाने के लिए माफी चाहता हूं समस्या आपके मूल पोस्ट में बैठा हुई थी, लेकिन मुझे यह याद आ गया।

डिफ़ॉल्ट रूप से, मेवेन JAR फ़ाइल में निर्भरता को बांधे नहीं करता है, और जब आप कमांड लाइन पर अपनी JAR फ़ाइल निष्पादित करने की कोशिश कर रहे हैं, तो आप उन्हें क्लासपाथ पर प्रदान नहीं कर रहे हैं यही कारण है कि जावा वीएम आपके कोड को निष्पादित करने की कोशिश करते समय लायब्रेरी श्रेणी फ़ाइलों को नहीं ढूँढ सकता।

आप मैन्युअल रूप से -cp पैरामीटर के साथ -cp पर लाइब्रेरी निर्दिष्ट कर सकते हैं, लेकिन यह तेज़ी से थकाऊ हो जाता है

एक बेहतर समाधान है कि लाइब्रेरी कोड "शेड" को आपकी आउटपुट JAR फ़ाइल में। ऐसा करने के लिए Maven-shade-plugin नामक एक मेवेन प्लगइन है आपको इसे अपने पोम में पंजीकृत करना होगा, और जब आप mvn package चलाते हैं तो यह आपके "वर्कर-जेएआर" को अपने वर्गों और वर्गों को अपने पुस्तकालय कोड के साथ mvn package

बस सभी आवश्यक पुस्तकालयों को बंडल करने के लिए, अपने POM को निम्नलिखित जोड़ें:

 <project> ... <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>1.6</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> </execution> </executions> </plugin> </plugins> </build> ... </project> 

एक बार यह किया जाता है, आप ऊपर दिए गए आदेशों को फिर से चला सकते हैं:

 $ mvn package $ java -cp target/bil138_4-0.0.1-SNAPSHOT.jar tr.edu.hacettepe.cs.b21127113.bil138_4.App 

यदि आप छाया-प्लगइन के आगे कॉन्फ़िगरेशन करना चाहते हैं तो क्या JARS को शामिल किया जाना चाहिए, एक निष्पादन योग्य JAR फ़ाइल के लिए मेन-क्लास निर्दिष्ट करना, और इसी तरह, maven-shade-plugin साइट पर "उदाहरण" अनुभाग देखें

आपको अपनी निर्भरता के लिए पॉम फ़ाइल में क्लासपाथ बनाना होगा इसलिए आपको सभी निर्भरता को एक स्थान में कॉपी करना होगा।

मेरे ब्लॉग की जांच करें http://madhawagunasekara.blogspot.com/2014/10/solving-javalangnoclassdeffounderror-in.html

 <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.1</version> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputdirectory>${project.build.directory}/lib</outputdirectory> <overwritereleases>false</overwritereleases> <overwritesnapshots>false</overwritesnapshots> <overwriteifnewer>true</overwriteifnewer> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.4</version> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <mainClass>$fullqualified path to your main Class</mainClass> </manifest> </archive> </configuration> </plugin> </plugins> </build> 

यह मार्फिया जार के कारण है, जो आपके आउटपुट युद्ध / जार का हिस्सा नहीं है। ग्रहण या स्थानीय बिल्ड उन्हें कक्षा के हिस्से के रूप में शामिल करते हैं, लेकिन रिमोट बिल्ड या स्वत: / अनुसूचित बिल्ड उन्हें कक्षापथ का हिस्सा नहीं मानते हैं।

आप प्लगइन के जरिए निर्भर जार शामिल कर सकते हैं।

अपने पोम के प्लग इन अनुभाग में नीचे स्निपेट जोड़ें

  <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>3.0.0</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> </plugin> 

परियोजना के लिए चुनना -> साफ इसे हल करना चाहिए