जवाबों:
जावा में प्रोग्रामिंग करते समय, आप अपनी स्रोत फ़ाइल के शीर्ष पर इस तरह से कुछ लिखकर कक्षा को उपलब्ध कराते हैं:
import org.javaguy.coolframework.MyClass;
या कभी-कभी आप कह कर 'थोक आयात' सामान लेते हैं:
import org.javaguy.coolframework.*;
इसलिए बाद में अपने कार्यक्रम में जब आप कहते हैं:
MyClass mine = new MyClass();
जावा वर्चुअल मशीन को पता चल जाएगा कि आपके संकलित वर्ग को कहां खोजना है।
आपकी मशीन पर प्रत्येक फ़ोल्डर के माध्यम से वीएम लुक रखना अव्यावहारिक होगा, इसलिए आपको वीएम को देखने के लिए स्थानों की एक सूची प्रदान करनी होगी। यह आपके क्लासपाथ पर फोल्डर और जार फाइल्स डालकर किया जाता है।
इससे पहले कि हम इस बारे में बात करें कि क्लासपैथ कैसे सेट किया जाता है, आइए .class फ़ाइलों, पैकेजों और .jar फ़ाइलों के बारे में बात करते हैं।
सबसे पहले, मान लें कि MyClass कुछ ऐसा है जिसे आपने अपनी परियोजना के हिस्से के रूप में बनाया है, और यह आपके प्रोजेक्ट नामक निर्देशिका में है output
। .Class फ़ाइल में होगीoutput/org/javaguy/coolframework/MyClass.class
उस पैकेज (हर दूसरी फ़ाइल के साथ) होगी। उस फ़ाइल को प्राप्त करने के लिए, आपके पथ को केवल फ़ोल्डर 'आउटपुट' को शामिल करने की आवश्यकता होगी, न कि पूरे पैकेज संरचना को, क्योंकि आपका आयात विवरण VM को वह सभी जानकारी प्रदान करता है।
अब मान लेते हैं कि आप CoolFramework को एक .jar फ़ाइल में बंडल करते हैं, और उस CoolFramework.jar को अपनी परियोजना में एक कार्यकारी निर्देशिका में डालते हैं। अब आपको lib/CoolFramework.jar
अपने वर्गपथ में डालने की आवश्यकता होगी । वीएम org/javaguy/coolframework
भाग के लिए जार फ़ाइल के अंदर दिखेगा , और अपनी कक्षा खोजें।
तो, क्लासपैथ में शामिल हैं:
आप अपना वर्गपथ कैसे निर्धारित करते हैं?
सभी को सीखने का पहला तरीका पर्यावरण चर के साथ है। यूनिक्स मशीन पर, आप कुछ ऐसा कह सकते हैं:
export CLASSPATH=/home/myaccount/myproject/lib/CoolFramework.jar:/home/myaccount/myproject/output/
विंडोज मशीन पर आपको अपने पर्यावरण सेटिंग्स पर जाना होगा और पहले से मौजूद मूल्य को जोड़ना या संशोधित करना होगा।
दूसरा तरीका -cp
जावा शुरू करते समय पैरामीटर का उपयोग करना है , जैसे:
java -cp "/home/myaccount/myproject/lib/CoolFramework.jar:/home/myaccount/myproject/output/" MyMainClass
इसका एक प्रकार तीसरा तरीका है जो अक्सर एक .sh
या .bat
फ़ाइल के साथ किया जाता है जो क्लासपाथ की गणना करता है और इसे -cp
पैरामीटर के माध्यम से जावा में भेजता है।
उपरोक्त सभी के साथ एक "गोच" है। अधिकांश प्रणालियों (लिनक्स, मैक ओएस, यूनिक्स, आदि) पर बृहदान्त्र वर्ण (':') क्लासपैथ विभाजक है। विंडोम में विभाजक अर्धविराम ('?') है
तो इसे करने का सबसे अच्छा तरीका क्या है?
पर्यावरण चर के माध्यम से वैश्विक स्तर पर सामान की स्थापना खराब है, आमतौर पर इसी तरह के कारणों से कि वैश्विक चर खराब हैं। आप CLASSPATH परिवेश वैरिएबल को बदलते हैं ताकि एक प्रोग्राम काम करता है, और आप दूसरे प्रोग्राम को तोड़ते हैं।
-Cp जाने का रास्ता है। मैं आमतौर पर सुनिश्चित करता हूं कि मेरा CLASSPATH पर्यावरण चर एक खाली स्ट्रिंग है जहां मैं विकसित करता हूं, जब भी संभव हो, ताकि मैं वैश्विक क्लासपैथ मुद्दों से बचूं (कुछ उपकरण तब खुश नहीं होते हैं जब वैश्विक क्लासपैथ खाली होता है - मुझे दो सामान्य, मेगा-हजार का पता है डॉलर लाइसेंस प्राप्त J2EE और जावा सर्वर जिनके पास इस तरह की समस्या उनके कमांड-लाइन टूल्स के साथ है)।
org.javaguy.coolfw
संगत निर्देशिका संरचना है /path/to/org/javaguy/coolfw/
, तो क्लासपैथ को समाहित करना होगा /path/to/
। यदि मैं org.javaguy.hotfw
उसी परियोजना में एक नया पैकेज जोड़ता हूं , तो परिणामी वर्ग (आमतौर पर) समाप्त होता है /path/to/org/javaguy/hotfw/
। इसके लिए क्लासपैथ को समाहित करने की आवश्यकता है /path/to/
, जो यह पहले से ही करता है। इसलिए नए पैकेज (और उसमें निहित कक्षाएं) को क्लासपाथ के लिए नए अतिरिक्त की आवश्यकता नहीं है।
इस संदर्भ में क्लासपाथ वास्तव में वही है जो सामान्य संदर्भ में है: कहीं भी वीएम जानता है कि यह कक्षाओं को लोड करने के लिए मिल सकता है, और संसाधनों के साथ-साथ (जैसे आपके मामले में output.vm)।
मुझे लगता है कि वेग को "नो पैकेज" में कहीं भी आउटपुट नाम की एक फाइल खोजने की उम्मीद है। यह एक JAR, नियमित फ़ोल्डर हो सकता है, ... अनुप्रयोग के वर्गपथ में किसी भी स्थान का मूल।
CLASSPATH सिस्टम चर को सेट करना
वर्तमान CLASSPATH चर को प्रदर्शित करने के लिए, Windows और UNIX (बॉर्न शेल) में इन कमांड का उपयोग करें: In Windows: C:\> set CLASSPATH
UNIX में: % echo $CLASSPATH
CLASSPATH चर की वर्तमान सामग्री को हटाने के लिए, इन आदेशों का उपयोग करें: Windows में: C:\> set CLASSPATH=
UNIX में: % unset CLASSPATH; export CLASSPATH
CLASSPATH चर सेट करने के लिए, इन कमांड्स का उपयोग करें (उदाहरण के लिए): विंडोज में: C:\> set CLASSPATH=C:\users\george\java\classes
UNIX में: % CLASSPATH=/home/george/java/classes; export CLASSPATH
क्लासपाथ सिस्टम का एक पर्यावरण चर है। इस चर की सेटिंग का उपयोग जावा कंपाइलर को किसी भी पैकेज पदानुक्रम की जड़ प्रदान करने के लिए किया जाता है।
CLASSPATH जावा कंपाइलर और रनटाइम के लिए जावा प्रोग्राम में इस्तेमाल होने वाले जावा पैकेज का पता लगाने के लिए एक पर्यावरण चर (यानी, सभी प्रक्रियाओं के लिए उपलब्ध ऑपरेटिंग सिस्टम का वैश्विक चर) है। (क्यों नहीं PACKAGEPATH कहा जाता है?) यह एक अन्य पर्यावरण चर पथ के समान है, जिसका उपयोग सीएमडी शेल द्वारा निष्पादन योग्य कार्यक्रमों को खोजने के लिए किया जाता है।
CLASSPATH को निम्न तरीकों में से एक में सेट किया जा सकता है:
CLASSPATH can be set permanently in the environment: In Windows, choose control panel ⇒ System ⇒ Advanced ⇒ Environment Variables ⇒ choose "System Variables" (for all the users) or "User Variables" (only the currently login user) ⇒ choose "Edit" (if CLASSPATH already exists) or "New" ⇒ Enter "CLASSPATH" as the variable name ⇒ Enter the required directories and JAR files (separated by semicolons) as the value (e.g., ".;c:\javaproject\classes;d:\tomcat\lib\servlet-api.jar"). Take note that you need to include the current working directory (denoted by '.') in the CLASSPATH.
To check the current setting of the CLASSPATH, issue the following command:
> SET CLASSPATH
CLASSPATH can be set temporarily for that particular CMD shell session by issuing the following command:
> SET CLASSPATH=.;c:\javaproject\classes;d:\tomcat\lib\servlet-api.jar
Instead of using the CLASSPATH environment variable, you can also use the command-line option -classpath or -cp of the javac and java commands, for example,
> java –classpath c:\javaproject\classes com.abc.project1.subproject2.MyClass3
किसी वर्ग के स्थैतिक सदस्य को वस्तु उदाहरण बनाए बिना सीधे बुलाया जा सकता है। चूंकि मुख्य विधि स्थिर है जावा वर्चुअल मशीन इसे किसी भी वर्ग के उदाहरण के बिना बना सकती है जिसमें मुख्य विधि शामिल है, जो प्रोग्राम का प्रारंभ बिंदु है।
Linux उपयोगकर्ताओं के लिए, और दूसरों के लिए यहाँ जो कुछ भी कहा गया है, उसे जोड़ना और जोड़ना, आपको निम्नलिखित जानना चाहिए:
$ CLASSPATH वह है जो जावा आपकी स्क्रिप्ट के लिए आवश्यक सभी अलग-अलग वर्गों को खोजने के लिए कई निर्देशिकाओं के माध्यम से देखने के लिए उपयोग करता है (जब तक कि आप स्पष्ट रूप से इसे -cp ओवरराइड के साथ नहीं बताते हैं)। का उपयोग करते हुए -cp की आवश्यकता है कि आप मैन्युअल रूप से सभी निर्देशिकाओं का ट्रैक रखें और हर बार जब आप प्रोग्राम को चलाते हैं तो कॉपी-पेस्ट करें (बेहतर तरजीही नहीं)।
बृहदान्त्र (":") वर्ण अलग-अलग निर्देशिकाओं को अलग करता है। केवल एक $ CLASSPATH है और इसमें सभी निर्देशिकाएं हैं। इसलिए, जब आप "निर्यात क्लास = ..." चलाते हैं, तो आप इसे संलग्न करने के लिए वर्तमान मूल्य "$ क्लास" को शामिल करना चाहते हैं। उदाहरण के लिए:
export CLASSPATH=.
export CLASSPATH=$CLASSPATH:/usr/share/java/mysql-connector-java-5.1.12.jar
ऊपर की पहली पंक्ति में, आप CLASSPATH को केवल एक सरल 'डॉट' के साथ शुरू करते हैं, जो आपकी वर्तमान कार्यशील निर्देशिका का मार्ग है। इसके साथ, जब भी आप जावा चलाते हैं तो यह कक्षाओं के लिए वर्तमान कार्यशील निर्देशिका (आप जिस में हैं) में दिखेगा। ऊपर की दूसरी पंक्ति में, $ CLASSPATH उस मान को पकड़ लेता है जो आपने पहले दर्ज किया था ()। और mysql dirver के लिए पथ जोड़ता है। अब, जावा ड्राइवर के लिए और आपकी कक्षाओं के लिए दिखेगा।
echo $CLASSPATH
सुपर आसान है, और यह क्या रिटर्न सभी निर्देशिकाओं की एक बृहदान्त्र से अलग सूची की तरह पढ़ा जाना चाहिए, और .jar फ़ाइलें, आप जावा वर्ग की जरूरत के लिए देख रहे हैं चाहता हूँ।
टॉमकैट CLASSPATH का उपयोग नहीं करता है। उस बारे में यहां क्या करें पढ़ें: https://tomcat.apache.org/tomcat-8.0-doc/class-loader-howto.html