Я пытаюсь настроить простой clojure проект, и я не уверен, как загрузить файлы между проектом. Я уверен, что ответ находится в документации, но я не могу найти простой ответ никем, где и я не уверен, где посмотреть.
По существу мой каталог похож на это:
Clojure/
clojure/
clojure.jar
other clojure files
clojure-contrib/
clojure-contrib.jar
other contrib files
project/
main.clj
utils.clj
И я хочу, чтобы main.clj был чем-то вроде этого:
(ns project.main
(:require project.utils))
(greet)
и utils.clj, чтобы быть чем-то вроде этого:
(ns project.utils)
(defn greet [] (println "Hello, World!"))
Но это перестало работать с:
Exception in thread "main" java.io.FileNotFoundException: Could not locate project/utils__init.class or project/utils.clj on classpath: (main.clj:1)
Когда я пытаюсь выполнить его. Мой путь к классу включает вершину Clojure/
каталог и обе банки. Я также пытался поместить project/
каталог в пути к классу также, без удачи.
Как Вы настраиваете простой clojure проект?
Вы не упоминаете, какая у вас среда (например, Emacs / SLIME / Swank, vim / Vimclojure), поэтому я предполагаю, что вы пытаетесь вызвать ее из командной строки.
У вас должен быть каталог проекта Clojure /
в пути к классам:
java -cp path/to/clojure.jar:path/to/clojure-contrib.jar:path/to/Clojure ...
Убедитесь, что пути верны относительно текущего рабочего каталога. Он должен указывать на корень вашего пространства имен (т. Е. При запуске в Clojure /
путь будет .
).
Фактически, макет вашего проекта работает на моей машине (tm), за исключением того, что у меня используется
вместо , требуется
(но в любом случае у вас должна быть другая ошибка если вы дошли до того момента, когда Clojure может найти все ваши файлы).
Этот ответ , который я отправил на другой вопрос, должен, надеюсь, дать вам представление о том, как ваши имена файлов должны соотноситься с именами пространств имен, чтобы все работало. Однако, поскольку ваш вопрос - «как создать простой проект Clojure», лучше начать со следующего:
Перейдите на GitHub и возьмите Leiningen .
Следуйте инструкциям в README. В итоге вы сделаете что-то вроде
$ lein new my-project
$ cd мой-проект
# ... редактировать project.clj ...
$ lein deps
Взломайте! Вам нужно будет разместить свои файлы в правильных местах. Это будет означать размещение ваших исходных файлов в дереве каталогов с корнем my-project / src
, при этом ваше основное пространство имен, скорее всего, будет находиться в my-project / src / my_project / core.clj
. Но на самом деле я объяснил все детали в ответе, ссылка на который приведена выше , поэтому, пожалуйста, прочтите его (и оставьте комментарий, если я что-то пропустил). : -)
Leiningen позаботится о базовой компоновке проекта и настроит путь к классам для REPL / swank / nailgun (если вы еще не сталкивались с двумя последними, вы скоро это сделаете, но это отдельная тема, шикарную часть которой я рассмотрел в определенной степени, например в этом SO-ответе ), так что, надеюсь, вам никогда не придется иметь дело с java -cp ...
чушь вручную. (Ответ, связанный с swank, на который я ссылался в последнем замечании в скобках, содержит подробную информацию о том, как настроить swank с правильным путем к классам из Emacs.)