我的目标是使用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的新手,这些错误信息简直无法理解。
com.datomic/clj-client "0.8.606"
应该与哪个版本的 Jetty 兼容? - Chris Murphylein 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"] - lsundAggregateLifeCycle.class
的版本(9.3.7)?比如说,用一个空的jar文件替换它,找出是什么引入了你想要摆脱的jetty-util
的9.3.7版本。然后,也许你可以回到依赖于9.3.7的旧版本,试图解决这个三角依赖问题。我原以为lein deps :tree
会显示确切的问题——需要9.3.7的是什么。你需要将其降级(这样jetty-util
也会被降级),或者排除其对jetty-util
的依赖。 - Chris Murphycom.datomic/clj-client
。该库通过maven中央仓库提供。然而,它似乎只显示软件包的最新版本。你知道如何获取早期版本吗? - lsund