我有一個hello.clj如下。如何在運行由'lein uberjar'創建的jar時設置類路徑?
(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如下。
(ns myproject.core
(:gen-class))
(use 'hello)
(defn test1 [] (println "hello"))
(defn -main [& args]
(do
(println "Welcome to my project! These are your args:" args)
(test1)
(hi)))
現在,我在哪裏把hello.clj? 我試圖將其複製到myproject/src目錄並運行uberjar來獲取jar。但是,運行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不在類路徑上。但是,如何用'lein uberjar'設置類路徑?
我上傳了項目here。
是的,它的工作原理!非常感謝。 – prosseek 2010-08-02 20:57:46
你想要做什麼(ns hello)被稱爲單段命名空間。儘管當你剛剛進入Clojure-land時它可以正常工作,但是一旦執行了AOT以便可以作爲uberjar啓動,myproject.core就會變成Java字節碼,並且由於它沒有Java包,因此無法訪問hello名稱空間。 – technomancy 2010-08-13 17:55:31