我已经在互联网上搜寻了好几个小时了,有很多“有用的”建议……除了问题之外什么也没有。
这就是我,几乎完全是:
在Docker容器中播放框架自动加载
我正在运行Play的最新版本(我认为,不知道如何检查,但下载了<一周前)!具有Java 8的ubuntu docker容器内部的框架,使用以下dockerfile构建:
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
互联网上的多个来源显示出相同或相似的问题,或多或少得出了相同的结论。我正在启动我的游戏应用程序,如下所示:
我将不重复上面链接的内容,这基本上是相同的情况。(虽然网页未反映更改,但检测到文件更改,它正在显示编译。)此外,我通过反编译生成的.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在我的项目目录中运行会导致它重新评估我的构建文件并生成以下内容:
./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版本开始,对于该命令无效的任何更改绝对没有任何注意。相反,我看到的是提到“ 2.3.2之后的作品”的东西。
PS:
任何人都可以解释链接文章末尾描述的Ctrl-D奇怪行为。考虑到Ctrl-D应该退出的事实,我也遇到了同样的情况,这似乎很奇怪。
好的,更多的互联网搜寻,我终于崩溃了,开始玩Play!框架github找到他们的测试build.sbt,恰好是使用 新 选项。
显然,在迁移指南中深埋了这一点。(花了我一段时间来追溯地找到它。)
我的错误显然是基于2.3.2+中包含2.4.0的假设,而没有检查隐秘的(以我的拙见)文档。对于其他遇到类似情况而绊脚石的人,不要再犹豫了:
PlayKeys.fileWatchService := play.sbtplugin.run.PlayWatchService.sbt(pollInterval.value)
从 2.4.0开始 ,这是播放轮询的新语法。检查迁移报告到您正在使用的版本,如果这导致另一个错误,请查看他们是否再次更改了它。
只是想知道,我发疯了,期望能This is Deprecated发出某种信息,而不是仅仅盲目谴责我所做的一切吗?似乎将来会增加一些好处。
This is Deprecated