我已经在互联网上搜索了好几个小时了,有很多“有用的”建议......除了问题之外什么都没有。
这就是我,几乎完全是:
Play framework auto-loading in docker container
我正在运行最新版本(我认为,不知道如何查看,但已下载<一周前)版本的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
互联网上的Multiple sources显示相同或类似的问题,并且或多或少会达到相同的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应该退出......
,我也遇到了同样的问题答案 0 :(得分:1)
好的,更多的网络搜索,我终于崩溃并挖掘了Play!框架github找到他们的测试built.sbt,它碰巧使用了 new 选项。
显然,深入了解移民指南,这是值得注意的。 (花了一些时间回顾一下。)
我的错误显然是在假设2.4.0包含在2.3.2+中,而没有检查隐藏得很好的(在我的拙见)文档中。对于那些在类似情况下遇到绊脚的人,不要再犹豫了:
PlayKeys.fileWatchService := play.sbtplugin.run.PlayWatchService.sbt(pollInterval.value)
这是播放轮询的新语法,从 2.4.0 开始。检查迁移报告,直到您使用的版本,如果这会导致另一个错误,看看他们是否再次更改了它。
只是想知道,我是否已经疯狂地期待某种This is Deprecated
消息被吐出来,而不是盲目地谴责我所做的一切?这似乎是为未来添加的好东西。
答案 1 :(得分:1)
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