26

我编写了一个名为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,而无需我发布新版本的插件?

以下是如何在 Maven 中执行此操作。但是如何在 sbt 中做到这一点?

4

1 回答 1

37

覆盖插件的依赖项与覆盖普通依赖项的方式相同,除了必须将配置输入到project/plugins.sbt. 库管理中解释了覆盖依赖项。这是一个摘要:

如果您希望使用的版本大于您将传递的依赖项,则默认情况下 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"

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

于 2013-08-07T16:51:27.110 回答