Esk*_*ola 24 plugins dependency-management sbt
我写称为SBT插件SBT-JUMI它实现了SBT集成JUMI.现在sbt-jumi插件取决于当前的Jumi版本.
这是插件的build.sbt中的相关行:
libraryDependencies += "fi.jumi" % "jumi-launcher" % "0.5.376"
Run Code Online (Sandbox Code Playgroud)
插件的用户会将此添加到他的project/plugins.sbt文件中:
addSbtPlugin("fi.jumi.sbt" % "sbt-jumi" % "0.1.0")
Run Code Online (Sandbox Code Playgroud)
现在让我们说Jumi 0.6.400已经发布,它向后兼容.sbt-jumi插件的用户如何配置它使用Jumi 0.6.400,而不必发布新版本的插件?
以下是在Maven中如何做到这一点.但是如何在sbt中做到这一点?
Esk*_*ola 36
覆盖插件的依赖关系与覆盖正常依赖关系的方式相同,只是必须输入配置project/plugins.sbt.库管理中解释了覆盖依赖项.以下是摘要:
如果您希望使用的版本大于您可以传递的依赖项,则默认情况下sbt将使用较大的版本.您可以更改冲突管理器以更改默认行为 - 例如,这将在冲突时创建错误:
conflictManager := ConflictManager.strict
Run Code Online (Sandbox Code Playgroud)
换句话说,这project/plugins.sbt将工作:
libraryDependencies += "fi.jumi" % "jumi-launcher" % "0.6.400"
Run Code Online (Sandbox Code Playgroud)
您可以使用reload plugins然后检查插件依赖项show update.它现在应该将旧版本显示为"(EVICTED)".
如果您要使用的版本低于默认依赖项,则需要以不同方式覆盖.一种方法是强制依赖:
libraryDependencies += "fi.jumi" % "jumi-launcher" % "0.4.350" force()
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用dependencyOverrides设置:
dependencyOverrides += "fi.jumi" % "jumi-launcher" % "0.4.350"
Run Code Online (Sandbox Code Playgroud)
两种方法之间的区别在于覆盖不会引入直接依赖.我不认为插件的差异很重要,但对于已发布的工件,它有一些差异.