是否可以编译clojure源而无需进入REPL?

时间:2011-10-10 11:25:28

标签: clojure

是否可以在不进入REPL的情况下编译clojure源代码?如果有一个大项目那么就不可能手动编译每个程序。然后制作它的jar文件,就像我希望通过 make 软件中的一些指令编译和获取类文件一样?

3 个答案:

答案 0 :(得分:6)

为了理解这些系统中有多少工作在下面,这里有一些最简单的代码来编译没有repl的代码。

假设您有一些类生成代码:

hello.clj:

 (ns hello
   (:gen-class
    :methods [[sayHi [] String]]))

 (defn -sayHi [this]
   (println "hello world"))

你可以用clojure代码构建你的“makefile”

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=> 

答案 1 :(得分:3)

是的 - 您当然可以在不使用REPL的情况下编译和运行Clojure代码。

执行此操作的一些选项:

  • 使用load function在运行时加载Clojure代码。这将读取,编译和评估指定的Clojure代码,而不涉及任何REPL。
  • 使用Leiningen或Maven或任何其他合适的构建工具将所有内容打包为.jar - 然后您可以将代码作为常规Java应用程序运行,Clojure代码将在编译时运行。 jar被执行
  • 从Java启动代码 - 编写一个Java应用程序,直接启动Clojure编译器进行编译,然后执行Clojure代码。如果您将Clojure用作更大的Java应用程序的组件,这可能是一种明智的方法。

答案 2 :(得分:2)

我有一个使用多种语言的大项目,并使用make作为启动所有其他组件的粘合剂,这非常有效。您可以使用make maven或leiningen而不是使用make来重新发明它们。

如果您正在寻找leiningen的替代品,因为它不适合您,或者您只是想使用其他东西,那么您可能会喜欢Clojure Maven plugin

就我个人而言,我不能对Leiningen说得太高,这是我个人的选择,尽管互联网上有很多人,值得探索其他选择。