Scala
sbt

sbtでpublishLocalしたjarを取り込んで開発サイクルを回す

More than 3 years have passed since last update.

ライブラリやフレームワークの開発なんかをしてて、動作確認は別のプロジェクトから利用したいって時のsbtのノウハウです。
skinny-frameworkでstandaloneのjarを実行するときに、コンテキストパスを指定できるようなパッチを実装した時に役立ちました。

ライブラリ実装 -> 利用サンプルに取り込み -> 動作確認 -> 最初に戻る

のサイクルを、ローカルの開発環境内で回すのに便利です。

ライブラリ側

特別な設定は必要ありません。
何か実装を修正した際に、sbt publishLocal することで、ローカルの~/.ivy2/local 以下にjarを置くことができます。

$ cd mylib
$ sbt publishLocal

利用側

普通にライブラリを使うとき通りに、ライブラリの依存バージョンを指定してsbtをたたけば、出来たてほやほやのライブラリを利用できます。

Build.scala
libraryDependencies := Seq(
  "kuchitama"    %% "mylib"   % "0.1-SNAPSHOT",
  /// other dependencies
  )

うまく取り込めない時

普通は、publishLocal時にはresolverの設定などは不要なはずなのですが、私の環境ではjarの取得に失敗していました。
原因の切り分けができていないのですが、sbtがライブラリを探しに行くresolverに~/.ivy2/localを追加すると取得できました。
project/Build.scalaを下記のように修正しました。

Build.scala
resolvers ++= Seq(
      "LocalRepo" at file(Path.userHome.absolutePath + "/.ivy2/local").getAbsolutePath
    )

.sbtについては、未確認ですが、同様にsbtの形式で書けば問題ないハズです。