从 Scala 控制台调用 Play 框架应用程序

Calling into Play framework app from the Scala console

我有一个 Play Framework 2.3 应用程序。我可以使用 activator console 进入 Scala 控制台。但是,当我尝试从我的应用程序调用代码时,特别是一些使用 WS 的辅助函数,它使用隐式 import play.api.Play.current 来检索当前的 运行ning 应用程序,我收到错误留言 java.lang.RuntimeException: There is no started application.

我必须采取哪些步骤才能将我的应用程序加载到当前控制台会话中?

a similar existing question,但接受的答案似乎是使用框架测试助手的模拟应用程序。最好,我想 运行 在我的实际应用程序的上下文中。如果我必须使用假的应用程序,是否有可能使它匹配我的开发环境(我在 运行ning activator run 时得到的)而不是我的测试环境(我在 [=24= 时得到的) ]宁单元测试)?

提前致谢!

在这种特定情况下,您可以只创建一个 Application 实例并使用它来代替隐式实例:

// Tested in 2.3.7
import play.api.{Play, Mode, DefaultApplication}
import java.io.File
import play.api.libs.ws.WS

val application = new DefaultApplication(
    new File("."),
    Thread.currentThread().getContextClassLoader(),
    None,
    Mode.Dev
)

import scala.concurrent.ExecutionContext.Implicits.global

WS.client(application).url("http://www.google.com").get().map((x) => println(x.body))

对于未来的读者,对于 Play 框架 2。5.x:

import play.api._
val env = Environment(new java.io.File("."), this.getClass.getClassLoader, Mode.Dev)
val context = ApplicationLoader.createContext(env)
val loader = ApplicationLoader(context)
val app = loader.load(context)
Play.start(app)

来源:https://www.playframework.com/documentation/2.5.x/PlayConsole#Launch-the-interactive-console