我是Clojure,leiningen和java工具鏈的新手(但不是爲了解釋,函數式編程,一般的軟件)。我試圖在Compojure中引導一些RESTful Web服務。試圖使用ring.middleware.json-params與compojure
我毫不費力就開始使用的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存放的,甚至是如何查看類文件以找出名稱應該是什麼。
除了針對這個問題的具體解決方案之外,我會很感謝指向新手的東西,所以也許我可以在將來自己解決這些直接的問題。
當我在emacs nrepl中編譯項目時出現錯誤....看起來像問題出現在工具鏈的emacs部分 - 我沒有報告的部分。 'lein ring server'正在工作。 – 2013-03-10 04:39:31
- 是的,重新啓動emacs並重做'nrepl-jack-in'解決了這個問題。看起來像改變project.clj你必須從project.clj目錄重新啓動'nrepl'。說得通。感謝您的線索! – 2013-03-10 04:46:04
看來你不必在更改project.clj時重啓所有的東西。只需nrepl-eval-緩衝該文件,它將被nrepl服務器知道。 – yehe 2013-03-10 04:51:58