web-dev-qa-db-ja.com

sbtプラグインの依存関係を上書きするにはどうすればよいですか?

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でそれを行う方法は?

25
Esko Luontola

プラグインの依存関係のオーバーライドは、構成を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つの方法の違いは、オーバーライドしても直接の依存関係が導入されないことです。プラグインの違いは重要ではないと思いますが、公開されたアーティファクトの場合は いくつかの違い です。

36
Esko Luontola