lein ring server-headless在包含datomic依赖时失败

时间:2017-04-08 06:47:36

标签: clojure compojure ring datomic

我的目标是使用compojure创建一个Web应用程序并将datomic作为数据库附加。单独地,这两个组件工作正常。但是,当我尝试启动服务器时 lein ring server-headless(包括作为依赖关系的datomic),带有极大的错误。错误输出的头部:

Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/jetty/util/component/AggregateLifeCycle, compiling:(ring/adapter/jetty.clj:1:1)
    at clojure.lang.Compiler.load(Compiler.java:7391)
    at clojure.lang.RT.loadResourceScript(RT.java:372)
    at clojure.lang.RT.loadResourceScript(RT.java:363)
    at clojure.lang.RT.load(RT.java:453)
    at clojure.lang.RT.load(RT.java:419)
    at clojure.core$load$fn__5677.invoke(core.clj:5893)

使用project.clj

(defproject pinvest "0.1.0-SNAPSHOT"
  :description "foobar"
  :min-lein-version "2.0.0"
  :dependencies [[org.clojure/clojure "1.8.0"]
                 [org.clojure/core.async "0.3.442"]
                 [org.clojure/tools.namespace "0.2.11"]
                 [compojure "1.5.1"]
                 [ring/ring-defaults "0.2.1"]
                 [com.datomic/clj-client "0.8.606"]]
  :plugins [[lein-ring "0.9.7"]]
  :ring {:handler pinvest.handler/app}
  :profiles
  {:dev {:dependencies [[javax.servlet/servlet-api "2.5"]
                        [ring/ring-mock "0.3.0"]]}})

最初使用lein new compojure foo生成。依赖项com.datomic/clj-client导致启动服务器时出现问题。

我尝试使用

创建project.clj来排除某些依赖项
[com.datomic/clj-client "0.8.606"
    :exclusions [org.eclipse.jetty/jetty-http
                 org.eclipse.jetty/jetty-util
                 org.eclipse.jetty/jetty-client]]

但这只会导致

clojure.lang.Compiler$CompilerException: java.lang.ClassNotFoundException: org.eclipse.jetty.client.HttpClient, compiling:(cognitect/http_client.clj:1:1)

任何帮助都会受到极大关注。

PS。我是clojure的新手,这些错误信息根本无法理解

3 个答案:

答案 0 :(得分:1)

尽量不要使用码头。来自Slack小组的人提出了一个非常类似的问题,现在使用这种组合(http-kit代替码头):

[com.datomic/datomic-free "0.9.5544"] [ring/ring-core "1.5.0"] [http-kit "2.2.0"]

答案 1 :(得分:0)

我也遇到了这个问题,但没有找到解决方法。根据我的理解,看起来环核正在使用旧的码头适配器用于传统目的。到目前为止,我发现https://github.com/sunng87/ring-jetty9-adapter是一个值得替换的戒指,在我的设置中没有其他问题:

<span class="blue">stack</span><span class="blue">x</span><span class="blue">overflow</span>

答案 2 :(得分:0)

很奇怪。 :exclusion对我有用(但是我发现它对您不起作用)。已记录here

[com.datomic/client-pro "0.8.28"
                    :exclusions [org.eclipse.jetty/jetty-client
                                org.eclipse.jetty/jetty-http
                                org.eclipse.jetty/jetty-util]]