scala - SBT:修复库依赖项的逐出警告是否明智

标签 scala sbt

修复 SBT 驱逐警告消息是个好主意吗?

通过将被逐出的库的版本覆盖为最新版本。这会迫使 SBT 终生坚持使用被覆盖的版本吗?以后有更新的版本SBT还会通知我们吗?

驱逐警告示例 (SBT 0.13.13)

[warn] There may be incompatibilities among your library dependencies.
[warn] Here are some of the libraries that were evicted:
[warn]  * com.chuusai:shapeless_2.11:1.2.4 -> 2.3.2
[warn]  * org.postgresql:postgresql:9.4-1201-jdbc41 -> 9.4.1208.jre7
[warn]  * jline:jline:0.9.94 -> 2.12.1
[warn] Run 'evicted' to see detailed eviction warnings

通过在 build.sbt 末尾添加此内容来删除警告。按照 SBT 文档 Eviction warning 中的说明进行操作

dependencyOverrides ++= Set(
  "org.postgresql" % "postgresql" % "9.4.1208.jre7",
  "com.chuusai" %% "shapeless" % "2.3.2",
  "jline" % "jline" % "2.12.1"
)

最佳答案

如果这些警告针对的是您直接在代码中使用的依赖项,那么您绝对应该将升级版本添加到您的 libraryDependencies 中。

对于被逐出的传递依赖项(这些依赖项仅由您自己的依赖项直接使用),最好将警告保留在适当的位置。这为您提供了有关依赖项中可能存在的不兼容性的文档,并可以帮助您调试由于此类不兼容性而出现的运行时问题。

请记住,设置 dependencyOverrides 只是隐藏警告,它不能保证您的库与您设置的版本之间的兼容性。

关于scala - SBT:修复库依赖项的逐出警告是否明智,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42520273/

相关文章:

scala - h2o scala代码编译错误找不到对象ai

arrays - Scala ListBuffer(或等效的)洗牌

scala - 如何以批处理模式运行以配置为前缀的 SBT 任务?

scala - 何时使用 "sbt assembly"和 "sbt compile && sbt package"?

scala - 在 Kotlin 中实现 onComplete Scala Future

java - Scala - 当模式匹配 boolean 值和默认值时无法访问代码

scala - 从 Scala 中的长(时间戳)获取可读日期的简单方法

scala - REPL 返回 RDD 值,但 SBT 无法编译

scala - SBT 在 Ubuntu 14.04 上使用 aptitude 安装失败

sqlite - 如何将库依赖添加到 Build.scala 的类路径?