我写了一个名为 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 中做到这一点?
最佳答案
覆盖插件的依赖与覆盖普通依赖的方式相同,除了必须将配置输入到 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 .
关于plugins - 如何覆盖 sbt 插件的依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18065982/