2017-04-08 47 views
2

我的目标是使用compojure创建Web应用程序并将datomic作为数据库连接。单独来说,这两个组件工作正常。但是,当我尝试使用 lein ring server-headless(包括datomic作为依赖项)启动服务器时出现错误。误差输出的头:包含数据组依赖关系时,lein ring server-headless会失败

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) 

任何帮助将大大appriciated。

PS。我是clojure的新手,这些错误信息是不可能理解的

+0

码头哪个版本的'com.datomic/CLJ-客户端“0.8.606”'应该工作用? –

+0

使用'lein deps:tree'给我 [org.eclipse.jetty/jetty-client“9.3.7.v20160115] [org.eclipse.jetty/jetty-io”9.3.7.v20160115“] [org.eclipse .jetty/jetty-http“9.3.7.v20160115”] [org.eclipse.jetty/jetty-util“9.3.7.v20160115”] – lsund

+0

您能否在本地.m2 maven的jar文件中看到AggregateLifeCycle类文件如果它不存在于一个指向的jar文件(可能是jetty-util)中,那么错误信息是有道理的 –

回答

1

尽量不要使用jetty。从谁具有非常类似的问题来到了松弛组有人正在利用这种组合(地方码头的HTTP-KIT):

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

+0

datomic clj-client依赖于码头。如果我正在清除码头,我得到'CompilerException java.lang.ClassNotFoundException:org.eclipse.jetty.client.HttpClient,编译:(cognitect/http_client.clj:1:1)' – lsund

+0

在这一点上我是放弃。感谢您的帮助。 – lsund

+0

此解决方案适用于我。我和OP有同样的问题。 – Jason

0

我就遇到了这个问题也是一样,能找到没有解决方法。据我所知,看起来环形核心是使用旧的码头适配器来实现传统目的。我发现https://github.com/sunng87/ring-jetty9-adapter一个值得更换为环扶养至今在我的设置没有进一步的问题:

[com.datomic/clj-client "0.8.606" :exclusions [org.eclipse.jetty/jetty-http org.eclipse.jetty/jetty-util org.eclipse.jetty/jetty-client]] 
[info.sunng/ring-jetty9-adapter "0.10.0"] 
+0

看起来像你找到了解决方法。 – Jason