plugins - 如何覆盖 sbt 插件的依赖?

标签 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 中做到这一点?

最佳答案

覆盖插件的依赖与覆盖普通依赖的方式相同,除了必须将配置输入到 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/

相关文章:

firebase - ionic 应用程序 | Firebase Crashlytics 无法与崩溃报告配合使用?

sbt - 在 SBT 中更改给定目录中的任何文件时运行任务?

java - 如何按依赖关系顺序正确加载项目的类?

plugins - 安装 Jenkins 插件无需重启

javascript - 为 vanilla javascript 插件进行默认设置

php - 在 PHP 应用程序中实现插件的设计模式

java - sbt添加java项目

scala - SBT项目导航

haskell - 如何为 Haskell/stack 创建 travis 脚本?

java - 如何让 IntelliJ 解决自定义源集的 Gradle 依赖项?