Странное поведение Lein Uberwar - PullRequest
3 голосов
/ 06 июня 2011

Я выполняю 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 работает без сбоев. Есть ли какая-то ошибка в моем коде, которую я не вижу? Почему мне нужно вызывать test.routes / ... вместо просто маршрутов / ...?

1 Ответ

8 голосов
/ 06 июня 2011

Вы должны поместить его в вектор:

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