2010-05-26 65 views
10

我嘗試了各種入門例子定位的Compojure,我可以得到一個基本的Hello World示例的路線基本的HTML工作作爲這樣無法在類路徑

(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}) 

但是,當我嘗試使用HTML傭工像這樣

(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}) 

然後我收到以下錯誤

[空]例外在線程「主要」 java.io.FileNotFoundException:找不到compojure__init.cla ss或classpath上的compojure.clj:(core.clj:1)

+1

可能是你提到(:使用compojure.core ring.adapter.jetty),而不是(:使用compojure ring.adapter.jetty)? – W55tKQbuRu28Q4xv 2010-05-26 04:29:32

+0

intraweb中還有很多例子,包括(:使用compojure)。這似乎是Compojure 0.4之前的例子,如下所述。上面的問題仍然代表着仍然遵循這些例子的人。 – Xian 2010-05-27 11:45:27

+0

我認爲你的第二個例子缺少「[]」。它應該是(GET「/」[] ... – 2010-05-31 21:39:12

回答

9

由於W55tKQbuRu28Q4xv在註釋中提到,所以在第二個示例中使用(:use compojure ...)。您應該切換到(:use compojure.core ...),然後可能爲您使用的其他功能(如hiccup(< - 這是GitHub回購的鏈接)提供其他功能的一些附加功能,這是HTML構建DSL的一個單獨項目) 。

我的猜測是,您正在嘗試使用Compojure 0.4編寫Compojure 0.3的一些教程。後者根本不包括compojure命名空間,並且已經減少了很多,基本的HTTP處理委託給ring,並且各種其他功能分離出來以分離項目(如前面提到的hiccup)。

幸運的是,在0.3 - > 0.4轉換時有很好的資源,例如, this blog entry by Brenton Ashworth。如果您找不到Compojure正確刪除的內容,那麼您現在可以從中瞭解到哪裏可以找到它。請參閱Compojure的Google小組上的this follow-up discussion以瞭解勘誤和其他詳細信息。

+0

謝謝邁克爾,這就是它。我需要包括hiccup.core來獲取(html [:h1「foo」])的東西。 – Xian 2010-05-27 11:42:46

1

我玩了一個Compojure「Hello World」,並且遇到了這個問題(以及其他許多混淆在我腦中的問題)。另一個複雜因素是網絡上的很多Compojure文檔已經過時。底線,這些都是要遵循以下步驟:

  1. Leiningen向上最新版本。確保您按照github網站上的安裝說明進行操作。 (做不是通過macports;他們的Leiningen是過時了。)

  2. 按照Compojure指示here

該文件的名稱不正確。它應該是src/hello_www/core.clj不是src/hello-www/core.clj。

+0

謝謝朱利安,這是我可以工作的例子,但是它包含了(html [:h1「foo」])的exmaples,我不能這樣做,看起來hiccup.core現在需要Compojure 0.4.0版本。 – Xian 2010-05-27 11:41:17