3
我想从Java代码调用Clojure函数。这个问题最近没有被问到,现有的答案对我来说并不合适。 (Clojure 1.3,Leiningen 1.7.0)。我有以下几个最基本的程序:从Java调用Clojure 1.3
(ns thing.main
(:gen-class
:methods [#^{:static true} [foo [int] void]]))
(defn -foo [i] (println "hello world, input is " i))
.clj看起来像这样的项目:
(defproject thing "1.0.0-SNAPSHOT"
:dependencies [[org.clojure/clojure "1.3.0"]]
:aot [thing.main]
:omit-source true)
我产生uberjar,我把它复制到同一个目录与这个小Java程序。
import thing.*;
class HelloWorldApp {
public static void main(String[] args) {
System.out.println("Hello World!");
main.foo(5); // or, alternately, foo(5);
}
}
我编译使用这个命令:
javac -cp '.:thing-1.0.0-SNAPSHOT-standalone.jar' HelloWorldApp.java
编译成功,但是当它运行(ClassNotFoundException的)程序失败。直接调用foo的第二种形式,如foo(5),甚至没有编译。我也尝试过,没有“静态”声明:gen-class。
你说得对 - 我没有使用完整的-cp选项调用java。 – sandover 2012-03-23 23:02:09