我写了一个名为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中做到这一点?
答案 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。