मेरे पास एक हैलो.क्लज है।'लीन uberjar' से बने जार चलाने के दौरान कक्षापथ कैसे सेट करें?
(ns hello)
(defn hi [] (println "HI"))
आम तौर पर, मैं इस समारोह का मुख्य रूप से main.clj से उपयोग कर सकता हूं। Hello.clj उसी निर्देशिका में है जिसमें main.clj शामिल है। और कक्षा में शामिल हैं। (वर्तमान पथ)।
(use 'hello)
(hi)
'lein uberjar' के लिए मैं इस hello.clj का उपयोग कैसे कर सकता हूं?
मैंने 'लीन न्यू मायप्रोजेक्ट' का उपयोग किया; निम्नलिखित संरचना प्राप्त करने के लिए लीन deps '।
. |-- README |-- classes | `-- myproject |-- lib | |-- clojure-1.2.0-beta1.jar | |-- clojure-contrib-1.2.0-beta1.jar | `-- lucene-core-3.0.2.jar |-- project.clj |-- src | `-- myproject | `-- core.clj `-- test `-- myproject `-- test `-- core.clj
project.clj निम्नानुसार है।
(defproject myproject "1.0.0-SNAPSHOT"
:description "FIXME: write"
:dependencies [[org.clojure/clojure "1.2.0-beta1"]
[org.clojure/clojure-contrib "1.2.0-beta1"]
[org.apache.lucene/lucene-core "3.0.2"]]
:main myproject.core)
और core.clj निम्नानुसार है।
(ns myproject.core
(:gen-class))
(use 'hello)
(defn test1 [] (println "hello"))
(defn -main [& args]
(do
(println "Welcome to my project! These are your args:" args)
(test1)
(hi)))
अब, मैं hello.clj कहां रखूं? मैंने इसे myproject/src निर्देशिका में कॉपी करने और जार प्राप्त करने के लिए uberjar चलाने की कोशिश की। लेकिन, जार चलाने से यह त्रुटि संदेश होता है।
prosseek:myproject smcho$ java -jar myproject-1.0.0-SNAPSHOT-standalone.jar a d d Exception in thread "main" java.lang.ExceptionInInitializerError Caused by: java.io.FileNotFoundException: Could not locate hello__init.class or hello.clj on classpath: (core.clj:0) ...
- क्या गलत हो सकता है? त्रुटि संदेशों का कहना है हैलो.क्लज क्लास पथ पर नहीं है। लेकिन, 'लीन uberjar' के साथ classpath कैसे सेटअप करें?
मैंने प्रोजेक्ट here अपलोड किया।
हाँ, यह काम करता है! बहुत बहुत धन्यवाद। – prosseek
आप जो करने की कोशिश कर रहे थे (एनएस हैलो) को एकल-सेगमेंट नेमस्पेस कहा जाता है। जब आप क्लोजर-भूमि में होते हैं, तो यह ठीक काम करता है, एक बार जब आप एक uberjar myproject.core के रूप में लॉन्च करने योग्य होने के लिए एओटी करते हैं तो जावा बाइटकोड बन जाता है और हैलो नेमस्पेस पर नहीं मिल सकता है क्योंकि इसमें जावा पैकेज नहीं है। – technomancy