我有一个名为mr1的clojure应用程序;它的project.clj位于./mr1/,mr1.clj位于./mr1/src。
我不知道如何正确地构造目录、名称空间和project.clj文件,所以我可以使用cake bin构建二进制文件。
附件中是我当前的project.clj和mr1.clj的头部和尾部。
src/mr1.clj将fine加载到蛋糕repl中并执行。饼干箱生成一个不包含-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))
)
)发布于 2011-12-12 05:20:28
正如我在回答您的first question时提到的,您必须启用名称空间的AOT编译。我在这里复制了这个答案,以防有人遇到同样的问题。
正如sample.project.clj文件所说,:main键应该有一个包含-main函数的命名空间作为赋值。所以你应该有这样的功能
(defn -main [& args]
(do-things-you-want-to-do-on-program-start))在mr1.clj中。另外,如果你想把你的程序作为一个独立的jar来使用,你必须将这个命名空间进行gen-classed。我的意思是你必须:
:gen-class选项,如下所示:(ns mr1 (:gen- ...other )提前编译名称空间(AOT代表提前)。为此,您需要在project.clj的AOT编译的名称空间列表中指定您的名称空间:
(默认项目mr1“0.0.1-快照”...other定义...:aot mr1 :main mr1)
完成此操作后,您可以使用cake为您生成可执行jar。
https://stackoverflow.com/questions/8467204
复制相似问题