--- title: clojure-maven-pluginを使ってMavenでClojure+Javaビルド tags: [] categories: ["Programming", "Lisp", "Clojure"] date: 2010-03-13T16:50:58Z updated: 2010-03-13T17:48:18Z ---
これまでさんざんClojureのビルドツールとしてLeiningenを推してきましたが。Leiningenの気に入らない点として
を感じていました。
mavenなら↑のようなことはないので、mavenでClojureがコンパイルできてrepl起動して、swank-server立ち上げられるといいなと思っていたら、とっくにありますね、clojure-maven-plugin。
このプラグインを使ってすぐにMavenでClojureを使えるようにblankプロジェクトを作ってGithubにコミットしました。
maven-clojure-blank
$ git clone git://github.com/making/maven-clojure-blank.git
.gitディレクトリを削除して、project名(ディレクトリ名、pom.xmlの設定)を変えて使ってください
mvn compileでClojureコードもJavaコードもコンパイルできます。ソースフォルダに
src/main/clojure/am/ik/blank/hello.clj src/main/java/am/ik/blank/Hello.java
があったとき、
$ mvn compile $ find target/classes target/classes target/classes/am target/classes/am/ik target/classes/am/ik/blank target/classes/am/ik/blank/hello$foo__3.class target/classes/am/ik/blank/hello$loading__6309__auto____1.class target/classes/am/ik/blank/Hello.class target/classes/am/ik/blank/hello__init.class
と両方classファイルできてますね。OK。
Clojureのコンパイルだけしたい場合はmvn clojure:compile
src/test/clojureにテストコード書いておけばmvn testでjavaのテストと一緒にclojureのテストも行われます。
Clojureのテストだけしたい場合はmvn clojure:test
replもできます。特徴はクラスパスでしょう。
$ mvn clojure:repl Clojure 1.1.0 user=> (use 'clojure.contrib.classpath) nil user=> (doseq [cp (classpath)] (println cp)) ## # # # # # # # # # # nil
clojureのソースディレクトリ、ビルド出力ディレクトリ、pom.xmlで指定した依存ライブラリが含まれています。これでJavaをコンパイルしてもすぐにreplで使えますね。
Lisp開発と言えばやっぱりSlimeを使いたいですよね。mavenでswank-serverを立ち上げることでrepl同様のクラスパス込の状態で使えます。mvn clojure:swankでswank立ち上げたあとemacsでM-x slime-connectでOK。
以下のようにconfigurationのscriptに実行したいclojureスクリプトのパスを書いておけばmvn clojure:runでロードされます。もちろんクラスパスは同上。
com.theoryinpractise clojure-maven-plugin 1.3.1 ...
これだけ書くとleiningenいらないじゃんって思いそうですが、
mavenは立ち上がりが遅いのでちょっとイラッとするかもです。(Leinigenも結構遅いですがw)
Javaでライブラリを開発してClojureで呼び出すっていう使い方をしたい場合はこの方式が良さそうです。
ClojureのみのプロジェクトであればLeiningenで十分かなと思います。