播放框架 SBT 导入 play.api.libs.streams

Posted

技术标签:

【中文标题】播放框架 SBT 导入 play.api.libs.streams【英文标题】:Play Framework SBT import play.api.libs.streams 【发布时间】:2016-11-06 04:22:49 【问题描述】:

我正在 Play Framework (2.4.0) / scala 中构建一个应用程序并尝试添加 play.api.libs.streams,以便我可以在我的应用程序中使用对象 Streams

这是我的工作 build.sbt

libraryDependencies ++= Seq(
  specs2 % Test,
  cache,
  ws,
  "com.softwaremill.macwire" %% "macros" % "2.2.2",
  "com.softwaremill.macwire" %% "runtime" % "1.0.7",
  "org.reactivemongo" %% "play2-reactivemongo" % "0.11.10",
  "com.eclipsesource" %% "play-json-schema-validator" % "0.6.5",

  "org.scalatest" %% "scalatest" % "2.2.5" % Test,
  "org.scalacheck" %% "scalacheck" % "1.12.2" % Test,
  "org.scalatestplus" %% "play" % "1.4.0-M4" % Test,

  "com.typesafe.akka" %% "akka-stream" % "2.4.4"
)

现在当我尝试添加以下行时:

streams,

或者当我添加时

libraryDependencies += streams

我得到错误:

error: No implicit for Append.Value[Seq[sbt.ModuleID], sbt.TaskKey[sbt.Keys.TaskStreams]] found,
  so sbt.TaskKey[sbt.Keys.TaskStreams] cannot be appended to Seq[sbt.ModuleID]
libraryDependencies += streams

我无法启动我的项目。

我找到了this question,但通过添加 '%' 或 '%%' 进行调整并没有解决问题,而且我不确定如何使用这些解决方案,因为我只是想添加一个 play.api.libs 依赖项和不是外部的。

我有点卡在这里,我不明白为什么 streamssbt.TaskKey[sbt.Keys.TaskStreams]ws 或序列中添加的任何其他键 是sbt.ModuleID

【问题讨论】:

【参考方案1】:

在这种情况下,cachews 等行不是指play.api.libs 中的 packages,而是构建 Play sbt-plugin 预定义为play.sbt.PlayImport 对象,例如 here。

在这种情况下,ws 完全等同于:

"com.typesafe.play" %% "play-ws" % "2.5.4"

您看到 streams 错误的原因是因为 Play 没有定义此类组件,因此 SBT 假定您正在引用 TaskKey。

如果您在 Play 2.5.x 及更高版本上拥有 PlayScala 项目,则应该可以使用 play.api.libs.streams.Streams 对象,而无需在构建中添加任何额外内容。

【讨论】:

感谢您的澄清,这是有道理的!但是我使用的 ReactiveMongo 目前不支持 Play 2.4.x 以上,所以我无法升级 sad face @Daniel 万一你没弄明白。如果你使用的是 play 2.4,你可以添加这个依赖: "com.typesafe.play" %% "play-streams-experimental" % "2.4.11"

以上是关于播放框架 SBT 导入 play.api.libs.streams的主要内容,如果未能解决你的问题,请参考以下文章

将 Play JSON 库添加到 sbt

尝试使用 sbt 导入 spark 时出错

未找到 SBT 导入选项:Idea Ultimate

如何解析JSON使用Play框架

sbt编译播放框架应用程序错误

如何在 intellij 中为播放框架应用程序运行单元测试