Вызов Clojure 1.3 из Java - PullRequest
       21

Вызов Clojure 1.3 из Java

3 голосов
/ 24 марта 2012

Я бы хотел вызвать функцию Clojure из кода Java. Этот вопрос недавно не задавался, и существующие ответы не работают для меня. (Clojure 1.3, leiningen 1.7.0). У меня есть следующая минимальная программа:

(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.

1 Ответ

1 голос
/ 24 марта 2012

Кажется, работает для меня, когда я запускаю программу с указанным classpath. Попробуйте вот так:

java -cp '.:thing-1.0.0-SNAPSHOT-standalone.jar' HelloWorldApp
...