clusterSettings不是com.mongodb.MongoClientSettings.Builder的成员

clusterSettings不是com.mongodb.MongoClientSettings.Builder的成员,mongodb,scala,sbt,Mongodb,Scala,Sbt,我正在尝试使用scala的mongodb客户端。我使用IntelliJ的想法 在这方面: val settings: MongoClientSettings = MongoClientSettings .builder() .clusterSettings(clusterSettings)

我正在尝试使用scala的mongodb客户端。我使用IntelliJ的想法

在这方面:

val settings: MongoClientSettings = MongoClientSettings
                                             .builder()
                                             .clusterSettings(clusterSettings)
                                             .build()
我得到一个错误:

clusterSettings不是com.mongodb.MongoClientSettings.Builder的成员

尽管依赖项和导入似乎是正确的

以下是sbt文件:

scalaVersion := "2.11.12"
libraryDependencies += "org.mongodb.scala" %% "mongo-scala-driver" % "2.3.0"
libraryDependencies += "org.mongodb" % "mongodb-driver-core" % "3.7.0"
其中包括:

import com.mongodb.ServerAddress
import org.mongodb.scala.MongoClientSettings
import org.mongodb.scala.connection.ClusterSettings
在互联网上似乎没有人有这个问题,但我的同事最近也有同样的问题。你知道这里有什么问题吗

更新:

根据Ross的评论,我修改了sbt:

scalaVersion := "2.11.12"
libraryDependencies += "org.mongodb.scala" %% "mongo-scala-driver" % "2.3.0"
和修改代码:

import com.mongodb.connection.ClusterSettings
import org.mongodb.scala.MongoClientSettings

val settings: MongoClientSettings = MongoClientSettings
  .builder()
  .applyToClusterSettings((b: ClusterSettings.Builder) => b.applySettings(clusterSettings))
  .build()
现在IDEA并没有抱怨,它看到了所有API,但在编译过程中我得到了错误:

错误:(9,60)类型不匹配; 找到:com.mongodb.connection.ClusterSettings.Builder=>com.mongodb.connection.ClusterSettings.Builder 必需:com.mongodb.Block[com.mongodb.connection.ClusterSettings.Builder] .ApplyClusterSettings((b:ClusterSettings.Builder)=>b.applySettings(ClusterSettings))

但如果我在外部定义块,然后使用它,它将成功编译:

 val block: Block[ClusterSettings.Builder] = new Block[ClusterSettings.Builder] {
  override def apply(t: ClusterSettings.Builder): Unit = {
    t.applySettings(clusterSettings)
  }
}

val settings: MongoClientSettings = MongoClientSettings
  .builder()
  .applyToClusterSettings(block)
  .build()

原因可能是什么?

在2.3.0中,MongoClientSettings的类型别名发生了更改,并且与以前的构建器的API略有不同。请参阅升级指南:

更改它的原因是
com.mongodb.async.client.MongoClientSettings
被弃用,取而代之的是新的集中式
MongoClientSettings

您现在仍然可以使用不推荐使用的设置。更新(刷新)您的sbt项目,intellij将突出显示生成器上缺少
clusterSettings
方法

将设置应用于新的
MongoClient设置的示例如下:

import com.mongodb.connection.ClusterSettings

// Scala 2.12 (support for Single Abstract Methods)
val clientSettings: MongoClientSettings = MongoClientSettings
      .builder()
      .applyToClusterSettings((b: ClusterSettings.Builder) => b.applySettings(clusterSettings))
      .build()

// Scala 2.11 you must provide the block:
val clientSettings: MongoClientSettings = MongoClientSettings
      .builder()
      .applyToClusterSettings(new Block[ClusterSettings.Builder]() {
        override def apply(b: ClusterSettings.Builder): Unit = b.applySettings(clusterSettings)
      })
      .build()

注意:无需添加
mongodb驱动程序核心
依赖项,该依赖项已通过
mongo scala驱动程序
设置。谢谢。这几乎解决了问题-请看更新。更新,Scala 2.11不支持发布的SAM语法,更新了示例谢谢,官方文档没有解释这种奇怪的语法