如何从jar运行maven包装的clojure应用程序

Pie*_*eed 4 java jar clojure maven

我在src/main/clojure/za/co/pb/maven_test/test.clj文件中有以下内容:

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

(defn -main []
  (println "Hello world!"))
Run Code Online (Sandbox Code Playgroud)

我还有一个POM,它在编译执行时对clojure-maven-plugin有必要的依赖.

如果我执行一个mvn package命令,我得到一个target/maven-test-1.0-SNAPSHOT.jar文件,如果我查看classes文件夹,我在文件夹中有这些文件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.
Run Code Online (Sandbox Code Playgroud)

小智 6

你没有在类路径中使用clojure jar.您可以根据Stuart的响应嵌入它们,或者如果您不喜欢将所有依赖项嵌入到单个jar中,您可以使用依赖插件和jar插件来使其正常工作.

有关摘要,请参阅:http://groups.google.com/group/enclojure/msg/87159854fcb0e708(注意,链接帖子中存在拼写错误,该包应称为"foo").