FileNotFoundException при создании файла JAR из файла clojure - PullRequest
1 голос
/ 14 июля 2010

Я пытаюсь пройти процесс создания файла jar из простого файла clojure. Ниже мой код clojure:

(ns app.first (:gen-class))  
(refer 'clojure.core)  
(defn -main [& args] (println "this program worked!"))  

Я использую эти инструкции для создания файла jar: http://en.wikibooks.org/wiki/Clojure_Programming/Tutorials_and_Tips

Я вижу ошибку "java.io.FileNotFoundException: не удается найти app / hello__init.class или app / hello.clj на classpath: (NO_SOURCE_FILE: 0)", когда я пытаюсь выполнить шаг (compile 'app.first).

Единственная разница между моей попыткой и ссылкой - это имя моего файла (first.clj вместо hello.clj).

Может кто-нибудь увидеть, где я иду не так? Или, если на то пошло, все, что я хочу сделать, - это научиться создавать банку из файла clojure, поэтому, если кто-нибудь знает, как лучше / проще сделать это, дайте мне знать.

Ответы [ 2 ]

2 голосов
/ 14 июля 2010

Лучше использовать Leiningen для таких задач - он позволяет поддерживать зависимости и упаковывает все необходимые компоненты в jar-файл

1 голос
/ 14 июля 2010

Я ржав на этом, но я слышал о других людях с похожими проблемами.

Я думаю, полезно помнить, что путь к классу, который вы указываете, указывает на корень дерева классов, а имена пакетов в итоге создают подкаталоги в этом дереве. Неловко заявлено, но я надеюсь, вы поняли идею. Таким образом, я думаю, вам нужно выполнить некоторые виды гимнастики с созданием каталогов, соответствующих иерархии "app.first" -> "/ app / first".

Извините, это так близко, как я пришел к разумному и полезному ответу. Надеюсь, это поможет вам.


EDIT:

Основная директива информатики: она работает, только если вы делаете все правильно! Я потратил на это почти 10 минут, но в итоге все получилось.

Вот что мне нужно было сделать, чтобы ваша программа компилировалась:

  • создал каталог app, а внутри него first.clj с вашим кодом.
  • проверяется на *compile-path*, выполняя (pr *compile-path) в Clojure. Там сказано "классы".
  • создал второй каталог classes параллельно app.
  • в оболочке, сделал export CLASSPATH=.:./classes
  • в Clojure, сделал (compile 'app.first)

... и я нашел кучу файлов классов в classes. JARring те должны быть несложно.

Мне показалось очень полезным запустить (doc compile), потому что это напомнило мне о необходимости иметь каталог для удовлетворения требования *compile-path*.

...