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

时间:2015-03-25 07:28:59

标签: scala playframework playframework-2.3

我有一个Play Framework 2.3应用程序。我可以使用activator console进入Scala控制台。但是,当我尝试从我的应用程序调用代码时,特别是一些使用WS的帮助函数,它使用隐式import play.api.Play.current来检索当前正在运行的应用程序,我收到错误消息{{1} }。

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

a similar existing question,但接受的答案似乎是使用框架测试助手中的模拟应用程序。最好,我想在我的实际应用程序的上下文中运行。如果我必须使用假的应用程序,是否可以使它与我的开发环境(运行java.lang.RuntimeException: There is no started application时得到的)而不是我的测试环境(运行单元测试时得到的)匹配?

提前致谢!

2 个答案:

答案 0 :(得分:8)

在这种特定情况下,您只需创建一个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))

答案 1 :(得分:8)

对于未来的读者,Play framework 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