calling Clojure from Java

前回の流れで、今回は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を作成し、下記のように実行することもできます。

clojure01

参考:
http://stackoverflow.com/questions/2181774/calling-clojure-from-java
http://www.coderanch.com/t/601586/clojure/Calling-Clojure-Java-code

Leave a Reply