前回の流れで、今回はClojureを呼び出してみました。
環境: Java 1.8.0_25, Clojure 1.6.0, Leiningen 1.0 / Windows 8.1
JavaMain.java
import clojuresub.core;
public class JavaMain{
public static void main(String[] args){
String str = "Java String";
core.sub(str);
}
}
lein new clojuresub
を実行の後、以下のようにプログラムコード、プロジェクトファイルを記述します。
core.clj
(ns clojuresub.core
(:gen-class
:name clojuresub.core
:methods [#^{:static true} (sub [String] String)]))
(defn -sub
[s]
(println (str "Clojure Message : " s)))
project.clj
(defproject clojuresub "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.6.0"]]
:aot :all
:main clojuresub)
clojuresubディレクトリで、
lein compile
javac -cp .\target\classes JavaMain.java
java -cp .`;target\classes`;clojure-1.6.0.jar JavaMain
を実行します。
clojre-1.6.0.jarは、leiningenインストール時の.m2フォルダリポジトリ内の深いところからカレントにコピーしておきます。
lein uberjar
を実行してjarを作成し、下記のように実行することもできます。
参考:
http://stackoverflow.com/questions/2181774/calling-clojure-from-java
http://www.coderanch.com/t/601586/clojure/Calling-Clojure-Java-code