clojure - ClassNotFoundException on use of another ns -


as simple question is, can't seem find right way different namespaces in same directory validly refer 1 another. have 2 files:

project_root/src/babbler/core.clj:

(ns babbler.core   (:gen-class)   (use '[clojure.string :only (join split)]))  (defn foo [] "foo") 

and project_root/src/babbler/bar.clj:

(ns babbler.bar)  (use [babbler.core :as babble]) 

this file contains main method, specified in project.clj via :main babbler.bar

my entire structure generated counterclockwise, with default leiningen template.

the result of running lein repl this:

exception in thread "main" java.lang.classnotfoundexception: babbler.core, compiling:(babbler/bar.clj:3:1)     @ clojure.lang.compiler.analyze(compiler.java:6380)     @ clojure.lang.compiler.analyze(compiler.java:6322)     @ clojure.lang.compiler$vectorexpr.parse(compiler.java:3024)     @ clojure.lang.compiler.analyze(compiler.java:6363)     @ clojure.lang.compiler.analyze(compiler.java:6322) 

(...)

your use should inside definition of namespace:

(ns babbler.bar   (use [babbler.core :as babble])) 

in fact use discouraged, may want write as:

(ns babbler.bar   (:require [babbler.core :as babble :refer [foo]])) 

that way can call function f babbler.core namespace babble/f, , can call foo directly. in addition, file has information foo comes or else won't need go searching it.


Comments

Popular posts from this blog

php - Submit Form Data without Reloading page -

linux - Rails running on virtual machine in Windows -