如何覆盖sbt插件的依赖?

时间:2013-08-05 19:19:17

标签: plugins sbt dependency-management

我写了一个名为sbt-jumi的sbt插件,它实现了Jumi的sbt集成。现在sbt-jumi插件取决于当前的Jumi版本。

以下是插件的build.sbt

中的相关行
libraryDependencies += "fi.jumi" % "jumi-launcher" % "0.5.376"

该插件的用户会将其添加到他的project/plugins.sbt文件中:

addSbtPlugin("fi.jumi.sbt" % "sbt-jumi" % "0.1.0")

现在让我们说Jumi 0.6.400已经发布,它向后兼容。 sbt-jumi插件的用户如何配置它以使用Jumi 0.6.400,而不必发布新版本的插件?

Here is how to do it in Maven.但是如何在sbt中做到这一点?

1 个答案:

答案 0 :(得分:36)

覆盖插件的依赖关系与覆盖普通依赖关系的方式相同,只是必须将配置输入project/plugins.sbt。覆盖依赖关系在Library Management中进行了解释。以下是摘要:

如果您要使用的版本比您可以传递的依赖项更大,默认情况下sbt将使用更大的版本。您可以更改冲突管理器以更改默认行为 - 例如,这将在冲突时创建错误:

conflictManager := ConflictManager.strict

换句话说,project/plugins.sbt中的这个可行:

libraryDependencies += "fi.jumi" % "jumi-launcher" % "0.6.400"

您可以使用reload plugins然后show update检查插件依赖项。它现在应该将旧版本显示为“(EVICTED)”。

如果您要使用的版本低于默认依赖项,则需要以不同方式覆盖。一种方法是强制依赖:

libraryDependencies += "fi.jumi" % "jumi-launcher" % "0.4.350" force()

另一种方法是使用dependencyOverrides设置:

dependencyOverrides += "fi.jumi" % "jumi-launcher" % "0.4.350"

这两种方法的区别在于覆盖不会引入直接依赖。我不认为插件的差异很重要,但对于已发布的工件,它有some differences