【问题标题】:How to install mongo-scala-driver for scala version 3 using sbt?如何使用 sbt 为 scala 版本 3 安装 mongo-scala-driver?
【发布时间】:2021-11-12 17:42:18
【问题描述】:

我正在尝试安装 mongo-scala-driver 但我遇到了这个错误:

[error] (update) sbt.librarymanagement.ResolveException: Error download org.mongodb.scala:mongo-scala-driver_3:4.2.3

我的 build.sbt 文件如下所示:

name := "project"
version := "0.1"

scalaVersion := "3.0.2"

libraryDependencies += "org.scalactic" %% "scalactic" % "3.2.9"
libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.9" % "test"

libraryDependencies += "org.mongodb.scala" %% "mongo-scala-driver" % "4.2.3"

我想知道它是否失败,因为我使用的是 scala 版本 3.0.2,而 Mongo Scala 文档列出的最后一个 Scala 版本是 2.12。我遵循的说明在这里: https://mongodb.github.io/mongo-java-driver/4.2/driver-scala/getting-started/installation/.

我是 Scala 新手,所以这很可能是一个不同的问题,但我找不到任何解决方案。

任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: mongodb scala sbt


    【解决方案1】:

    Scala 工件缺乏二进制兼容性(跨主要版本),这意味着使用 Scala 2.12.x 编译的库 x 不能与 Scala 2.13.x 一起使用。因此,库所有者为多个 Scala 版本编译他们的库并发布多个二进制包。

    因此,对于由组织 org.xyx 开发的任何库 abc,他们将发布名为 abc_2.11abc_2.12abc_2.13 的工件。

    因此,如果您正在使用 Scala 2.12 并希望使用此库的版本 1.2.3,那么您可以按如下方式包含此库,

    libraryDependencies += "org.xyz" % "abc_2.12" % "1.2.3"
    

    注意我们并没有使用%%来添加上面的依赖。

    这个%%sbt 提供的一个特殊助手,它会自动将主要的scala 版本附加到工件名称。

    所以,上面的例子可以改写为

    scalaVersion := "2.12.14"
    
    libraryDependencies += "org.xyz" %% "abc" % "1.2.3"
    

    sbt 会自动将abc 转换为abc_2.12

    所以,要使用任何库,您首先需要检查它是否适用于您的 Scala 版本。

    让我们看看cats-core。我们可以检查 maven Central 的可用版本,

    https://mvnrepository.com/artifact/org.typelevel/cats-core

    我们可以看到cats-core version 2.6.1 可用于Scala 2.122.133。我们将能够与Scala 3 一起使用它。

    现在,看看mongo-scala-driver。我们可以检查 maven Central 的可用版本,

    https://mvnrepository.com/artifact/org.mongodb.scala/mongo-scala-driver

    如您所见,最新版本 4.2.3 仅针对 Scala 2.112.122.13 发布。 Scala 3 尚不可用。因此,您不能将其与Scala 3 一起使用。

    Scala 3Scala 2.12Scala 2.13 有很大不同。 mongo-scala-driver 大量使用 macros,而 Scala 3 中已删除,因此需要进行重大重写以支持 Scala 3,因此不太可能在不久的将来获得 Scala 3 的兼容性。

    如果您在 Scala 3 中缺少任何依赖项,那么您应该继续使用 Scala 2.12Scala 2.13

    对于这种特殊情况,您可以将mongo-java-driver 与任何版本的 Scala 一起使用(因为它根本不依赖于 Scala)。

    libraryDependencies += "org.mongodb.scala" % "mongo-java-driver" % "4.2.3"
    

    【讨论】:

    • 请注意,Scala 2.13 库可以与 Scala 3 一起使用(由于 2.13 和 3.0 之间的特殊兼容性),但前提是该库不使用宏。
    • 是的,但是有更多的条件(编译器插件和 scala 反映的是大的)。此外,由于大多数库都依赖于其他一些库(这些库依赖于其他库),因此在许多情况下,这些“检查”最终会像兔子洞一样。
    • 没错,只是你的答案非常完整,可以用这条信息丰富;)
    猜你喜欢
    • 2016-10-31
    • 2017-08-01
    • 2011-06-01
    • 2020-06-27
    • 2016-08-22
    • 2013-01-12
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多