【问题标题】:play 2.4 console not working as documented播放 2.4 控制台未按记录工作
【发布时间】:2015-07-04 18:58:49
【问题描述】:

我最近更新到播放 2.4.1 (damiya) 版本,并且始终能够通过 intellij 和在我的终端窗口中输入 activator console 进入 scala 控制台。然后我会通过输入这行代码来启动一个新的静态应用程序:

new play.core.StaticApplication(new java.io.File("."))

play website itself 以及对 SO 上类似旧问题的一些答案中所述。

但是,我无法让它在 play 2.4.1 上运行,错误返回为:

<console>:8: error: type StaticApplication is not a member of package play.core
          new play.core.StaticApplication(new java.io.File("."))
                        ^ `

任何有关如何解决此问题的建议将不胜感激,控制台在过去对我非常有用,并且对于调试目的相当重要。

【问题讨论】:

    标签: scala intellij-idea playframework


    【解决方案1】:

    Richard 在此commit 中解释:

    将服务器启动代码重构为 prod、dev、test 模式

    此更改使启动应用程序的生命周期变得更长 更清晰。

    • Netty 和 Akka HTTP 不再需要单独的 ServerStart 实现,因为始终从
      加载 ServerProvider 配置 配置文件。而是根据模式分离出代码 服务器在其中运行,因为行为可能因模式而异。现在 我们有一个 ProdServerStart、DevServerStart 和一个 DocServerStart。
    • 对于每种模式,将 ApplicationProvider 代码移动到与新服务器启动代码相同的文件中。移动代码以启动应用程序 退出 ApplicationProvider 构造函数并进入服务器
      开始代码。 ApplicationProviders 仍然实现“get”方法
      用于获取当前应用程序。
    • 删除 TestApplication 和 StaticApplication,因为它们做同样的事情。而是为“静态”应用程序提供帮助程序,
      不需要重新加载。

    您可以执行以下相同的操作:

    play.core.server.ProdServerStart.main(Array())
    

    【讨论】:

    【解决方案2】:

    不幸的是,bjfletcher 的回答只为我指明了正确的道路——运行ProdServerStart 实际上并没有给我一个运行环境(事实上,恰恰相反——

    scala> play.core.server.ProdServerStart.main(Array.empty)
    Oops, cannot start the server.
    Configuration error: Configuration error[application: application.conf: java.io.IOException: resource not found on classpath: application.conf, application.json: java.io.IOException: resource not found on classpath: application.json, application.properties: java.io
    .IOException: resource not found on classpath: application.properties]
            at play.api.Configuration$.configError(Configuration.scala:178)
            at play.api.Configuration$.load(Configuration.scala:103)
            at play.api.Configuration$.load(Configuration.scala:133)
            at play.api.ApplicationLoader$.createContext(ApplicationLoader.scala:91)
            at play.core.server.ProdServerStart$.start(ProdServerStart.scala:50)
            at play.core.server.ProdServerStart$.main(ProdServerStart.scala:27)
            at $line21.$read$$iw$$iw$.<init>(<console>:8)
            at $line21.$read$$iw$$iw$.<clinit>(<console>)
            at $line21.$eval$.$print$lzycompute(<console>:7)
            at $line21.$eval$.$print(<console>:6)
            at $line21.$eval.$print(<console>)
            ...
    

    ...可能是因为我自己对 JVM 缺乏经验。)。

    幸运的是,Launch the Interactive Console 的 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)
    import Play.current 
    

    这可能可以保存到:script 或其他东西中。

    【讨论】:

      猜你喜欢
      • 2015-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多