क्लास पाथ और बिल्ड पाथ में क्या अंतर है


86

मैं इन दो शब्दों के साथ भ्रमित हूँ।

इसके अलावा मुझे स्प्रिंग एमवीसी प्रोजेक्ट के src फ़ोल्डर के तहत एक फ़ाइल बनाने के लिए क्या करना चाहिए? जब मैं किसी फ़ाइल ऑब्जेक्ट का उपयोग करके इसे C: \ SpringSourceTool के अंदर फ़ाइल बनाता हूं ... मुझे लगता है कि यह ClassPath सही है?

मैं applicationcontextआवेदन का फ़ोल्डर या रूट कैसे प्राप्त कर सकता हूं ?

जवाबों:


100

निर्माण पथ आपके आवेदन के निर्माण के लिए प्रयोग किया जाता है। इसमें आपकी सभी स्रोत फाइलें और सभी जावा लाइब्रेरी शामिल हैं जो एप्लिकेशन को संकलित करने के लिए आवश्यक हैं।

Classpath आवेदन को क्रियान्वित करने के लिए प्रयोग किया जाता है। इसमें सभी जावा कक्षाएं और लाइब्रेरी शामिल हैं जिन्हें जावा एप्लिकेशन को चलाने के लिए आवश्यक है। क्लासपाथ अनिवार्य है, डिफ़ॉल्ट पथ .जिसका उपयोग किया जाता है यदि जावा वर्चुअल मशीन उपयोगकर्ता परिभाषित पथ नहीं पा सकता है। ( एक जार मेनिफ़ेस्ट में CLASSPATHपर्यावरण चर, -cpध्वज या Class-Path:विशेषता)


लेकिन javac एक classpath तर्क लेता है। क्या कोई कह सकता है कि यह पैरामीटर बिल्ड पथ को निर्दिष्ट करने के लिए "अतिभारित" है?
anioobe

4
नहीं। क्लासपैथ तर्क कंपाइलर को संकेत देता है कि उसे रनटाइम के दौरान उपलब्ध होने / उपलब्ध होने की उम्मीद करनी चाहिए, क्योंकि आप हर उस वर्ग का निर्माण नहीं करते हैं जिसका आप स्वयं उपयोग करते हैं (जैसे जेएफसी, लाइब्रेरी, ...)। Buildpath दोनों स्रोत और / या स्रोत / संकलित निर्भरता और जहां उन्हें देखने के लिए होता है।
जोहान्स वाचर

एक प्लगइन विकसित करते समय मैंने सभी आवश्यक पुस्तकालयों को क्लासपाथ में जोड़ा, लेकिन कुछ भी आयात नहीं कर सका। ग्रहण ने उन्हें तब तक नहीं देखा जब तक मैंने उन्हें पथ निर्माण के लिए नहीं जोड़ा।
बैक्स

51

Classpath (मानक) जावा संकलक और जावा रनटाइम बताने के लिए पारंपरिक तरीका है जहां संकलित कक्षाएं ढूंढनी हैं। यह आमतौर पर JAR फ़ाइल नामों और निर्देशिका नामों का एक क्रम है। संकलक और रनटाइम सिस्टम द्वारा प्रयुक्त classpath नहीं है होना है ही, लेकिन वे आम तौर पर होना चाहिए , विशेष रूप से एक छोटे से परियोजना के लिए।

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

उदाहरण के लिए, किसी प्रोजेक्ट के लिए एक्लिप्स बिल्ड पथ में अन्य प्रोजेक्ट्स शामिल होते हैं जो उस पर निर्भर करता है, और किसी भी अतिरिक्त लाइब्रेरी JAR को सूचीबद्ध करता है जिसमें प्रोजेक्ट शामिल / निर्भर करता है। यह वर्तमान परियोजना के पैकेजों को भी सूचीबद्ध करता है जो डाउनस्ट्रीम परियोजनाओं पर निर्भर कर सकते हैं।

