/ / कमांड लाइन से क्लास (AOT) में क्लोजर सोर्स संकलित करें (लेइन का उपयोग न करें) - जावा, क्लोजर

कमांड लाइन (लीन का उपयोग नहीं) से कक्षा (एओटी) में क्लोजर स्रोत संकलित करें - जावा, क्लोजर

मैं क्लोजर स्रोत को क्लास फाइल में संकलित करने की कोशिश कर रहा हूं, और इसे केवल कमांड लाइन, नो लेइन और न ही (संभवतः उत्तर) का उपयोग करके चला सकता हूं।

मेरे पास core.clj है src/hello निर्देशिका।

.
└── src
└── hello
└── core.clj

यह स्रोत कोड है।

(ns hello.core)
(defn -main
"This should be pretty simple."
[]
(println "Hello, World!"))

का उपयोग करते हुए (compile) REPL में।

इस साइट में संकेत से (http://clojure.org/compilation), मैंने REPL से क्लास फ़ाइल प्राप्त करने की कोशिश की।

मैंने आरईपीएल के साथ शुरुआत की lein repl src निर्देशिका में, फिर एक त्रुटि पाने के लिए संकलन करने का प्रयास किया।

user=> (compile "hello.core)

CompilerException java.io.IOException: No such file or directory, compiling:(hello/core.clj:1:1)

कमांड लाइन

इस पोस्ट से Clojure .clj को .class / तथा क्लोजर में फाइल कैसे संकलित करें, ऐसा लगता है कि मैं REPL के बाहर क्लोजर स्रोत को संकलित कर सकता हूं।

मैंने इसमें कोशिश की . एक त्रुटि पाने के लिए।

> java -cp .:<PATH>/clojure-1.6.0.jar -Dclojure.compile.path=build clojure.lang.Compile src/hello/core.clj
Compiling src/hello/core.clj to build
Exception in thread "main" java.io.FileNotFoundException: Could not locate
hello/core/clj__init.class or hello/core/clj.clj on classpath:
at clojure.lang.RT.load(RT.java:443)
at clojure.lang.RT.load(RT.java:411)
...

तो, यहां मेरे प्रश्न हैं:

  • मैं आरईपीएल के साथ / बिना वर्ग को प्राप्त करने के लिए क्लोजर स्रोत कैसे संकलित कर सकता हूं?
  • जावा के साथ कक्षा कैसे चलाएं? क्या यह निष्पादित करने के लिए पर्याप्त है java -cp .:CLOJURE_JAR main?

उत्तर:

जवाब के लिए 2 № 1

आरईपीएल

REPL का आह्वान करते समय, आपको वर्ग पथ जोड़ना चाहिए।

java -cp .:<PATH>/clojure-1.6.0.jar:./src clojure.main

आपको सेट करने की जरूरत है *compile-path* साथ में (set! *compile-path* "build").

फिर आप क्लास फ़ाइल प्राप्त करने के लिए संकलन कर सकते हैं।

user=> (compile "hello.core)
hello.core

कमांड लाइन

दो मुद्दे हैं:

  1. संकलन के लिए, सीपी को स्रोत निर्देशिका को शामिल करना चाहिए।
  2. पैरामीटर फ़ाइल पथ नहीं है, लेकिन नाम स्थान है।

यह संकलक को आमंत्रित करना है।

clojure> java -cp .:<PATH>/clojure-1.6.0.jar:./src -Dclojure.compile.path=build clojure.lang.Compile hello.core
Compiling hello.core to build

वर्ग फ़ाइल का निष्पादन

आपको उस निर्देशिका को इंगित करना चाहिए जहां कक्षा फाइलें स्थित हैं।

clojure> java -cp .:<PATH>/clojure-1.6.0.jar:./build hello.core
Hello, World!

संदर्भ