Кольцо lein uberjar - java.lang.NoClassDefFoundError: clojure/lang/Var

Не знаю почему, когда я lein with-profile +live ring uberjar а потом java -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"]
                 [org.clojure/core.async "0.3.442"]

                 ;; testing
                 [org.clojure/test.check "0.9.0"]

                 ;; csv
                 [org.clojure/data.csv "0.1.3"]


                 ;; json handling
                 [camel-snake-kebab "0.4.0"]
                 [org.clojure/data.json "0.2.6"]

                 ;; http reqs
                 [http-kit "2.2.0"]
                 [clj-http "3.9.1"]
                 ;; logging
                 [com.taoensso/timbre "4.8.0"]
                 ;; redirects SLF4J logs to timbreg
                 ;[com.fzakaria/slf4j-timbre "0.3.7"]
                 ;[org.slf4j/log4j-over-slf4j "1.7.14"]
                 ;[org.slf4j/jul-to-slf4j "1.7.14"]
                 ;[org.slf4j/jcl-over-slf4j "1.7.14"]

                 ;; time
                 [clj-time "0.13.0"]
                 ;; email
                 [com.draines/postal "2.0.2"]

                 ;;rmq
                 [com.novemberain/langohr "3.7.0"]

                 ;; env management
                 [environ "1.1.0"]
                 [lein-environ "1.1.0"]

                 ;; redis
                 [com.taoensso/carmine "2.16.0"]

                 ; handle signals
                 [spootnik/signal "0.2.1"]


                 ;; sql
                 [com.microsoft.sqlserver/mssql-jdbc "6.1.0.jre8"]
                 [org.clojure/java.jdbc "0.7.0-alpha3"]
                 [hikari-cp "1.7.5"]

                 ;; system management
                 [mount "0.1.11"]

                 ;; caching
                 [com.github.ben-manes.caffeine/caffeine "2.5.2"]

                 ;; api
                 [ring "1.7.0-RC1"]
                 [metosin/compojure-api "1.1.11"]
                 [prismatic/schema "1.1.9"]
                 [metosin/spec-tools "0.3.2"]

                 ;; spawning to bash/shell
                 [me.raynes/conch "0.8.0"]

                 ;; microsoft blob
                 [com.microsoft.azure/azure-storage "7.0.0"]

                 ]
  :ring {:handler gn-preview-api.www.app/app}
  :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"]]}})

Есть идеи?

1 ответ

Решение

Лейнинген производит два .jar файлы при запуске lein uberjar, Тот, чье имя файла заканчивается на ...-standalone.jar является фактическим Uberjar, который содержит Clojure (ядро). Автономный файл может быть запущен просто с java -jar my_uberjar.jar, Если вы запустите другой (не Uber JAR), то Clojure должен быть доступен в classpath.

Вы можете просмотреть, какие зависимости включены в каждый файл JAR с jar tf my_uberjar.jar, Uberjar должен содержать clojure/core/..., clojure/lang/..., так далее.

Другие вопросы по тегам