2011-06-06 68 views
3

我执行lein uberwar为我的测试Web应用程序,我得到以下奇怪的错误:怪异雷音uberwar行为

Exception in thread "main" java.lang.ClassCastException: java.lang.Boolean cannot be cast to clojure.lang.Symbol (servlet.clj:1) 

的servlet.clj包含以下内容:

(ns test.servlet 
    (:use ring.util.servlet) 
    (:require test.routes :as routes) 
    (:gen-class :extends javax.servlet.http.HttpServlet)) 

(defservice routes/app-routes) 

测试.routes文件包含:

(ns test.routes 
    (:use compojure.core) 
    (:require [compojure.route :as route] 
      [compojure.handler :as handler])) 


(defroutes app-routes 
    (GET "/" [] {:status 200 
       :headers {"Content-Type" "text/html"} 
       :body "<h1>Hello World</h1>"}) 
    (route/files "/" {:root "static"}) 
    (ANY "/:s" [s] (str "page-not-found" s) 

;; For lein ring-server 
;(def test-handler 
; (handler/site app-routes)) 

奇怪的是,如果我替换行

(:require test.routes :as routes) 

有了:

(:require test.routes) 

并调用

(defservice test.routes/app-routes) 

在servlet.clj,战争编译罚款,它是在Tomcat的工作完美无缺。我的代码中是否存在一些我无法看到的错误?为什么我需要调用test.routes/...而不是仅仅路由/ ...?

回答

8

你需要把它放在一个向量内:

(:require [test.routes :as routes]) 
+0

多么愚蠢的我,谢谢。 – kliron 2011-06-06 12:40:54

+0

@stk欢迎您!你是否介意接受这个答案,如果它解决了你的问题? – ponzao 2011-06-07 10:32:23

+0

对不起,花了这么长时间 – kliron 2011-06-20 07:42:51