ClojureのソースをNetBeansでコンパイルしてみた


Clojureはじめたばかりの初心者です。
ソースを読むのが好きなので、自分でコンパイルしてNetBeans内で動かしてみたいなぁと思いやってみました。

JavaはJava8がインストールされている必要があります。
(ClojureのコンパイルにはJava8以上が必要との事です)
NetBeansは 12.0を使っています。

ちなみにClojureのソースをダウンロードしてきて、mavenを使ったら、簡単にコンパイルできました。しかし、それではNetBeansで、ブレークポイントをかけたり、ステップ実行をしたりできなかった(やり方がわからなかった)ので、別の方法でコンパイルしてみようと思いました。

まず、NetBeansで、File > NewProjectから、Java with Ant > Java Applicationを選択し、作成します。

Clojureの最新ソースを落としてきて、clojure-master/src/jvmの下のJavaソース一式を先ほど作成したプロジェクトのsrcディレクトリにコピーしました。
NetBeansでコンパイルしてみたら、あっさり成功。
これ意外にあっさり動くんじゃね?と思ったら、実行時エラーの連続。
かなりハマりましたが、数時間の格闘で、なんとか動く所までこぎつけました。

clojure-master/src/clojure以下のソースも、同じくNetBeansのsrcに入れる必要があります。
但し、全部の clj を 使っている訳ではなさそうです。

次に clojure-master/resources/clojure/version.properties
これも入れる必要があります。

NetBeansで実行してみると、このpropertiesを読んでいる場所で異常終了してしまいます。
施行錯誤してわかったことは、version={}と書かれている所を1.2.3のように書きかえると
正常に動くようになりました。どうも正規表現を使って、1.2.3を分解して、それぞれに対して文字列を整数型に変換しているみたいです。なので、1.2とか書いてもダメです。

この後が、大変だったのですが、spec.alphaがなんとかいうエラーに悩まされました。
Clojureのソースとはまた別の場所にspec.alphaのソースもあるので、それも追加してみましたが、実行時エラーが発生します。
途方にくれていたところ、spec.alphaをコンパイルしたjarがある事がわかりました。

<groupid>org.clojure</groupid>
<artifactId>spec.alpha</artifactId>
<version>0.3.218</version>

「mavenをjarファイルをダウンロードするだけ」に使い、jarファイルをダウンロードしてきました。
ダウンロードされた spec-alpha-0.3.218.jar をNetBeansのlibに追加してコンパイルしたところ、なんとか、clojureのプロンプトが出て REPL が動く所までできました。

これで勉強環境は出来たので、ブレークポイントかけたり、ステップ実行してソースを読んで動かしてみたいと思います。