日曜プログラミング

休日趣味でやってるプログラミング関連記事をダラダラと

leiningen で SNAPSHOT なライブラリに依存するプロジェクトを uberjar する

今年一発目ですが、去年と変わらず Clojure 周りを触っていてちょっとばかりハマった事などをつらつらと今年も書いていきます。

今作ってるツールで clj-time を使っており、その中で ICoerce な protocol が LocalDateTime に対応するようになったのが 0.6.1-SNAPSHOT からだったため、サイトからリポジトリまるっと取ってきて lein install かまして快調に作業していた。

そんで、いざリリースしたれと uberjar とコマンドを叩くと、

>lein uberjar
Compiling hoge.fuga
....
Release versions may not depend upon snapshots.
Freeze snapshots to dated versions or set the LEIN_SNAPSHOTS_IN_RELEASE environment variable to override.

と怒られて jar を作れなかった。

メッセージにある通り、ライブラリを日付指定して .m2 ローカルリポジトリにインストールするなり LEIN_SNAPSHOTS_IN_RELEASE 環境変数を設定してねとあるので、後者が楽そうだとやろうとしたものの、値ってどうすりゃいいんだ?と分からずググったらあった。

clojure - leiningen build failing due to repeatability error - Stack Overflow

と言うわけでこんな感じのお手軽バッチファイルを leiningen プロジェクト直下に置いて終わり。

set LEIN_SNAPSHOTS_IN_RELEASE=1
lein uberjar
set LEIN_SNAPSHOTS_IN_RELEASE=

SNAPSHOT に依存するのが基本ナシな事には賛成なので、使うプロジェクトにだけこんな感じで一次的にバッチファイルで環境変数を設定した。

いやー、google と stackoverflow 様々ですな。