在类路径中找不到Compojure

10

我正在尝试不同的入门示例,我可以使用在路由中使用基本HTML使基本的Hello World示例工作,如下所示:

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

然后我遇到了以下错误

[null] Exception in thread "main" java.io.FileNotFoundException: 在类路径上找不到 compojure__init.class 或 compojure.clj:(core.clj:1)


1
你是不是想说 (:use compojure.core ring.adapter.jetty) 而不是 (:use compojure ring.adapter.jetty)? - Sergey Miryanov
仍有许多在Intraweb中包括(:use compojure)的示例。如下所述,这似乎是Compojure 0.4之前的示例。对于仍然遵循这些示例的人来说,以上问题仍然存在。 - Xian
我认为你的第二个例子缺少了 "[]"。应该是 (GET "/" [] ... - Julien Chastang
2个回答

9
正如W55tKQbuRu28Q4xv在评论中提到的,您在第二个例子中使用了(:use compojure ...)。您应该切换到(:use compojure.core ...),然后可能会引入一些其他功能所需的依赖项(比如hiccup(<- 这是指向GitHub仓库的链接),它现在是一个单独的项目,用于构建HTML的DSL)。
我猜测您正在尝试遵循为Compojure 0.3编写的一些教程,而同时又使用Compojure 0.4。后者根本不包含compojure命名空间,并且已经大幅精简,基本的HTTP处理被委托给ring,各种其他功能被分离到单独的项目中(比如前面提到的hiccup)。
幸运的是,有关于从0.3迁移到0.4的好资源,例如Brenton Ashworth的这篇博客文章。如果您找不到从Compojure中删除的东西,很有可能您能够从中了解到现在在哪里找到它。此外,请参阅Compojure的Google组上的这个后续讨论,以获取勘误和其他详细信息。

谢谢Michael,这正是我需要的。我需要包含hiccup.core才能让(html [:h1 "foo"])正常工作。 - Xian

1

我在使用Compojure的“Hello World”时遇到了这个问题(还有许多其他问题)。另一个问题是网上很多Compojure文档已经过时了。底线是,这些是您想要遵循的步骤:

  1. 拥有最新版本的Leiningen。确保您按照github网站上的安装说明操作。(不要通过macports进行安装;它们的Leiningen已经过时。)

  2. 请参阅此处的Compojure说明。

注意文件名不正确。应该是src / hello_www / core.clj而不是src / hello-www / core.clj。


谢谢Julian,这是我能够运行的示例。但是包含(html [:h1“foo”])的示例我无法运行。看起来从Compojure版本0.4.0开始需要hiccup.core。 - Xian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接