Help us understand the problem. What is going on with this article?

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

More than 5 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の形式で書けば問題ないハズです。

monstar-lab
自社サービス「モンスター・チャンネル」や「セカイラボ」をはじめ、日本を代表する企業のWeb・アプリの受託企画/開発を行っています。
https://monstar-lab.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away