java - 如何从 jar 运行 maven 打包的 clojure 应用程序

标签 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!"))

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

如果我执行 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.

最佳答案

类路径中没有 clojure jar。您可以按照 Stuart 的回复嵌入它们,或者如果您不喜欢将所有依赖项嵌入到一个 jar 中,您可以使用依赖插件和 jar 插件来很好地工作。

参见:http://groups.google.com/group/enclojure/msg/87159854fcb0e708摘要(请注意,链接的帖子中有错字,该包应称为“foo”)。

关于java - 如何从 jar 运行 maven 打包的 clojure 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3927652/

相关文章:

java - 如何在Ant的build.xml中指定<java jar ="sth.jar"fork ="true"/>的输入参数?

java - 解析外部依赖的类路径

clojure - 在clojure中生成从 'a'到 'z'的字符序列

java - 将 HashMap 转换为 Clojure 映射的执行方式与 java 调用不同

java - Play Framework 2.0 表单助手 : from checkbox to List<String>

控制台中的 Java 消息 - 两种方法具有相同的方法签名但不提供可分配的类?

java - 带有泛型和 Mockito 的 ClassCastException

java - 在 IntelliJ IDEA 中测试小代码片段的快捷方式?

java - 将 jar 添加到不适用于 redis 的库

clojure - 将图像表单clj-http请求保存到文件