.Jar फ़ाइलों से कक्षाओं का उपयोग कैसे करें?


134

मैंने JAR फ़ाइलों के लिए सूर्य पर जावा ट्यूटोरियल पढ़ा, लेकिन मैं अभी भी अपनी समस्या का हल नहीं ढूंढ पा रहा हूँ। मुझे jtwitter.jar नामक जार फ़ाइल से एक वर्ग का उपयोग करने की आवश्यकता है, मैंने फ़ाइल डाउनलोड की है, और इसे निष्पादित करने की कोशिश की है (मुझे कल पता चला है कि .जार फाइलें उन पर डबल क्लिक करके निष्पादित की जा सकती हैं) और विस्टा ने मुझे एक त्रुटि दी। " [पथ] /jtwitter.jar "से मुख्य-वर्ग मैनिफ़ेस्ट विशेषता लोड करने में विफल।

वह लड़का जिसने कोड .jar फ़ाइल को मुझे आयात करना चाहता है, लेकिन मैं अपने कोड में इसे आयात करने के लिए .jar फ़ाइल को कहाँ संग्रहीत करता हूँ? मैंने एक ही निर्देशिका में .jar फ़ाइल और अपनी .java फ़ाइल दोनों को डालने की कोशिश की, काम नहीं किया।

मैं जिस फ़ाइल के लिए काम करने की कोशिश कर रहा हूँ वह यहाँ है: http://www.winterwell.com/software/jtwitter.php

मैं JCreator LE का उपयोग कर रहा हूं।


13
क्यों एक डाउनवोट है? मेरी राय में, यह एक अच्छा सवाल है और उत्तरों में दिलचस्प जानकारी है! (+1)
ग्वारडा

जवाबों:


34

प्रत्येक जार फ़ाइल निष्पादन योग्य नहीं है।

अब, आपको उन कक्षाओं को आयात करने की आवश्यकता है, जो वहां जार के तहत हैं, आपकी जावा फ़ाइल में। उदाहरण के लिए,

import org.xml.sax.SAXException;

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

और अगर आप किसी आईडीई का उपयोग नहीं कर रहे हैं, तो कृपया javac -cp विकल्प देखें। हालाँकि, अपने प्रोग्राम को किसी jarफ़ाइल में पैकेज करना बेहतर है , और उसके भीतर सभी आवश्यक jars को शामिल करें । फिर, अपने निष्पादित करने के लिए jar, जैसे,

java -jar my_program.jar

आपके पास एक META-INF/MANIFEST.MFफ़ाइल होनी चाहिए jar। कैसे-कैसे, यहां देखें ।


बूढ़ा, मुझे पता है, लेकिन वास्तव में किसी importभी चीज की कोई जरूरत नहीं है - यह पूरी तरह से योग्य वर्ग का नाम लिखने से बचता है जो कभी भी वर्ग का उपयोग किया जाता है, केवल सरल वर्ग नाम ( SAXException) की अनुमति देता है - केवल नाम स्थान आयात करने का प्रकार
user85421

173

मान लें कि हमें Classnameउस फ़ाइल का उपयोग करने की आवश्यकता है जो जार फ़ाइल में निहित हैorg.example.jar

और आपका स्रोत फ़ाइल में mysource.javaइस तरह है:

import org.example.Classname;

public class mysource {
    public static void main(String[] argv) {
    ......
   }
}

सबसे पहले, जैसा कि आप देखते हैं, आपके कोड में आपको कक्षाओं को आयात करना होगा। वह करने के लिए जिसकी आपको आवश्यकता हैimport org.example.Classname;

दूसरा, जब आप स्रोत संकलित करते हैं, तो आपको जार फ़ाइल को संदर्भित करना होगा।

कृपया उपयोग करते समय :और ;संकलन करते समय अंतर पर ध्यान दें

  • यदि आप ऑपरेटिंग सिस्टम जैसे यूनिक्स के अधीन हैं:

    javac -cp '.:org.example.jar' mysource.java
  • यदि आप खिड़कियों के नीचे हैं:

    javac -cp .;org.example.jar mysource.java

इसके बाद, आप बाइटकोड फ़ाइल प्राप्त करते हैं mysource.class

अब आप इसे चला सकते हैं:

  • यदि आप ऑपरेटिंग सिस्टम जैसे यूनिक्स के अधीन हैं:

    java -cp '.:org.example.jar' mysource
  • यदि आप खिड़कियों के नीचे हैं:

    java -cp .;org.example.jar mysource

4
क्या आप इस संकेतन को थोड़ा और समझा सकते हैं? इससे मेरी समस्या ठीक हो गई, लेकिन दुर्भाग्य से मेरे पास कोई आईडिया नहीं है कि इस विशेष मामले में अर्धविराम / बृहदान्त्र का क्या अर्थ है।
कब्रिस्तान

2
इस अर्धविराम / बृहदान्त्र कहानी ने मुझे पूरा दिन दिया। कम से कम मुझे यह अब मिला, धन्यवाद!
मैक्सिम जुबेरव

1
@ChaseMeadors अर्धविराम / बृहदान्त्र का अनिवार्य रूप से मतलब है "और" यहाँ। इससे अलग .हो रहा है org.example.jar
डुओजमो

यदि आप स्किमिंग कर रहे हैं, तो अधिकांश *PATHचरों में अंतर को ध्यान में रखते हुए : .jar फ़ाइलों को व्यक्तिगत रूप से नामित करने की आवश्यकता है
डुओजमो

15

आपको क्लासपाथ में जार फ़ाइल जोड़ने की आवश्यकता है। अपने जावा वर्ग को संकलित करने के लिए:

javac -cp .;jwitter.jar MyClass.java

अपना कोड चलाने के लिए (बशर्ते कि MyClass में एक मुख्य विधि हो):

java -cp .;jwitter.jar MyClass

आपके पास जार फ़ाइल कहीं भी हो सकती है। उपरोक्त कार्य यदि जार फ़ाइल आपकी जावा फ़ाइल के समान निर्देशिका में है।


7

अपने कोड को कंपाइल / रन करते समय आपको .jar फ़ाइल को अपने classpath में डालना होगा। तब आप .jar में कक्षाओं के मानक आयात का उपयोग करते हैं।


6

जैसा कि वर्कमैड 3 कहता है, आपको जार फाइल आपके क्लासपाथ में होना चाहिए। यदि आप कमांडलाइन से संकलन कर रहे हैं, तो इसका मतलब होगा -क्लासपैथ ध्वज का उपयोग करना। (CLASSPATH पर्यावरण चर से बचें; यह गर्दन IMO में दर्द है।)

यदि आप एक आईडीई का उपयोग कर रहे हैं, तो कृपया हमें बताएं कि कौन सा और हम उस आईडीई के लिए विशिष्ट चरणों के साथ आपकी मदद कर सकते हैं।


अगर आप अपने ऐप को चलाने के लिए स्क्रिप्ट्स या कुछ और फेयरडैमन की तरह इस्तेमाल कर रहे हैं, तो classpath env वेरिएबल उपयोगी है। यह केवल एक दर्द है जब आप इसे विश्व स्तर पर उपयोग करते हैं :)
वर्कमैड 3

मैं अभी भी इसे स्पष्ट रूप से देखना पसंद करता हूं।
जॉन स्कीट

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