前回の流れで、今回は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