编译错误迁移播放2.1.1到2.2

时间:2014-04-27 18:24:41

标签: playframework akka typesafe-activator

我尝试从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      
  )
}

1 个答案:

答案 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中成功调度调度程序所需要做的唯一改变。