2010-09-03 12 views
6

यहाँ मैं वातावरण चर CLASSPATH जाँच
डैनियल @ डैनियल-लैपटॉप: ~/पीएस/clojure/परियोजनाओं/अंगूठी ट्यूटोरियल $ गूंज $ CLASSPATH
/घर/डैनियल/पीएस/clojure/परियोजनाओं/अंगूठी ट्यूटोरियल/srcपर्यावरण चर क्लासस्पैट <> क्लोजर का क्लासस्पैट। क्यूं कर?

यहां मैं जांचता हूं कि जावा क्या सोचता है।
डैनियल @ डैनियल-लैपटॉप: ~/पीएस/clojure/परियोजनाओं/अंगूठी ट्यूटोरियल $ lein repl
Clojure 1.1.0 उपयोगकर्ता => (सिस्टम/getProperty "java.class.path")
"src/: कक्षाएं /:/घर/डैनियल/.m2/भंडार/leiningen/leiningen/1.1.0/leiningen-1.1.0-standalone.jar: lib/clojure-1.1.0.jar: lib/सर्वलेट-api-2.5 6.1.14.jar: lib/कॉमन्स-कब-1.4.jar: lib/CLJ-स्टैकट्रेस-0.1.0.jar: lib/clojure-योगदान-1.1.0.jar: lib/अंगूठी-devel-0.2.0। जार: lib/घाट-util-6.1.14.jar: lib/CLJ एचटीएम्एल 0.1.0.jar: lib/अंगूठी-घाट-अनुकूलक-0.2.0.jar: lib/घाट-6.1.14.jar: lib/ring-core-0.2.0.jar: lib/commons-fileupload-1.2.1.jar: lib/ring-servlet-0.2.0.jar: lib/commons-codec-1.4.jar: "

जैसा कि आप देख सकते हैं, दो प्रतिक्रिया पूरी तरह से अलग हैं। मुझे पूरा यकीन है कि मुझे केवल गलतफहमी होनी चाहिए जहां मुझे जावा के लिए क्लासस्पैट वैरिएबल को संपादित करना चाहिए, "इसे प्राप्त करें" सिवाय इसके कि मुझे जो कुछ भी मिला है, वह कहता है कि यह काम करना चाहिए। तो सौदा क्या है? क्या लीनिंगन ने क्लोजर के अपने अजीब रीनेजेड उदाहरण को जन्म दिया है? क्या मैं पूरी तरह से अप्रासंगिक चर संपादित कर रहा हूं? किसी भी मदद की बहुत सराहना की।

+0

संकेत: लीन स्क्रिप्ट को देखें, जिसे आप अपनी प्रतिलिपि खोलने के लिए कहते हैं। आप देखेंगे कि यह क्लासस्पैट के साथ कुछ सामान करता है – Belun

उत्तर

9

$CLASSPATH वास्तव में यहां पूरी तरह से अप्रासंगिक है। यह java -the-JVM-launcher-प्रोग्राम का उपयोग करेगा यदि कमांड लाइन पर कोई क्लासपाथ जानकारी प्रदान नहीं की गई थी; Leiningen जो भी परियोजना आप काम कर रहे हैं उसके लिए उपयुक्त क्लासपाथ के साथ JVM प्रदान करता है।

इस विशेष मामले में, "/home/.../ring-tutorial/src" रिंग ट्यूटोरियल के लिए एक बहुत उपयोगी क्लासपाथ नहीं होगा, क्योंकि इसमें केवल रिंग ट्यूटोरियल का स्रोत शामिल है और क्लोजर जार (जो क्लोजर कोड चलाने के लिए आवश्यक है) शामिल नहीं है, रिंग जार (अंगूठी एक बहु-मॉड्यूल परियोजना है) या अन्य जार की अंगूठी पर निर्भर करता है। लीनिंगेन द्वारा उत्पादित क्लासपाथ बहुत लंबा लग सकता है, लेकिन इसके सभी घटकों को वास्तव में वहां होना चाहिए।

संयोग से, यदि आप क्लोजर के साथ शुरुआत कर रहे हैं, तो मैं आपको सलाह देता हूं कि आप अपने टूलचेन की क्लासपाथ प्रबंधन सुविधाओं (जिसका मतलब हो सकता है कि Emacs + lein swank या कुछ आईडीई + क्लोजर प्लगइन) हो सकता है, यदि संभव हो तो। अन्यथा, एसओ पर क्लोजर क्लासपाथ मुद्दों पर बहुत सारे प्रश्न हैं, साथ ही इस विषय पर अन्य संसाधनों की एक भीड़ है जिसके लिए आप Google के लिए Google कर सकते हैं ... लेकिन अब वह टूल समर्थन बहुत मजबूत है और आप आमतौर पर को स्पर्श करने की आवश्यकता नहीं है हाथ से वर्गपाथ, शुरुआत में यह केवल दर्द से बचा है।

2

आपकी निर्भरताओं को प्रबंधित करने के लिए क्लासस्पैट चर का उपयोग करने में समस्या यह है कि सभी जावा और अन्य जेवीएम भाषाओं को अपने उद्देश्यों के लिए इसे कुशल बनाना होगा। अपने आप को कोने में पेंट करने से पहले इसमें बहुत समय नहीं लगता है।

यह एक प्रकार का काम करता है जब आप एक सर्वर शुरू करते हैं जो केवल सर्वर लॉन्च करता है। यह पूरी तरह से जावा डेवलपर के एक पीसी पर टूट जाता है, जिसमें 10 के कार्यक्रम और परियोजनाएं होती हैं जो सभी को अलग-अलग निर्भरताओं की आवश्यकता होती है और फिर क्लासस्पैट वैरिएबल में हेरफेर करने के लिए बैश स्क्रिप्ट को डिबग करने में अधिक समय बिताती है जो स्रोत कोड लिखती है।

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

1

क्लोजर क्लासपाथ जावा क्लासपाथ है। जब java निष्पादन, -cp तर्क के साथ शुरू हो जाती है जो Leiningen (और अधिकांश अन्य Clojure लिपियों का निर्माण) कर

$CLASSPATH नजरअंदाज कर दिया है।

यदि आप लीनिंगेन जैसे निर्माण उपकरण का उपयोग कर रहे हैं, तो आपको क्लासपाथ को प्रबंधित करने के लिए इसका उपयोग करना होगा।