2010-07-12 28 views
12

मैं HttpClient 4.0.1 से नमूना अनुप्रयोग चलाने की कोशिश कर रहा हूं। यह उदाहरण अनुभाग से ClientMultiThreadedExecution.java फ़ाइल है। मैंने इन फ़ाइलों को क्लासपाथ में रखा है: apache-mime4j-0.6.jar; commons-codec-1.3.jar; commons-logging-1.1.1.jar; httpclient-4.0.1.jar; httpcore-4.0.1.jar; httpmime-4.0.1.jar और फ़ाइल सही ढंग से संकलित करती है। रनटाइम पर मुझे निम्न त्रुटि मिलती है:HttpClient NoClassDefFoundError

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/client/methods/HttpUriRequest 
Caused by: java.lang.ClassNotFoundException: org.apache.http.client.methods.HttpUriRequest 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251) 
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) 

क्या मुझे कोई संदर्भ याद आ रहा है? यह क्लासपाथ त्रुटि की तरह लगता है लेकिन मुझे पता नहीं लगा कि कौन सी जार फ़ाइल शामिल है? आपकी मदद के लिए अग्रिम धन्यवाद।

उत्तर

5

यह अपवाद बताता है कि उल्लिखित वर्ग रनटाइम क्लासपाथ में अनुपलब्ध है।

प्रोग्राम को निष्पादित करने के तरीके के आधार पर रनटाइम क्लासपाथ निर्दिष्ट करने के कई तरीके हैं। चूंकि एक सभ्य आईडीई यह आपके हाथों से पारदर्शी रूप से लेता है, इसलिए मैं शर्त लगाता हूं कि आप इसे कमांड प्रॉम्प्ट में चला रहे हैं।

आप java.exe -jar द्वारा एक जार फ़ाइल के रूप में चल रहा है या फ़ाइल doubleclicking रहे हैं, तो आप जार के MANIFEST.MF फ़ाइल के Class-Path प्रविष्टि में classpath निर्दिष्ट करने के लिए की जरूरत है। ध्यान दें कि %CLASSPATH% पर्यावरण चर और -cp और -classpath तर्क अनदेखा करते हैं जब भी आप एक JAR निष्पादित करते हैं।

यदि आप java.exe द्वारा "सादे वेनिला" जावा एप्लिकेशन के रूप में इसे चला रहे हैं, तो आपको इसे -cp या -classpath तर्क में निर्दिष्ट करना होगा। ध्यान दें कि जब भी आप इस तर्क का उपयोग करते हैं, %CLASSPATH% पर्यावरण चर अनदेखा किया गया है।

किसी भी तरह से, क्लासपाथ जार फ़ाइलों (या तो पूर्ण पथ या वर्तमान कार्यशील निर्देशिका के सापेक्ष) के पथों की एक (अर्ध) कोलोसेपेरेटेड स्ट्रिंग का अस्तित्व होना चाहिए। जैसे

java -cp .;/path/to/file1.jar;/path/to/file2.jar com.example.MyClass

(यदि आप यूनिक्स/लिनक्स पर हैं, पथ विभाजक के रूप में के बजाय पेट अर्धविराम का उपयोग करें) Maven इस आयात दायरे के माध्यम से किया जा सकता है के साथ

5

वह कक्षा httpclient-4.0.1.jar में है (मैंने इसे अभी सुनिश्चित करने के लिए डाउनलोड किया है) इसलिए मुझे संदेह है कि आपने इसे क्लासपाथ में ठीक से नहीं रखा है।

आप अपना कोड कैसे संकलित और चला रहे हैं?

+0

टेक्स्टपैड का उपयोग करना। यह जेएआर फाइलों के समान निर्देशिका में है और मेरे पास यह कॉन्फ़िगरेशन $ फ़ाइल-सीपी।; Apache-mime4j-0.6.jar; commons-codec-1.3.jar; commons-logging-1.1.1.jar; httpclient-4.0.1.jar; httpcore-4.0.1.jar; httpmime-4.0.1.jar यह ठीक संकलित करता है लेकिन नहीं चलता है। – user389753

0

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

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

आशा है कि किसी की मदद करें!

1

क्लाउडर-क्विकस्टार्ट-वीएम -5.8 के अंदर एक्लिप्स लूना 2 (4.4.2) चला रहा है।0 मैं निम्नलिखित

  • अपाचे-httpcomponents-httpcore.jar
  • httpclient-4.5.3.jar
  • httpclient-संचय-4.5.3.jar

जोड़ने के लिए था .. और फिर यह त्रुटियों के बिना काम किया

संबंधित मुद्दे