mongodb - 如何使用 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 的新手,所以这很可能是一个不同的问题,但我很难找到任何解决方案。
任何帮助将非常感激。谢谢!
解决方案
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
会自动转换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.12
于2.13
和3
。我们将能够将它与Scala 3
.
现在,看看mongo-scala-driver
。我们可以检查 maven central 的可用版本,
https://mvnrepository.com/artifact/org.mongodb.scala/mongo-scala-driver
如您所见,最新版本仅4.2.3
针对Scala
2.11
和发布。尚不可用于。因此,您不能将其与.2.12
2.13
Scala 3
Scala 3
Scala 3
Scala 2.12
与和有很大不同Scala 2.13
。mongo-scala-driver
大量使用macros
已被删除Scala 3
,因此需要对支持进行重大重写Scala 3
,因此不太可能在不久的将来获得 Scala 3 copatibiltiy。
如果 Scala 3 中缺少任何依赖项,那么您应该继续使用Scala 2.12
or Scala 2.13
。
对于这种特殊情况,您可以使用mongo-java-driver
任何版本的 Scala(因为它根本不依赖于 Scala)。
libraryDependencies += "org.mongodb.scala" % "mongo-java-driver" % "4.2.3"
推荐阅读
- javascript - Node js承诺结果在其他功能中使用
- apache-kafka - Apache Storm JoinBolt
- linux - 嵌入式期望脚本返回成功或失败到 bash
- windows - GO C 风格的控制台应用程序
- ruby-on-rails - 尝试运行 Sidekiq 时出错 (Rails 5.2.1)
- php - 带有正则表达式路由参数的 Lumen 中的 route() 函数返回一个错误的 url
- python - Abaqus:Inputfile 或 Python 脚本中的参数几何/装配?
- mysql - mysql Group concat有最大限制吗?
- android - 尝试根据匹配的两个集合的 UID 从一个集合中检索字段
- c# - C# 和 XML 选择器