Как настроить classpath при запуске баночки, сделанной из 'lein uberjar'? - PullRequest
5 голосов
/ 02 августа 2010

У меня есть hello.clj следующим образом.

(ns hello) 
(defn hi [] (println "HI"))

Обычно я могу использовать эту функцию из main.clj следующим образом.Файл hello.clj находится в том же каталоге, в котором находится файл main.clj.И класс включает в себя.(текущий путь).

(use 'hello)
(hi)

Как я могу использовать этот hello.clj для 'lein uberjar'?

Я использовал 'lein new myproject;lein deps ', чтобы получить следующую структуру.

.
|-- README
|-- classes
|   `-- myproject
|-- lib
|   |-- clojure-1.2.0-beta1.jar
|   |-- clojure-contrib-1.2.0-beta1.jar
|   `-- lucene-core-3.0.2.jar
|-- project.clj
|-- src
|   `-- myproject
|       `-- core.clj
`-- test
    `-- myproject
        `-- test
            `-- core.clj

project.clj выглядит следующим образом.

(defproject myproject "1.0.0-SNAPSHOT"
  :description "FIXME: write"
  :dependencies [[org.clojure/clojure "1.2.0-beta1"]
                 [org.clojure/clojure-contrib "1.2.0-beta1"]
                 [org.apache.lucene/lucene-core "3.0.2"]]
  :main myproject.core)    

И core.clj выглядит следующим образом.* Теперь, куда мне положить hello.clj?Я попытался скопировать его в каталог myproject / src и запустить uberjar, чтобы получить jar.Но запуск банки вызывает это сообщение об ошибке.

prosseek:myproject smcho$ java -jar myproject-1.0.0-SNAPSHOT-standalone.jar a d d
Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.io.FileNotFoundException: Could not locate hello__init.class or hello.clj on classpath:  (core.clj:0)
...
  • Что может быть не так?В сообщениях об ошибках говорится, что hello.clj отсутствует в пути к классам.Но как настроить classpath с помощью 'lein uberjar'?

Я загрузил проект здесь .

Ответы [ 2 ]

7 голосов
/ 02 августа 2010

Вы помещаете hello.clj в src / myproject, поэтому ns должно быть myproject.hello. С этой файловой структурой я бы ожидал, что hello.clj скажет (ns myproject.hello), а core.clj скажет (use 'myproject.hello).

Когда я делаю эти изменения, я получаю:

$ java -jar myproject-standalone.jar a b c
Welcome to my project! These are your args: (a b c)
hello
HI
0 голосов
/ 02 августа 2010

clj должен быть внутри вашего проекта root / src.С этим все должно работать.Пример аналогичного проекта см. В проекте leiningen.Пространство имен ланцета находится внутри источника:

http://github.com/technomancy/leiningen/tree/master/src/

...