Jumi のsbt統合を実装する sbt-jumi というsbtプラグインを作成しました。現在、sbt-jumiプラグインは現在のJumiリリースに依存しています。
プラグインの build.sbt からの関連行は次のとおりです。
libraryDependencies += "fi.jumi" % "jumi-launcher" % "0.5.376"
そして、プラグインのuserは、これを彼のproject/plugins.sbt
ファイルに追加します。
addSbtPlugin("fi.jumi.sbt" % "sbt-jumi" % "0.1.0")
ここで、Jumi 0.6.400がリリースされ、下位互換性があるとしましょう。 sbt-jumiプラグインのユーザーは、プラグインの新しいバージョンをリリースしなくても、Jumi 0.6.400を使用するように構成するにはどうすればよいですか?
Mavenでそれを行う方法は次のとおりです。 しかし、sbtでそれを行う方法は?
プラグインの依存関係のオーバーライドは、構成をproject/plugins.sbt
に入力する必要があることを除いて、通常の依存関係のオーバーライドと同じ方法で行われます。依存関係のオーバーライドについては、 ライブラリ管理 で説明されています。要約は次のとおりです。
使用するバージョンが推移的に取得する依存関係よりも大きい場合、sbtはデフォルトで大きいバージョンを使用します。競合マネージャーを変更してデフォルトの動作を変更できます。たとえば、これにより競合時にエラーが発生します。
conflictManager := ConflictManager.strict
言い換えると、これはproject/plugins.sbt
で機能します。
libraryDependencies += "fi.jumi" % "jumi-launcher" % "0.6.400"
プラグインの依存関係は、reload plugins
を使用してからshow update
を使用して確認できます。古いバージョンが「(EVICTED)」と表示されるはずです。
使用するバージョンがデフォルトの依存関係よりも低い場合は、別の方法でオーバーライドする必要があります。 1つの方法は、依存関係を強制することです。
libraryDependencies += "fi.jumi" % "jumi-launcher" % "0.4.350" force()
別の方法は、dependencyOverrides
設定を使用することです。
dependencyOverrides += "fi.jumi" % "jumi-launcher" % "0.4.350"
2つの方法の違いは、オーバーライドしても直接の依存関係が導入されないことです。プラグインの違いは重要ではないと思いますが、公開されたアーティファクトの場合は いくつかの違い です。