2010-05-26 96 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