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 様々ですな。