我在src/main/clojure/za/co/pb/maven_test/test.clj
文件中有以下内容:
(ns za.co.pb.maven-test.test
(:gen-class))
(defn -main []
(println "Hello world!"))
我还有一个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.
答案 0 :(得分:6)
你在类路径中没有clojure jar。您可以根据Stuart的响应嵌入它们,或者如果您不喜欢将所有依赖项嵌入到单个jar中,您可以使用依赖插件和jar插件来使其正常工作。
请参阅:http://groups.google.com/group/enclojure/msg/87159854fcb0e708获取摘要(注意,链接帖子中有拼写错误,该包名称应为“foo”)。
答案 1 :(得分:4)
您需要生成一个包含项目所有依赖项的JAR文件。 Maven Assembly Plugin使用内置的jar-with-dependencies
描述符为您完成此任务。
答案 2 :(得分:2)
如果您使用leiningen,在使用lein uberjar
生成jar后,请不要使用java -jar target/your-name.jar
,而是使用java -jar target/your-name-standalone.jar
。
boot
也是如此。
答案 3 :(得分:-2)
所有依赖项都可用吗?我不熟悉clojure.lang.IFn类。它来自外部图书馆吗?如果是,你用提供的范围标记了依赖关系吗?