(यदि आप अपनी परियोजना के लिए मावेन का उपयोग कर रहे हैं, तो IDE buildpath तंत्र POM फ़ाइलों में घोषित निर्भरता के लिए द्वितीयक है। उदाहरण के लिए, m2eclipse के साथ ग्रहण का उपयोग करके, buildp को POM फ़ाइलों से संश्लेषित किया जाता है।)


27

संकलित कक्षाओं और संसाधनों को लोड करने के लिए क्लास पथ का उपयोग रनटाइम पर किया जाता है।

अपनी परियोजना के निर्माण के लिए आवश्यक निर्भरताएँ खोजने के लिए निर्माण पथ का संकलन समय पर किया जाता है।


क्या आप कह सकते हैं कि वर्ग पथ का उपयोग .classफ़ाइलों (और अन्य संकलित संसाधनों) का पता लगाने के लिए किया जाता है, जबकि निर्माण पथ का उपयोग स्रोत फ़ाइलों का पता लगाने के लिए किया जाता है जिन्हें संकलित करने की आवश्यकता होती है?
एडम

1
@ अदम मुझे लगता है कि पूरी तरह से सच नहीं है। निर्माण पथ को कभी-कभी स्रोत फ़ाइलों को संकलित करने के लिए .class फ़ाइलों की आवश्यकता होती है। इसलिए बिल्ड पथ दृश्यों के पीछे वर्ग पथ का भी उपयोग करता है। यदि आप जावा सीएलआई का उपयोग करके एक जावा प्रोजेक्ट को संकलित करने और चलाने के लिए कुछ समय लेते हैं तो आप इसे देख सकते हैं। Javac और java कमांड दोनों में एक classpath विकल्प है क्योंकि उन्हें दोनों की आवश्यकता हो सकती है।
intrepistar_88

4

प्रत्येक जावा परियोजना का अपना निर्माण पथ है जो परियोजना को संकलित करने के लिए आवश्यक सभी निर्भरता को निर्दिष्ट करता है। वे निर्भरता जावा संग्रह .jar फ़ाइलों से, या .class फ़ाइलों वाले फ़ोल्डरों से, कार्यक्षेत्र में अन्य जावा परियोजनाओं से आ सकती हैं।

CLASSPATH वातावरण में आपको केवल .class फाइल्स (यानी, jar, zip files - इनसाइड jar, zip फाइल्स आपको केवल java क्लासेस मिलेंगी) को निर्दिष्ट करने की आवश्यकता है, अर्थात आप Java वर्चुअल फाइल खोजने के लिए Java Virtual Machine (JVM) की मदद कर रहे हैं।

इसके अलावा मुझे स्प्रिंग एमवीसी प्रोजेक्ट के src फ़ोल्डर के तहत एक फ़ाइल बनाने के लिए क्या करना चाहिए? जब मैं फ़ाइल ऑब्जेक्ट का उपयोग करके इसे C: \ SpringSourceTool के अंदर फ़ाइल बनाता हूं ...

यह वह जगह है जहां जेवीएम शुरू किया गया था, यदि आप फ़ाइल को और बनाना चाहते हैं, तो यहां से संबंधित पथ का उपयोग करें।

अधिक जानकारी के लिए इसे और इसे देखें ।


आपने अपने उत्तर में बिल्ड पथ का भी उल्लेख नहीं किया।
aioobe

4

मैं Andreas_D के उत्तर को यह समझाने के लिए जोड़ना चाहूंगा कि आईडीई / कंपाइलर द्वारा आपके कोड द्वारा उपयोग किए गए बाहरी पैकेजों और कक्षाओं का पता लगाने के लिए बिल्ड पथ की आवश्यकता है हम कभी-कभी इन्हें 'निर्भरता' के रूप में संदर्भित करते हैं ।

एनबी: इन बाहरी पैकेजों को एक संपीड़ित .jar फ़ाइल के अंदर पैक किया जा सकता है या वास्तव में, एक 'लाइब्रेरी' के अंदर पैक की गई कई जार फाइलें हो सकती हैं । एक पुस्तकालय या पुस्तकालयों का समूह अक्सर एक 'ढांचा' बनाता है ।

