【问题标题】:OSX Play Framework Auto-ReloadOSX Play 框架自动重新加载
【发布时间】:2015-06-04 03:38:10
【问题描述】:

我已经在互联网上搜索了几个小时,有很多“有用”的建议……除了问题之外什么也没有。

这就是我,几乎完全一样:

Play framework auto-loading in docker container

我正在运行最新的(我想,不知道如何查看但

FROM ubuntu:latest
MAINTAINER [REDACTED]
RUN sudo apt-get update
RUN sudo apt-get -y install software-properties-common
RUN sudo apt-add-repository ppa:webupd8team/java
RUN sudo apt-get update
RUN echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | sudo /usr/bin/debconf-set-selections
RUN sudo apt-get -y install oracle-java8-installer
RUN java -version

Multiplesources 在互联网上显示相同或相似的问题,或多或少到达相同的conclusion。我正在按如下方式启动我的播放应用程序:

我不会重复上面链接的内容,这基本上是相同的情况。 (检测到文件更改,显示编译,虽然网页没有反映更改。)此外,我通过反编译生成的 .class 文件来验证正确的编译,它显示了正确的代码。

现在,当我说出神奇的话时:将以下行添加到我的 build.sbt 文件中

PlayKeys.playWatchService := play.sbtplugin.run.PlayWatchService.sbt(pollInterval.value)

我得到了一个整体的 build.sbt:

name := """cms-work"""

version := "1.0-SNAPSHOT"

retrieveManaged := true

lazy val root = (project in file(".")).enablePlugins(PlayJava)

scalaVersion := "2.11.6"

libraryDependencies ++= Seq(
  javaJdbc,
  cache,
  javaWs
)

// Play provides two styles of routers, one expects its actions to be injected, the
// other, legacy style, accesses its actions statically.
routesGenerator := InjectedRoutesGenerator

// Polling for auto-reload, because networked filesystem.
PlayKeys.playWatchService := play.sbtplugin.run.PlayWatchService.sbt(pollInterval.value)

在我的项目目录中运行 ./activator 会导致它重新评估我的构建文件并生成以下内容:

/root/cms-work/build.sbt:23: error: value playWatchService is not a member of object play.sbt.Play.autoImport.PlayKeys
PlayKeys.playWatchService := play.sbtplugin.run.PlayWatchService.sbt(pollInterval.value)
         ^
[error] Type error in expression

显而易见,一刀切的解决方案不再适用。从那以后我就被难住了。自 2.3.x 以来,我绝对没有发现任何会使该命令无效的更改的通知。相反,我看到 things 提到“在 2.3.2 之后工作”,我就是。

PS:

谁能解释链接帖子末尾描述的奇怪的 Ctrl-D 行为。我也遇到了同样的情况,考虑到 Ctrl-D 应该退出这一事实,这似乎很奇怪......

【问题讨论】:

    标签: macos playframework docker boot2docker


    【解决方案1】:

    好的,更多的互联网搜索,我终于崩溃并挖掘了Play! Framework github上找到他们的testbuilt.sbt,正好使用了new选项。

    显然,在迁移指南的深处已经注意到了这一点。 (我花了一段时间才回过头来找到它。)

    显然,我的错误在于假设 2.4.0 包含在 2.3.2+ 中,而没有检查隐藏得很好的(以我的拙见)文档。对于遇到类似情况的其他人,别无所求:

    PlayKeys.fileWatchService := play.sbtplugin.run.PlayWatchService.sbt(pollInterval.value)
    

    这是播放轮询的新语法,从 2.4.0 开始。如果这会导致另一个错误,请检查您正在使用的版本的迁移报告,看看他们是否再次更改了它。


    只是想知道,我是否疯狂地期待某种This is Deprecated 消息被吐出,而不是盲目地谴责我所做的一切?这似乎是将来添加的好东西。

    【讨论】:

      【解决方案2】:
      error: value playWatchService is not a member of object play.sbt.Play.autoImport.PlayKeys
      
      error: object sbtplugin is not a member of package play
      

      在 Playframework 2.4.X 中,SBT 设置键 playWatchService 已重命名为 fileWatchService

      相应的类也发生了变化。要将FileWatchService 设置为每两秒轮询一次,请像这样使用它:

      scala PlayKeys.fileWatchService := play.runsupport.FileWatchService.sbt(2000)
      

      摘自:https://www.playframework.com/documentation/2.4.x/Migration24#playWatchService-renamed

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-11
        • 2021-07-18
        • 2017-06-12
        • 2014-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多