2016-07-04 72 views
0

我在Play Framework(2.4.0)/ scala中構建應用程序並試圖添加play.api.libs.streams,因此我可以在我的應用程序中使用對象StreamsPlay Framework SBT import play.api.libs.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依賴項而不是外部一。

我有點堅持在這裏,我不明白爲什麼sbt.TaskKey[sbt.Keys.TaskStreams]WS或序列添加任何其他關鍵是sbt.ModuleID

回答

2

這這種情況下,cachews等行不參考play.api.libs,而是構建Play插件預先定義爲play.sbt.PlayImport對象中組件的人工製品,例如here

在這方面,ws是完全等效於:

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

你看到streams錯誤是因爲存在由播放沒有定義這樣的組件,並且因此SBT假設您到製作參考的原因TaskKey。

如果您在Play 2.5.x及更高版本上有PlayScala項目,則play.api.libs.streams.Streams對象應該沒有任何額外的內容添加到您的版本中。

+0

謝謝你的澄清,這是有道理的!不過,我使用的ReactiveMongo目前不支持2.4.x以上版本的Play,因此我無法升級*悲傷的臉部* – Daniel

+1

@Daniel如果您沒有弄明白。如果你使用play 2.4,你可以添加這個依賴:「com.typesafe.play」%%「play-streams-experimental」%「2.4.11」 – EdgeCaseBerg