2010-10-13 139 views
3

我在src/main/clojure/za/co/pb/maven_test/test.clj文件中的以下內容:如何運行從罐子一個maven打包Clojure的應用

(ns za.co.pb.maven-test.test 
    (:gen-class)) 

(defn -main [] 
    (println "Hello world!")) 

我也有對Clojure的,Maven的插件necesary依賴與編譯一個POM執行。

如果我執行mvn package命令,我得到一個target/maven-test-1.0-SNAPSHOT.jar文件,如果我期待中的類文件夾我的文件夾target/classes/za/co/pb/maven_test中有這些文件:

  • test.class
  • test.clj
  • test__init.class
  • test$loading__4410__auto__.class
  • test$_main.class

據我所知,這是合適的。

然而,當我運行此命令:

java -cp target\app-1.0-SNAPSHOT.jar za.co.pb.maven_test.test

我得到這個:

Exception in thread "main" java.lang.NoClassDefFoundError: clojure/lang/IFn 
Caused by: java.lang.ClassNotFoundException: clojure.lang.IFn 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 
Could not find the main class: za.co.pb.maven_test.test. Program will exit. 

回答

5

你在類路徑中沒有clojure罐。您可以按照Stuart的迴應嵌入它們,或者如果您不希望將所有依賴項嵌入到單個jar中,則可以使用依賴項插件和jar插件來很好地工作。

請參閱:http://groups.google.com/group/enclojure/msg/87159854fcb0e708的摘要(注意,鏈接的文章中存在拼寫錯誤,該軟件包應該被稱爲「foo」)。

-2

中的所有可用的依賴?我不熟悉clojure.lang.IFn類。它來自外部圖書館嗎?如果是你用提供的範圍標記了依賴項?

4

您需要生成一個包含項目所有依賴關係的JAR文件文件。 Maven Assembly Plugin使用內置的jar-with-dependencies描述符爲您完成。

1

如果您使用leiningen,生成帶有lein uberjar的罐子後,請勿使用java -jar target/your-name.jar,而應使用java -jar target/your-name-standalone.jar

相同的東西boot