2010-10-13 62 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