【问题标题】:How do i use play ws library in normal sbt project instead of play?如何在普通 sbt 项目中使用 play ws 库而不是 play?
【发布时间】:2014-09-12 21:44:07
【问题描述】:

当我尝试在普通 sbt 项目而不是 play 项目中使用 Play WS 库时,我一定会使用 play.api.Play.current 并得到 java.lang.RuntimeException: "没有启动的应用程序” 尝试运行应用程序时。

【问题讨论】:

    标签: scala playframework sbt


    【解决方案1】:

    在 2.4.x 中使用

    import play.api.libs.ws.ning.NingWSClient   
    
    val wsClient = NingWSClient()
    wsClient.url("http://wwww.something.com").get()
    

    build.sbt:

    libraryDependencies += "com.typesafe.play" %% "play-ws" % "2.4.3"
    

    在 2.5.x 中的使用

    import play.api.libs.ws.ahc.AhcWSClient
    
    implicit val actorSystem = ActorSystem()
    implicit val materializer = ActorMaterializer()
    wsClient.url("http://wwww.something.com").get()
    
    //at the very end, to shutdown stuff cleanly :
    wsClient.close()
    actorSystem.terminate()
    

    build.sbt:

    libraryDependencies += "com.typesafe.play" %% "play-ws" % "2.5.4"
    

    日志

    正如评论中提到的那样,默认情况下,您可能会从底层 async-http-client 获得一堆冗长的日志。修复它的一种方法是开始配置 logback.xml,并将其放在 src/main/resources

    <configuration>
    
    <conversionRule conversionWord="coloredLevel" converterClass="play.api.Logger$ColoredLevel" />
    
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!-- The logging pattern, you might want to adapt it -->
            <pattern>%d %coloredLevel %t - %logger - %message%n%xException</pattern>
        </encoder>
    </appender>
    
    <!-- Here you can change the levels of specific loggers -->
    <logger name="somelogger" level="INFO" />
    
    <!-- Default logging level for every logger -->
    <root level="ERROR">
        <appender-ref ref="STDOUT" />
    </root>
    
    </configuration>
    

    【讨论】:

    • 谢谢。发布一个非常有用的 Scala HTTP 工具包比较链接:implicitdef.com/2015/11/19/…
    • 似乎已经被弃用了。他们现在推荐:play.api.libs.ws.ahc.AhcWSClient
    • 我以为我曾经能够在 sbt console 中做到这一点,但我一直看到:res23: scala.concurrent.Future[play.api.libs.ws.WSResponse] = List() 作为来自 get.. 的回报,!
    • ^^^ try using Await.result(), List() 表示还没有值
    【解决方案2】:

    要在游戏之外使用 play-ws,请参阅文档的“使用 WSClient”部分:http://www.playframework.com/documentation/2.3.x/ScalaWS

    val builder = new com.ning.http.client.AsyncHttpClientConfig.Builder()
    val client = new play.api.libs.ws.ning.NingWSClient(builder.build())
    val response = client.url(url).get()
    

    【讨论】:

    • build.sbt/build.scala 文件所需的依赖行是什么?是否需要特殊的解析器?
    • 尝试(未经测试):resolvers += "Typesafe Releases" at "https://repo.typesafe.com/typesafe/releases/""com.typesafe.play" %% "play-ws" % "2.3.7"。 (小提示:play-ws 有一个依赖来播放,所以你的项目中将拥有整个播放框架)
    • 有谁知道如何在这种情况下(即在游戏之外使用它)关闭 WS 的详细日志记录(打印所有响应标头)。这使得调试任何东西都变得非常困难
    猜你喜欢
    • 2014-08-23
    • 1970-01-01
    • 2015-04-22
    • 2014-08-15
    • 1970-01-01
    • 2014-04-07
    • 2013-11-12
    • 2012-09-22
    • 2014-07-16
    相关资源
    最近更新 更多