我是 Clojure、leiningen 和 java 工具链的新手(但不是 lisp、函数式编程、一般软件)。我正在尝试在 Compojure 中引导一些 RESTful Web 服务。
按照以下说明,我可以毫无困难地开始使用 compojure
https://github.com/weavejester/compojure/wiki/Getting-Started
我现在正在尝试从现已过时的网站逐步添加功能
http://mmcgrana.github.com/2010/08/clojure-rest-api.html
leiningen
从上面第一个链接的工作项目开始(它通过 工作lein ring start
,我将一行添加到 project.clj
(defproject hello-world "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:dependencies [[org.clojure/clojure "1.4.0"]
[ring-json-params "0.1.3"] ;;; <---===/// Here's the line I added
[compojure "1.1.5"]]
:plugins [[lein-ring "0.8.2"]]
:ring {:handler hello-world.handler/app}
:profiles
{:dev {:dependencies [[ring-mock "0.1.3"]]}})
然后我重新运行lein deps
并下载了一堆东西。一切都好,该项目仍然有效。现在我添加一行handler.clj
:
(ns hello-world.handler
(:use compojure.core)
(:use ring.middleware.json-params) ;;; <---===/// Here's the line I added
(:require [compojure.handler :as handler]
[compojure.route :as route]))
(defroutes app-routes
(GET "/" [] "Hello World")
(route/not-found "Not Found"))
(def app
(handler/site app-routes))
现在我得到了
java.io.FileNotFoundException: Could not locate ring/middleware/json_params__init.class or ring/middleware/json_params.clj on classpath:
at clojure.lang.RT.load (RT.java:432)
clojure.lang.RT.load (RT.java:400)
clojure.core$load$fn__4890.invoke (core.clj:5415)
clojure.core$load.doInvoke (core.clj:5414)
由于我是工具链的菜鸟,我不知道如何设置或检查类路径或找出json_params
leiningen 存放的位置,甚至不知道如何查看类文件以找出名称应该是什么.
除了这个问题的具体解决方案之外,我希望能得到一些新手的指导,所以也许我将来可以自己解决这样的简单问题。