यदि आपके कोड को दूसरों द्वारा लिखे गए कोड की आवश्यकता है, तो आप कमांड का उपयोग करके उन्हें अपनी कक्षा में आयात कर सकते हैंimport । हालाँकि, यह आदेश अपने आप में अपर्याप्त है क्योंकि कंपाइलर या IDE को यह जानने की आवश्यकता है कि वे कक्षाएं कहाँ स्थित हैं। आप इसे बिल्ड पथ में निर्दिष्ट करते हैं ।

classpathदूसरी ओर JVM जहां अपने कोड की वास्तविक निष्पादन के दौरान किसी भी निर्भरता खोजने के लिए अपने आवेदन चल रहा है बताता है।

यह भी ध्यान दें: Classpath JVM द्वारा उपयोग के लिए है।

बिल्डपैथ आईडीई / कंपाइलर द्वारा उपयोग के लिए है और आपके विकास के वातावरण से क्लासपाठ बनाने का एक साधन है। जब आप अपने आईडीई के माध्यम से अपने बिल्डपैथ को कॉन्फ़िगर करते हैं, तो आप अपने प्रोजेक्ट में एक छिपी हुई फ़ाइल को भी कॉन्फ़िगर कर रहे हैं जिसे .classpath कहा जाता है। इसका उपयोग तैनाती के समय जेवीएम को क्लासपाथ प्रदान करने के लिए किया जाता है।


1

क्लासपाथ ( विकिपीडिया से ):

जावा प्रोग्राम को निष्पादित करते समय, क्लासिक डायनेमिक लोडिंग व्यवहार के समान, जावा वर्चुअल मशीन लेज़िली को ढूंढती है और लोड करती है (यह एक क्लास के बाइटकोड को तभी लोड करती है जब क्लास पहली बार उपयोग की जाती है)। Classpath जावा को बताता है कि इन कक्षाओं को परिभाषित करने वाली फ़ाइलों के लिए फ़ाइल सिस्टम में कहाँ देखना है।

वर्चुअल मशीन इस क्रम में कक्षाओं को खोजती और लोड करती है:

बूटस्ट्रैप कक्षाएं: वे कक्षाएं जो जावा प्लेटफ़ॉर्म के लिए मूलभूत हैं (जिसमें जावा क्लास लाइब्रेरी की सार्वजनिक कक्षाएं शामिल हैं, और निजी कक्षाएं जो इस लाइब्रेरी को कार्यात्मक बनाने के लिए आवश्यक हैं)।

एक्सटेंशन क्लासेस: पैकेज जो JRE या JDK के एक्सटेंशन डायरेक्टरी में हैं,

jre / lib / ext / उपयोगकर्ता-परिभाषित पैकेज और लाइब्रेरी

डिफ़ॉल्ट रूप से केवल JDK मानक API और एक्सटेंशन पैकेजों के पैकेज सेट किए बिना सुलभ हैं जहां उन्हें खोजना है। सभी उपयोगकर्ता-निर्धारित पैकेज और लाइब्रेरी के लिए पथ को कमांड-लाइन (या कक्षाओं के साथ जार फ़ाइल से संबंधित घोषणापत्र में) सेट किया जाना चाहिए।

सीधे शब्दों में कहें - जब आपका प्रोग्राम चल रहा होता है, तो JVM केवल आवश्यकतानुसार कक्षाओं को लोड करता है। जब एक वर्ग की आवश्यकता होती है, तो JVM क्लासपाथ पर निर्भर करेगा कि उसे पता चल जाए कि कहां से .classफाइल को लोड करना है (यानी " फाइलें)।"

दूसरी ओर, पथ का निर्माण , आमतौर पर एक आईडीई द्वारा किया जाता है, जैसे कि एक्लिप्स, यह जानने के लिए कि परियोजना के स्रोत कोड को संकलित करने के लिए आवश्यक अतिरिक्त पुस्तकालयों की तलाश कहाँ करें। रनटाइम के दौरान बिल्ड पथ का उपयोग नहीं किया जाता है।

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