Структурирование среды создания торта Clojure - PullRequest
0 голосов
/ 12 декабря 2011

У меня есть приложение clojure под названием mr1; его project.clj находится в ./mr1/, а mr1.clj - в ./mr1/src.

Я не могу понять, как правильно структурировать каталоги, пространство имен и файл project.clj, поэтому я могу собрать двоичный файл, используя торт bin.

Прилагаются мой текущий project.clj, а также голова и хвост mr1.clj.

src / mr1.clj прекрасно загружается в repl тортов и выполняется. Cake bin создает файл mr1, который не содержит -main.

(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 голос
/ 12 декабря 2011

Как я уже упоминал в ответ на ваш первый вопрос , вы должны включить AOT-компиляцию вашего пространства имен.Я скопировал этот ответ здесь на тот случай, если у кого-то возникнет такая же проблема.

Поскольку в файле sample.project.clj указано, что ключ :main должен иметь в качестве присвоенного значения пространство имен, котороесодержит -main функцию.Так что у вас должна быть такая функция

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

в вашем mr1.clj.Также AFAIR, если вы хотите использовать вашу программу в качестве автономной фляги, вы должны классифицировать это пространство имен.Под этим я подразумеваю, что вам необходимо:

  1. Включить параметр :gen-class в определение пространства имен следующим образом:

    (ns mr1
      (:gen-class)
      ...other options...)
    
  2. СделатьПространство имен AOT-скомпилировано (AOT расшифровывается как Ahead Of Time).Для этого вам необходимо указать свое пространство имен в списке скомпилированных AOT пространств имен в project.clj:

    (defproject mr1 "0.0.1-SNAPSHOT"
      ...other definitions...
      :aot [mr1]
      :main mr1)
    

После того, как вы это сделаете, вы можете использовать cakeсоздать исполняемый файл для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...