Кольцо 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/...
, так далее.