构建Clojure蛋糕构建环境

时间:2011-12-11 20:28:06

标签: clojure

我有一个名为mr1的clojure应用程序;它的project.clj位于./mr1/,mr1.clj位于./mr1/src。

我无法弄清楚如何正确构造目录,命名空间和project.clj文件,因此我可以使用cake bin构建二进制文件。

附上我目前的project.clj和mr1.clj的头尾。

src / mr1.clj加载到cake repl并执行。 cake bin生成一个包含no -main的mr1文件。

(defproject mr1 "0.0.1-SNAPSHOT"
  :description "TODO: add summary of your project"
  :dependencies [[org.clojure/clojure "1.3.0"]
                 [org.clojure/tools.cli "0.1.0"]]
   :main mr1)

(ns mr1
    (:use [clojure.string :only [split]]
          [clojure.string :only [join]]))

。 。

(defn -main 
    [& args]
    (do
       (reset! grid-dim (prompt-for-grid-dim))
       (reset! mr1-pos (prompt-for-rover-pos 1))
       (let [moves (prompt-for-rover-moves)]
           (execute-each-move moves @mr1-pos))

       (reset! mr2-pos (prompt-for-rover-pos 2))
       (let [moves (prompt-for-rover-moves)]
           (execute-each-move moves @mr2-pos))


    )
)

1 个答案:

答案 0 :(得分:1)

正如我在回答您的first question时提到的那样,您必须启用命名空间的AOT编译。我已经复制了这个答案,以防有人遇到同样的问题。

正如sample.project.clj文件所说,:main密钥应该具有包含-main函数的命名空间作为指定值。所以你应该有这样的功能

(defn -main [& args]
  (do-things-you-want-to-do-on-program-start))
你的mr1.clj中的

。还有AFAIR如果你想把你的程序用作一个独立的jar,你必须将这个命名空间归类。我的意思是你必须:

  1. 在命名空间定义中包含:gen-class选项,如下所示:

    (ns mr1
      (:gen-class)
      ...other options...)
    
  2. 使命名空间AOT编译(AOT代表Ahead Of Time)。为此,您需要在project.clj中的AOT编译的命名空间列表中指定您的命名空间:

    (defproject mr1 "0.0.1-SNAPSHOT"
      ...other definitions...
      :aot [mr1]
      :main mr1)
    
  3. 完成此操作后,您可以使用cake为您生成可执行jar。