2017-04-08 10 views
2

Mon but est de créer une application Web en utilisant compojure et attacher la base de données en tant que base de données. Individuellement, ces deux composants fonctionnent bien. Toutefois, lorsque j'essaie de démarrer le serveur avec lein ring server-headless (y compris datomic comme une dépendance) avec une énorme erreur. La tête de la sortie d'erreur:lein anneau serveur-sans tête échoue en incluant la dépendance 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) 

utilisant le 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"]]}}) 

Initialement généré avec lein new compojure foo. La dépendance com.datomic/clj-client provoque le problème lors du démarrage du serveur.

J'ai essayé d'exclure certains dépendances, en faisant mon project.clj avec

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

mais que les résultats juste à

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

Toute aide serait grandement appriciated.

PS. Je suis un débutant à clojure, et ces messages d'erreur sont tout simplement impossible à comprendre

+0

Quelle version de la jetée est 'com.datomic/CLJ-client « 0.8.606 »' censé travailler avec? –

+0

en utilisant 'lein deps: tree' me donne [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

Pouvez-vous voir le fichier de classe AggregateLifeCycle dans un fichier jar dans votre local .m2 maven repo? Si elle n'existe pas dans l'un des fichiers jar pointé (probablement jetty-util) alors le message d'erreur a du sens –

Répondre

1

Essayez de ne pas utiliser la jetée. Quelqu'un du groupe Slack qui est venu avec un problème très similaire utilise maintenant cette combinaison (http-kit en place de la jetée):

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

+0

le clj-client de datomic dépend de la jetée. Si je purge la jetée, j'obtiens 'CompilerException java.lang.ClassNotFoundException: org.eclipse.jetty.client.HttpClient, en compilant: (cognitect/http_client.clj: 1: 1)' – lsund

+0

À ce stade, je suis abandonner. Merci de votre aide. – lsund

+0

Cette solution a fonctionné pour moi. J'ai eu le même problème que l'OP. – Jason

0

je suis tombé sur cette question aussi, et n'a pu trouver aucune solution de contournement. D'après ce que je comprends, il semble que ring-core utilise un ancien adaptateur de jetée à des fins d'héritage. Je l'ai trouvé https://github.com/sunng87/ring-jetty9-adapter un remplaçant digne comme un anneau de dépendance jusqu'à présent sans autres problèmes dans ma configuration:

[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

On dirait que vous avez trouvé une solution de contournement. – Jason