OSX Play框架自动重新加载

我一直在网上冲浪几个小时,有很多“有帮助”的build议……除了问题外,什么都不是。

这就是我,几乎完全是:

在Docker容器中播放框架自动加载

我正在运行最新的(我认为,不知道如何检查,但下载<一个星期前)的版本的Play! 使用Java 8的ubuntu docker容器内的框架,使用以下dockerfile构build:

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 

互联网上的多个 来源显示相同或相似的问题,或多或less得出相同的结论 。 我开始我的游戏应用程序如下:

我不打算重复上面的链接,基本上是一个相同的情况。 (文件更改被检测到,它显示了一个编译,虽然网页并不反映更改。)此外,我通过反编译生成的.class文件来validation正确的编译,它显示正确的代码。

现在,当我说出神奇的话语时:将下面的行添加到我的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会导致它重新评估我的构build文件并生成以下内容:

 /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 

显而易见,一刀切的解决scheme已不再适用。 自那以后,我一直很难过。 自从2.3.x以后,我发现绝对没有任何改变会使这个命令失效。 相反,我看到提及“2.3.2之后的作品”的东西 。

PS:

任何人都可以解释在链接的post末尾描述的奇怪的Ctrl-D行为。 我正在经历相同的,考虑到Ctrl-D应该退出的事实,这似乎很奇怪。

好吧,更多的互联网search,我终于打破了,通过播放挖! 框架githubfind他们的testingbuilt.sbt,碰巧正在使用新的选项。

显然,深深的埋藏在移民指南这是注意到。 (花了我一段时间来回顾一下。)

我的错误显然是假设2.4.0被包含在2.3.2+中,而没有检查隐藏的(在我的愚见)文档。 对于其他类似的情况下的绊脚石,请不要再观望:

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

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


只是想知道,我疯了,以期望某种forms的This is Deprecated信息是吐出来,而不是盲目谴责我所做的一切? 这似乎是对未来有益的事情。

 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

而且相应的class级也改变了。 要将FileWatchService设置为每两秒轮询一次,请使用如下所示:

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

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