3

テストWebアプリケーションを実行lein 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)

test.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では、WARは正常にコンパイルされ、tomcatで問題なく動作しています。コードに見落としているバグはありますか?なぜroutes/...だけでなく、test.routes / ...を呼び出す必要があるのですか?

4

1 に答える 1

8

あなたはそれをベクトルの中に置く必要があります:

(:require [test.routes :as routes])
于 2011-06-06T12:12:23.607 に答える