【问题标题】:How to run a maven-packaged clojure application from the jar如何从 jar 中运行 maven 打包的 clojure 应用程序
【发布时间】:2011-04-25 01:37:13
【问题描述】:

我在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.

【问题讨论】:

    标签: java jar clojure maven


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      您需要生成一个包含项目所有依赖项的 JAR 文件文件。 Maven Assembly Plugin 使用内置的 jar-with-dependencies 描述符为您执行此操作。

      【讨论】:

        【解决方案3】:

        如果你使用leiningen,用lein uberjar生成jar后,不要使用java -jar target/your-name.jar,而是使用java -jar target/your-name-standalone.jar

        boot 也是如此。

        【讨论】:

          【解决方案4】:

          是否所有依赖项都可用?我不熟悉 clojure.lang.IFn 类。它来自外部库吗?如果是,您是否使用提供的范围标记了依赖项?

          【讨论】:

            猜你喜欢
            • 2017-11-14
            • 1970-01-01
            • 2017-01-26
            • 2016-04-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-12-09
            • 1970-01-01
            相关资源
            最近更新 更多