// Bar.java
import clojure.lang.RT;
import clojure.lang.Var;
public class Bar {
public static int baz (int a, int b) {
return a + b;
}
public static void main(String[] args) throws Exception {
if (args.length == 0) {
System.err.println("Filename expected as argument.");
System.exit(1);
}
RT.loadResourceScript(args[0]);
Var foo = RT.var("user", "foo");
Object result = foo.invoke(2, 4);
System.out.println(result);
}
}
;; foo.clj
(ns user)
(defn foo [a b]
(. bar baz a b))
$ javac -cp clojure.jar Bar.java
$ java -cp clojure.jar Bar foo.clj
Exception in thread "main" java.lang.Exception: Unable to resolve symbol: bar in this context (foo.clj:4)
at clojure.lang.Compiler.analyze(Compiler.java:4420)
at clojure.lang.Compiler.analyze(Compiler.java:4366)
at clojure.lang.Compiler$HostExpr$Parser.parse(Compiler.java:781)
at clojure.lang.Compiler.analyzeSeq(Compiler.java:4592)
at clojure.lang.Compiler.analyze(Compiler.java:4405)
at clojure.lang.Compiler.analyze(Compiler.java:4366)
at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:3942)
at clojure.lang.Compiler$FnMethod.parse(Compiler.java:3777)
at clojure.lang.Compiler$FnMethod.access$1100(Compiler.java:3654)
at clojure.lang.Compiler$FnExpr.parse(Compiler.java:3024)
at clojure.lang.Compiler.analyzeSeq(Compiler.java:4590)
at clojure.lang.Compiler.analyze(Compiler.java:4405)
at clojure.lang.Compiler.analyzeSeq(Compiler.java:4580)
at clojure.lang.Compiler.analyze(Compiler.java:4405)
at clojure.lang.Compiler.access$100(Compiler.java:35)
at clojure.lang.Compiler$DefExpr$Parser.parse(Compiler.java:373)
at clojure.lang.Compiler.analyzeSeq(Compiler.java:4592)
at clojure.lang.Compiler.analyze(Compiler.java:4405)
at clojure.lang.Compiler.analyze(Compiler.java:4366)
at clojure.lang.Compiler.eval(Compiler.java:4646)
at clojure.lang.Compiler.load(Compiler.java:4972)
at clojure.lang.RT.loadResourceScript(RT.java:330)
at clojure.lang.RT.loadResourceScript(RT.java:317)
at clojure.lang.RT.loadResourceScript(RT.java:309)
at Bar.main(Bar.java:18)
Caused by: java.lang.Exception: Unable to resolve symbol: bar in this context
at clojure.lang.Compiler.resolveIn(Compiler.java:4797)
at clojure.lang.Compiler.resolve(Compiler.java:4743)
at clojure.lang.Compiler.analyzeSymbol(Compiler.java:4720)
at clojure.lang.Compiler.analyze(Compiler.java:4387)
// Bar.java
package bar;
import clojure.lang.RT;
import clojure.lang.Var;
public class Bar {
public static int baz (int a, int b) {
return a + b;
}
public static void main(String[] args) throws Exception {
if (args.length == 0) {
System.err.println("Filename expected as argument.");
System.exit(1);
}
RT.loadResourceScript(args[0]);
Var foo = RT.var("user", "foo");
Object result = foo.invoke(2, 4);
System.out.println(result);
}
}
;; foo.clj
(import bar.Bar)
(defn foo [a b]
(Bar/baz a b))
$ java -cp .:clojure.jar Bar foo.clj
Exception in thread "main" java.lang.NoClassDefFoundError: Bar (wrong name: bar/Bar)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: Bar. Program will exit.