我尝试从play 2.1.1迁移Java play框架项目。到2.2.0。我遵循了迁移指南(https://www.playframework.com/documentation/2.2.0/Migration22),但在应用更改后出现以下编译错误:
.../Global.java:38: cannot find symbol
symbol : method schedule(scala.concurrent.duration.FiniteDuration,
scala.concurrent.duration.FiniteDuration,akka.actor.ActorRef,
parser.ParserActor.MensaName,scala.concurrent.ExecutionContext)
location: interface akka.actor.Scheduler
.schedule(Duration.create(diff, TimeUnit.MILLISECONDS),
^
.../controllers/Parsers.java:24: cannot find symbol
symbol : method scheduleOnce(scala.concurrent.duration.FiniteDuration,akka.actor.ActorRef,parser.ParserActor.MensaName,scala.concurrent.ExecutionContext)
location: interface akka.actor.Scheduler
.scheduleOnce(Duration.create(0, TimeUnit.SECONDS),
^
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
2 errors
(compile:compile) javac returned nonzero exit code
我尝试使用typesafe-activator和play命令编译它们,两者都不起作用。当我使用旧版游戏时,编译适用于这两种工具。
我想我错过了一个依赖的地方。例如。从新版本开始,我是否必须手动将Akka添加到依赖项中?还是我监督了其他一些常见的错误?
plugins.sbt
// Comment to get more information during initialization
logLevel := Level.Warn
// The Typesafe repository
resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"
// Use the Play sbt plugin for Play projects
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.2.0")
build.properties
sbt.version=0.13.0
Build.scala
import sbt._
import Keys._
import play.Project._
object ApplicationBuild extends Build {
val appName = "mensa-server"
val appVersion = "1.0-SNAPSHOT"
val appDependencies = Seq(
// Add your project dependencies here,
javaCore,
javaJdbc,
javaEbean,
"org.jsoup" % "jsoup" % "1.7.2",
"net.sf.flexjson" % "flexjson" % "3.0",
"postgresql" % "postgresql" % "9.1-901.jdbc4",
"org.apache.commons" % "commons-lang3" % "3.1",
"com.typesafe" %% "play-plugins-mailer" % "2.1.0",
"org.apache.pdfbox" % "pdfbox" % "1.8.2"
)
val main = play.Project(appName, appVersion, appDependencies).settings(
// Add your own project settings here
)
}
答案 0 :(得分:1)
在Play 2.2中更改了Akka版本,因此您必须进行一些调整。
我没有你的java代码,所以我将使用我的代码来帮助你(我目前正在进行迁移)。如果我的anwser无法解决您的问题,请添加您的java代码。
对于scheduler和scheduleOnce,使用这个新版本,你必须添加一个ExecutionContext,你可以Akka.system().dispatcher()
作为参数
例如,之前:
Akka.system().scheduler()
.scheduleOnce(Duration.create(1, TimeUnit.SECONDS),
new Runnable() {
@Override
public void run() {
video.process(action);
}
});
之后:
Akka.system().scheduler()
.scheduleOnce(Duration.create(1, TimeUnit.SECONDS),
new Runnable() {
@Override
public void run() {
video.process(action);
}
},
Akka.system().dispatcher());
如果您想了解更多信息:http://www.playframework.com/documentation/2.2.x/JavaAkka
我不确定这会对你有所帮助,但这是我在2.2中成功调度调度程序所需要做的唯一改变。