antでcljファイルをコンパイル(build.xmlのひな形)
antでcljファイルをコンパイル後、jarにアーカイブするためのbuild.xmlを作成した。
プロジェクト構成
プロジェクトのディレクトリ構成は以下の通り。
hogeapp/ … プロジェクトディレクトリ src/ … ソースファイル sample/hoge/hogeapp.clj … サンプルアプリ classes/ … クラスファイル lib/ … ライブラリ clojure.jar clojure-contrib.jar hogeapp.jar
サンプルアプリ
コマンドライン引数を標準出力に出力する簡単なアプリ。
(ns hogeapp (:gen-class)) (defn -main [& args] (doseq [arg args] (println arg)))
build.xml
配布と実行が簡単にできるように、libディレクトリにあるclojure.jar,clojure-contrib.jarもまとめてアーカイブし、実行可能なjarを作成する。
<?xml version="1.0" encoding="UTF-8"?> <project name="hogeapp" default="all"> <description> Sample build.xml for *.clj files. </description> <property name="src" value="src"/> <property name="classes" value="classes"/> <property name="lib" value="./lib"/> <property name="destfile" value="hogeapp.jar"/> <property name="mainclass" value="sample.hogeapp"/> <target name="init"> <mkdir dir="${classes}"/> </target> <target name="compile" depends="init"> <java classname="clojure.lang.Compile"> <classpath> <fileset dir="${lib}"> <include name="*.jar"/> </fileset> <pathelement path="${src}:${classes}"/> </classpath> <sysproperty key="clojure.compile.path" value="${classes}"/> <arg value="sample.hogeapp"/> </java> </target> <target name="jar" depends="compile"> <jar destfile="${destfile}"> <zipfileset dir="${classes}"/> <!-- lib配下のjarもまとめてアーカイブする --> <zipgroupfileset dir="${lib}" includes="*.jar"/> <manifest> <attribute name="Main-Class" value="${mainclass}"/> </manifest> </jar> </target> <target name="all" depends="jar"> </target> <target name="clean"> <delete dir="${classes}"/> </target> </project>
cljファイルのコンパイルにはclojure.jarに含まれるclojure.lang.Compileクラスを使用する。compileターゲットに記述したように、javaタスクを使用してコンパイルする。
javaタスクに設定する属性と子要素
要素 | 属性 | 値 |
---|---|---|
java | classname | clojure.lang.Compile |
+classpath | クラスパスを設定(※srcとclassesも必要) | |
+sysproperty | key | clojure.compile.path |
value | classes | |
+arg | value | コンパイルするcljファイル(※拡張子は不要) |
cljファイルが複数の場合は、そのファイル分だけarg要素を追加する。
ビルドと実行
ビルドしてみる。
satoshi@ubuntu:~/workspace/hogeapp$ ls build.xml lib src satoshi@ubuntu:~/workspace/hogeapp$ ant Buildfile: build.xml init: [mkdir] Created dir: /home/satoshi/workspace/hogeapp/classes compile: [java] Compiling sample.hogeapp to classes jar: [jar] Building jar: /home/satoshi/workspace/hogeapp/hogeapp.jar all: BUILD SUCCESSFUL Total time: 12 seconds satoshi@ubuntu:~/workspace/hogeapp$ ls build.xml classes hogeapp.jar lib src ←◆hogeapp.jarができた
さて、実行だ。
satoshi@ubuntu:~/workspace/hogeapp$ java -jar hogeapp.jar one two three one two three
動いた。\(^▽^)/