4

不确定为什么当我lein with-profile +live ring uberjarjava -jar我的 uberjar 时,我得到这个异常:java.lang.NoClassDefFoundError: clojure/lang/Var.

project.clj

(defproject gn-preview-api "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url  "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.9.0"]]
  :main gn-preview-api.www.app
  :target-path "target/%s"
  :profiles {:uberjar {:aot :all}
             :staging {:aot :all}
             :live    {:aot :all}
             :dev     {:plugins      [[lein-ring "0.9.7"]]
                       :dependencies [[javax.servlet/servlet-api "2.5"]]}})

有任何想法吗?

4

1 回答 1

9

Leiningen在运行时会生成两个.jar文件lein uberjar。以文件名结尾的...-standalone.jar是实际的 uberjar,其中包含 Clojure(核心)。独立文件可以简单地使用java -jar my_uberjar.jar. 如果您运行另一个(非 uber jar),则 Clojure 需要在类路径中可用。

您可以使用 . 查看每个 jar 文件中包含哪些依赖项jar tf my_uberjar.jar。uberjar 应该包含clojure/core/...,clojure/lang/...等。

于 2018-08-15T08:33:07.920 回答