2010-05-26 7 views
10

ich die verschiedenen Erste Schritte Beispiele versucht bin, und ich kann in der Strecke als solchekonnte nicht compojure in Classpath lokalisieren

(ns hello-world 
    (:use compojure.core ring.adapter.jetty) 
    (:require [compojure.route :as route])) 

(defroutes example 
    (GET "/" [] "<h1>Hello World Wide Web!</h1>")) 

(run-jetty example {:port 8080}) 

Aber eine grundlegende Hallo Welt Beispiel die Arbeit mit einfachen HTML, wenn ich die html verwenden versuchen, Helfer wie so

(ns hello-world 
    (:use compojure ring.adapter.jetty) 
    (:require [compojure.route :as route])) 

(defroutes example 
    (GET "/" [] 
    (html [:h1 "Hello World"]))) 

(run-jetty example {:port 8080}) 

Dann bekomme ich folgende Fehlermeldung

[null] Exception in thread "main" java.io.FileNotFoundException: konnte nicht lokalisieren compojure__init.cla ss oder compojure.clj auf Classpath: (core.clj: 1)

+1

Können Sie stattdessen erwähnen (: use compojure.core ring.adapter.jetty) stattdessen (: compojure ring.adapter.jetty verwenden)? – W55tKQbuRu28Q4xv

+0

Es gibt noch viele Beispiele im Intraweb, die (: use compojure) enthalten. Dies scheint vor Compojure 0.4 Beispiele zu sein, wie unten beschrieben. Das obige Problem steht immer noch für Menschen, die diesen Beispielen folgen. – Xian

+0

Ich denke, Ihr zweites Beispiel fehlt "[]". Es sollte (GET "/" [] ... –

Antwort

9

Wie W55tKQbuRu28Q4xv in einem Kommentar erwähnt, verwenden Sie (:use compojure ...) im zweiten Beispiel. Sie sollten zu (:use compojure.core ...) wechseln und dann möglicherweise einige zusätzliche Abhängigkeiten für die andere Funktionalität, die Sie verwenden (wie hiccup (< - das ist ein Link zum GitHub Repo), die jetzt ein separates Projekt ist, für die HTML-Gebäude DSL) ziehen .

Meine Vermutung ist, dass Sie versuchen, einige Tutorials zu folgen, die für Compojure 0.3 geschrieben wurden, während Sie Compojure 0.4 verwenden. Letzteres enthält den compojure Namespace überhaupt nicht und wurde stark abgespeckt, wobei die grundlegende HTTP-Verarbeitung an ring delegiert wurde und verschiedene andere Funktionalitätsteile in separate Projekte ausgegliedert wurden (wie das oben erwähnte hiccup).

Glücklicherweise gibt es gute Ressourcen für den Übergang von 0,3 -> 0,4, z.B. this blog entry von Brenton Ashworth. Wenn du etwas nicht finden kannst, das von Compojure entfernt wurde, wirst du wahrscheinlich herausfinden können, wo du es findest. Siehe auch this follow-up discussion auf Compojures Google-Gruppe für Errata und weitere Details.

+0

Danke Michael, das war genau das. Ich musste hiccup.core einbinden, um das (html [: h1 "foo"]) Zeug zum Laufen zu bringen. – Xian

1

Ich spielte mit einem Compojure "Hallo Welt" und hatte dieses Problem (sowie viele andere, die in meinem Gehirn verwirrt werden). Eine weitere Komplikation ist eine Menge der Compojure-Dokumentation im Internet ist bereits veraltet. Unterm Strich ist dies der Schritt, den Sie folgen mögen:

  1. Haben sie eine up-to-date-Version von Leiningen. Stellen Sie sicher, dass Sie die Installationsanweisungen auf der Github-Website befolgen. (Do nicht durch Macports gehen, ihre Leiningen veraltet ist.)

  2. Folgen Compojure Anweisungen here.

Hinweis dass der Dateiname nicht korrekt ist. Es sollte src/hello_www/core.clj NICHT src/hallo-www/core.clj sein.

+0

Danke Julian, das war das Beispiel, das ich arbeiten konnte, aber es sind die Examples, die das (html [: h1 "foo"]) enthielten, das ich nicht konnte.Es scheint, dass das hiccup.core jetzt von Compojure Version 0.4.0 benötigt wird. – Xian