Hi Ramesh, Based on the stack-trace, the error is thrown during compile-time. This means the compiler is having a hard time compiling test1/core.clj because it doesn't know of any hello namespace. This makes sense since no hello namespace has been referred to in the test1.core namespace (i.e. the file being compiled). Note that the call to ns-publics works because you are actually using the quoted symbol hello which the compiler doesn't have to resolve. In order to get the value of the vars in hello at runtime (after loading the file) you can use the resolve or the intern functions, which return the var (not the value) from the given namespace, so you have to dereference it:
(println (-> 'hello/someconst resolve deref)) Also, if the hello.clj file is in the src dir, you should run: lein run src/hello.clj Which show this output: #<Namespace hello> {-main #'test1.core/-main} {someconst #'hello/someconst} #<hello$someconst hello$someconst@cdc69b> HTH, Juan On Sunday, October 20, 2013 11:49:27 AM UTC+8, Ramesh Thulasiram wrote: > > Hi All, > > I'm calling load-file to load a user-specified file inside -main. And, the > loaded file has its own namespace, and I'm able to see that using > (ns-publics) as well. However, when I try to call a function inside the > loaded file, from -main, I'm getting a "no such namespace" exception. > > ;; Lein project test1;File : src/test1/core.clj(ns test1.core > (:gen-class))(defn -main [ & args] (load-file (first args)) (println > (ns-publics 'test1.core)) (println (ns-publics 'hello)) (println > (hello/someconst))) ;File : hello.clj(ns hello)(println *ns*)(defn someconst > [] 25); run as : ; lein run hello.clj(comment error Exception in thread > "main" java.lang.RuntimeException: No such namespace: hello, > compiling:(test1/core.clj:9:12) at > clojure.lang.Compiler.analyze(Compiler.java:6380) at > clojure.lang.Compiler.analyze(Compiler.java:6322) at > clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3573) at > clojure.lang.Compiler.analyzeSeq(Compiler.java:6562) at > clojure.lang.Compiler.analyze(Compiler.java:6361) at > clojure.lang.Compiler.analyze(Compiler.java:6322) at > clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3624) at > clojure.lang.Compiler.analyzeSeq(Compiler.java:6562) at > clojure.lang.Compiler.analyze(Compiler.java:6361) at > clojure.lang.Compiler.analyze(Compiler.java:6322) at > clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5708) at > clojure.lang.Compiler$FnMethod.parse(Compiler.java:5139) at > clojure.lang.Compiler$FnExpr.parse(Compiler.java:3751) at > clojure.lang.Compiler.analyzeSeq(Compiler.java:6558) at > clojure.lang.Compiler.analyze(Compiler.java:6361) at > clojure.lang.Compiler.analyzeSeq(Compiler.java:6548) at > clojure.lang.Compiler.analyze(Compiler.java:6361) at > clojure.lang.Compiler.access$100(Compiler.java:37) at > clojure.lang.Compiler$DefExpr$Parser.parse(Compiler.java:529) at > clojure.lang.Compiler.analyzeSeq(Compiler.java:6560) at > clojure.lang.Compiler.analyze(Compiler.java:6361) at > clojure.lang.Compiler.analyze(Compiler.java:6322) at > clojure.lang.Compiler.eval(Compiler.java:6623) at > clojure.lang.Compiler.load(Compiler.java:7064) at > clojure.lang.RT.loadResourceScript(RT.java:370) at > clojure.lang.RT.loadResourceScript(RT.java:361) at > clojure.lang.RT.load(RT.java:440) at clojure.lang.RT.load(RT.java:411) > at clojure.core$load$fn__5018.invoke(core.clj:5530) at > clojure.core$load.doInvoke(core.clj:5529) at > clojure.lang.RestFn.invoke(RestFn.java:408) at > clojure.core$load_one.invoke(core.clj:5336) at > clojure.core$load_lib$fn__4967.invoke(core.clj:5375) at > clojure.core$load_lib.doInvoke(core.clj:5374) at > clojure.lang.RestFn.applyTo(RestFn.java:142) at > clojure.core$apply.invoke(core.clj:619) at > clojure.core$load_libs.doInvoke(core.clj:5413) at > clojure.lang.RestFn.applyTo(RestFn.java:137) at > clojure.core$apply.invoke(core.clj:619) at > clojure.core$require.doInvoke(core.clj:5496) at > clojure.lang.RestFn.invoke(RestFn.java:408) at > user$eval3.invoke(NO_SOURCE_FILE:1) at > clojure.lang.Compiler.eval(Compiler.java:6619) at > clojure.lang.Compiler.eval(Compiler.java:6608) at > clojure.lang.Compiler.eval(Compiler.java:6582) at > clojure.core$eval.invoke(core.clj:2852) at > clojure.main$eval_opt.invoke(main.clj:308) at > clojure.main$initialize.invoke(main.clj:327) at > clojure.main$null_opt.invoke(main.clj:362) at > clojure.main$main.doInvoke(main.clj:440) at > clojure.lang.RestFn.invoke(RestFn.java:421) at > clojure.lang.Var.invoke(Var.java:419) at > clojure.lang.AFn.applyToHelper(AFn.java:163) at > clojure.lang.Var.applyTo(Var.java:532) at > clojure.main.main(main.java:37)Caused by: java.lang.RuntimeException: No such > namespace: hello at clojure.lang.Util.runtimeException(Util.java:219) > at clojure.lang.Compiler.resolveIn(Compiler.java:6844) at > clojure.lang.Compiler.resolve(Compiler.java:6818) at > clojure.lang.Compiler.analyzeSymbol(Compiler.java:6779) at > clojure.lang.Compiler.analyze(Compiler.java:6343) ... 54 more) > > > > > -ramesh > -- -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.