我有一个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
时得到的)而不是我的测试环境(运行单元测试时得到的)匹配?
提前致谢!
答案 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