Я бы назвал функцию Clojure из Java-кода. Этот вопрос не задавался в последнее время, и существующие ответы не работают на меня. (Clojure 1.3, leiningen 1.7.0). У меня есть следующая минимальная программа:Вызов Clojure 1.3 из Java
(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.
Вы правы - я не вызывал java с опцией full -cp. – sandover