I'm trying to split code in 2 files, each with it's own namespace. Following this tutorial.
But I get this error: Exception in thread "main" java.lang.IllegalArgumentException: Don't know how to create ISeq from: clojure.lang.Keyword
I think it's because the namespace being included is not recognised properly.
Main file:
(ns mytest2.handler
  (:use compojure.core)
  (:require [compojure.handler :as handler]
            [compojure.route :as route]
            [mytest2.views :as foo] ;<-- line causing error
            [hiccup.core :refer (html)])
  )
(defn layout [title & content]
  (html
   [:head [:title title]]
   [:body content]))
(defn main-page []
  (layout "My Blog"
   [:h1 "My Blog"]
   [:p "Welcome to my page"]))
(defroutes app-routes
  (GET "/" [] (main-page))
  (route/resources "/")
  (route/not-found "Not Found"))
(def app
  (handler/site app-routes))
;    (println (seq (.getURLs (java.lang.ClassLoader/getSystemClassLoader))))
Second file:
(ns mytest2.views
  :require [hiccup.core :refer (html)]
  )
(defn layout [title & content]
  (html
   [:head [:title title]]
   [:body content]))
(defn main-page []
  (layout "My Blog"
   [:h1 "My Blog"]
   [:p "Welcome to my page"]))
(note I copied the functions from mytest2.views in mytest2.handler for testing. They're not supposed to be in mytest2.handler).
Paths of files:
/mytest2/src/mytest2/handler.clj
/mytest2/src/mytest2/views.clj
(where first mytest2 is the name of the project, and the second is part of the path- automatically created by lein).
As you see in the first file I printed the class path to verify that /mytest2/src/mytest2/ is included, and yes it is.
Received the same error from trying to use :refer :all in Clojurescript, which apparently is against the rules.
You missed some brackets in your original code
;; wrong
(ns mytest2.views
  :require [hiccup.core :refer [html]])
There is just one pair of brackets missing. Do it as in your Main file:
;; Done right!
(ns mytest2.views
  (:require [hiccup.core :refer [html]]))
I am not familar with Compojure so I do not know what you have to require. But you need to add the bracket around :require.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With