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

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

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

src / mr1.clj可以很好地加载到cake repl中并执行。 cake bin生成一个不包含-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 票数:1 已采纳

正如我在回答第一个问题时提到的那样,您必须启用名称空间的AOT编译。 如果有人遇到相同的问题,我已在此处复制了该答案。

正如sample.project.clj文件所说, :main键应该有一个包含-main函数的命名空间作为分配值。 所以你应该有这样的功能

(defn -main [& args]
  (do-things-you-want-to-do-on-program-start))

在您的mr1.clj中。 同样,如果要将程序用作独立的jar,则必须具有gen-classed这个名称空间。 我的意思是您必须:

  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) 

完成此操作后,您可以使用cake为您生成可执行的jar。

  ask by octopusgrabbus translate from so

未解决问题?本站智能推荐:

2回复

确定为什么Clojure REPL(加载文件)和蛋糕构建产量错误

从Clojure 1.3开始,我对在Clojure中构建内容所需的目录结构感到困惑。 我正在使用蛋糕来构建和蛋糕repl。 这是有效的。 我有一个工作的构建目录addr_verify。 主要和ns的名称是addr-verify。 project.clj将addr-verify称为m
3回复

Clojure中的构建表

如果我想在矢量重复的Clojure中建立一个表,我会写: 但是我将如何扩展表函数的概念来构建类似以下内容的东西: 输入1:[a ^ 2 2 6 2]其中a ^ 2是某些输入函数,2是最小值,6是最大值,2是步长。 输出1:[4,16,36] 输入2:[b ^ 2 10
3回复

在clojure中懒洋洋地构建

我已经开始学习clojure,但是我无法绕过某些概念。 例如,我想在这里做的是采取这个函数并转换它,以便它懒惰地调用get-origlabels。 我的第一次尝试使用递归但是炸毁了堆栈( 歌曲数量大约是10,000)。 我无法弄清楚如何使用尾递归来做到这一点。 get-orig
2回复

Clojure:使用`for`绑定构建集合

我仍然相当新的clojure,但我发现自己经常在其中使用的模式是这样的:我有一些集合,我想建立一个新的集合,通常是哈希映射,其中有一些过滤器或条件。 总有几种方法可以做到这一点:例如,使用loop或使用reduce与map / filter相结合,但我想实现更像for宏的东西,它具有很好的语法
1回复

Clojure:如何构建桌面UI

我正在尝试为原理图,布局,绘图材料设计桌面UI。 只是寻找实际软件设计师的高级建议。 假设一个内存中的“数据库”,(所有用户数据的任意深度的clojure映射,以及可能的另一个用于应用程序首选项的等等),我正在研究如何在这些上执行模型 - 视图 - 控制器的事情,其中数据可以通过以下任何
5回复

在Clojure中构建CLI脚本

在Clojure中构建CLI脚本的常用/标准方法是什么? 在我看来,这种方法应该包括以下特征: 一种轻松处理参数的方法,stdin / out / err。 没有花太多时间来启动(理想情况下有某种JIT),否则就会失去在一个人的shell中将事情混合在一起的目的。
2回复

使用gradle / clojuresq构建clojure

我正在尝试使用gradle / Clojuresque来构建clojure代码,运行它,并获得uberjar。 我使用提示从http://dev.clojure.org/display/doc/Getting+Started+with+Gradle , https://bitbucket.or
2回复

用Clojure中的向量构建树

我正在开发我的第一个Clojure程序。 我在解决如何根据如下所示的输入构建树时遇到一些问题: 输出应该是这样的: 我不确定如何开始这样做。 例如,当涉及命令式编程时,我将使用嵌套循环来查找此关系是否已经存在,当不存在时,我将找到父元素并将子元素附加到该元素。 但据我所知,
2回复

Clojure:需要架构建议

我正在编写一个Clojure pub / sub界面。 这是非常准系统,实际上只会使用两种方法:do-pub和sub-listen。 sub-listen使用一个字符串(一个子名称),do-pub使用两个字符串(一个子名称和一个值)。 我对Clojure还是很陌生,并且在想出一种可行的
1回复

如何使用Clojure v 1.6构建clojure_contrib?

我已经在Macbook上下载了Clojure的当前稳定版本1.6。 但是,我只找到用clojure 1.3或更早版本构建clojure_contrib的方法。 那么如何用clojure v1.6来构建它呢?