首页 > 解决方案 > 如何使用 sbt 为 scala 版本 3 安装 mongo-scala-driver?

问题描述

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

[错误](更新)sbt.librarymanagement.ResolveException:下载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 的新手,所以这很可能是一个不同的问题,但我很难找到任何解决方案。

任何帮助将非常感激。谢谢!

标签: mongodbscalasbt

解决方案


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

abc因此,对于组织开发的任何库org.xyx,他们将发布名为abc_2.11, abc_2.12, abc_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会自动转换abcabc_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

Maven Central - mongo-scala-driver

如您所见,最新版本仅4.2.3针对Scala 2.11和发布。尚不可用于。因此,您不能将其与.2.122.13Scala 3Scala 3

Scala 3Scala 2.12与和有很大不同Scala 2.13mongo-scala-driver大量使用macros已被删除Scala 3,因此需要对支持进行重大重写Scala 3,因此不太可能在不久的将来获得 Scala 3 copatibiltiy。

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

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

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

推荐阅读