是否可以在不進入REPL的情況下編譯clojure源代碼?如果一個大項目在那裏,那麼它是不可能的手動編譯每個程序&然後使它的jar文件,如果我想編譯和獲取類文件的一些指令使軟件?是否有可能在不進入REPL的情況下編譯clojure源代碼?
2
A
回答
6
爲了理解這些系統中有多少個可以工作,下面是一些沒有repl的編譯代碼的最低代碼。
假設你有一些類生成代碼:
hello.clj:
(ns hello
(:gen-class
:methods [[sayHi [] String]]))
(defn -sayHi [this]
(println "hello world"))
你可以建立 「的Makefile」 出的Clojure代碼
compile.clj:
(set! *compile-path* "./")
(compile 'hello)
然後,您只需將您的代碼作爲腳本調用即可。
$ java -cp ~/dj/lib/clojure.jar:./ clojure.main compile.clj
$ ls
compile.clj hello.clj hello$loading__4505__auto__.class
hello.class hello__init.class hello$_sayHi.class
現在你的代碼被編譯,你可以像任何其他類文件訪問:
$ java -cp ~/dj/lib/clojure.jar:./ clojure.main
Clojure 1.3.0
user=> (import 'hello)
hello
user=> (.sayHi (hello.))
"hello world"
user=>
2
我有一個使用多種語言的大型項目,並使用make作爲啓動所有其他組件的粘合劑,並且這種方法效果很好。你可能做得很好,可以打電話給Maven或Leiningen,而不是使用make來重新創建它們。
如果你正在尋找一個替代leiningen,因爲它不是爲你工作,或者你只是想使用別的東西,那麼也許你會喜歡Clojure Maven plugin
個人而言,我不能說Leiningen的太高這是我個人的選擇,雖然互聯網上有很多人,但值得探索其他選擇。
3
是的 - 你當然可以在不使用REPL的情況下編譯和運行Clojure代碼。使用load function在運行時
- 加載Clojure的代碼:
一些選項來做到這一點。這將讀取,編譯和評估指定的Clojure代碼,而不涉及任何REPL。
- 包一切,因爲使用Leiningen或Maven或任何其他合適的構建工具一個.jar - 那麼你可以運行你的代碼作爲一個普通的Java應用程序,Clojure的代碼將被編譯和執行時 該.jar運行
- 從Java啓動代碼 - 編寫一個啓動Clojure編譯器的Java應用程序,直接編譯並執行Clojure代碼。如果您將Clojure用作更大的Java應用程序的組件,這可能是一個明智的方法。
相關問題
- 1. 編譯器可以在沒有擴展的情況下編譯代碼嗎?
- 2. 是否有可能使用Tuples進行WP7 Beta編譯代碼?
- 3. 在沒有Visual Studio的情況下編譯Microsoft的LoginAdmin.dll代碼
- 4. 是否有可能閱讀並進入.NET Framework源代碼
- 5. 如何在沒有主函數的情況下編譯C源代碼?
- 6. Scala代碼在不使用scalac編譯的情況下運行?
- 7. 是否有可能以編程方式在內存中編譯java源代碼?
- 8. 如何在不編譯代碼的情況下修改全局資源DLL?
- 9. 在每種可能的情況下使Emacs縮進代碼
- 10. 如何在不添加不可達代碼的情況下編譯異步lambda?
- 11. gcc是否可以不編譯代碼?
- 12. 是否有可能在沒有音頻源的情況下使用CamcorderProfile?
- 13. 是否有可能通過VisualStudio在Windows下編譯WinCE平臺的代碼?
- 14. 是否可以在不重新編譯的情況下更改exe的圖標?
- 15. 是否可以在不最小化Google Closure Compiler代碼的情況下編譯WebDriverJS?
- 16. 是否可以在不編譯CoffeeScript文件的情況下使用JSDoc?
- 17. 是否有可能進入用pyc編譯的IronPython dll?
- 18. 是否有可能在沒有Arduino的情況下編寫Arduino程序?
- 19. RuntimeException:不可編譯的源代碼(Netbeans)
- 20. 如何在不下載源代碼的情況下使用EXSLT?
- 21. 是否有反彙編程序生成可編譯的彙編源代碼?
- 22. 代碼與scalac編譯但不是在REPL
- 23. 是否可以在不刷新窗口的情況下進行「密碼」驗證?
- 24. 是否有可能使用python編譯c代碼?
- 25. 我可以在不調試符號的情況下編譯,然後從源代碼創建它們嗎?
- 26. 是否有可能使一個XSS在這種情況下
- 27. 是否可以在不重寫代碼的情況下重新調整Qt GUI?
- 28. 下面輸入的代碼不編譯
- 29. 是否可以在不使用Visual Studio的情況下從TFS Azure下載源代碼樹?
- 30. 是否可以交叉編譯MIPS的D源代碼?
爲什麼你需要使用'make',不能,例如,使用['leiningen'] (https://github.com/technomancy/leiningen)或'maven'? – skuro
@skuro [http:// stackoverflow。com/questions/7686452/how-to-build-executable-jar-from-clojure-code-with-a-main-function-of-java-in-on]這是在windows上配置lein的方法,遵循相同的我無法正確配置它的指示集。 – vikbehal
即使在'make'中,你也必須遵循相同的步驟,比如提供'-main'等功能。只有幾乎沒有其他clojure開發者使用這樣的工具集,而有很多快樂的leiningen用戶。我建議你發佈你的leiningen配置並尋求幫助。 – skuro