【问题标题】:Play! 2.1 want me to write scala code玩! 2.1 要我写scala代码
【发布时间】:2014-06-17 19:27:33
【问题描述】:

我希望这是我在迁移到 Play 时遇到的最后一个错误! 2.1.

我的所有控制器返回都使用compile 命令引发错误。

return ok(createOrUpdate.render(Secured.getConnectedUser(), getCustomers(), User.build(user)));

[error]   required: User,scala.collection.immutable.List<User>,User
[error]   found: User,java.util.List<User>,<null>

我不明白为什么要玩! 2.1 想让我用scala api代替java api。

这是我的build.scala 文件:

import sbt._
import Keys._
import PlayProject._

object ApplicationBuild extends Build {

    val appName         = "webapp-stativiz"
    val appVersion      = "1.0-SNAPSHOT"

    val appDependencies = Seq(
      javaCore,
      javaJdbc,
      javaEbean,
      "org.mongodb" % "mongo-java-driver" % "2.10.1",
      "pdf" % "pdf_2.9.1" % "0.3",
      "commons-io" % "commons-io" % "1.3.2",
      "commons-codec" % "commons-codec" % "1.7"
    )

    val main = play.Project(appName, appVersion, appDependencies, mainLang = JAVA).settings(
          resolvers += Resolver.url("My GitHub Play Repository", url("http://www.joergviola.de/releases/"))(Resolver.ivyStylePatterns) 
    )

}

编辑:

使用run 命令我有这个异常:

sbt.PlayExceptions$CompilationException: Compilation error[error: method render in class createOrUpdate cannot be applied to given types;]
        at sbt.PlayReloader$$anon$2$$anonfun$reload$2$$anonfun$apply$15$$anonfun$apply$16.apply(PlayReloader.scala:349) ~[na:na]
        at sbt.PlayReloader$$anon$2$$anonfun$reload$2$$anonfun$apply$15$$anonfun$apply$16.apply(PlayReloader.scala:349) ~[na:na]
        at scala.Option.map(Option.scala:133) ~[scala-library.jar:na]
        at sbt.PlayReloader$$anon$2$$anonfun$reload$2$$anonfun$apply$15.apply(PlayReloader.scala:349) ~[na:na]
        at sbt.PlayReloader$$anon$2$$anonfun$reload$2$$anonfun$apply$15.apply(PlayReloader.scala:346) ~[na:na]
        at scala.Option.map(Option.scala:133) ~[scala-library.jar:na]

解决方案:

删除您的项目。创建一个新的。

【问题讨论】:

  • 看来import应该是import play.Project._
  • 也检查了。同样的问题

标签: java scala playframework playframework-2.1


【解决方案1】:

mainLang = JAVA 在 Play 中不再需要! 2.1:依赖java*足够玩!识别您的主要应用程序语言。

文件的其余部分似乎正确。尝试运行play clean clean-all compile 使其工作。

【讨论】:

  • 我知道。我尝试过使用和不使用 mainLang 参数。我已经启动了 play clean clean-files compile。 clean-all 不是我的 CLI 上的有效命令
  • 对不起,我的意思是“干净的文件”。
【解决方案2】:

scala 应该处理从 java 列表到 scala 列表的类型转换。 所以我认为您可能正在查看列表类型而不是预期类型用户的 null。 以下语句中的最后一个字段是否返回 null?

return ok(createOrUpdate.render(Secured.getConnectedUser(), getCustomers(), User.build(user)));

[error]   required: User,scala.collection.immutable.List<User>,User
[error]   found: User,java.util.List<User>,<null>

【讨论】:

  • 是的,最后一个字段为空,这是预期的行为。正如我所说,我所有的控制器都有这个问题。问题是 scala 不处理类型转换。
  • 奇怪的是您仍然看到错误 - Scala 有一个 java 类型转换器,如果包含,它将转换类型。见这里:scala-lang.org/api/current/…
【解决方案3】:

解决办法是:

  1. 创建一个新项目
  2. 将文件放入(应用程序、公共...文件夹)
  3. 删除旧项目

那么……这叫迁移吗?玩! 2.1 是我见过的最糟糕的版本 :(

【讨论】:

  • 之后,您应该对这两个项目进行比较,看看有什么不同:我真的很感兴趣。我从 Play 迁移了几个应用程序! 2.0 玩! 2.1 我得到的唯一问题是我的错误(没有仔细阅读文档)。但我承认可能存在错误(Play!2.1 似乎仍然有点错误)。
  • 容易给我-1。没有人在那里找到答案。这不是我在 Play 中遇到的第一个问题! 2.1 是的,我检查了差异: /project/project/target 和 /project/target 与戏剧相比完全不同! 2.0 应用程序。所以手动修复是不可能的。正如我所说,创建一个新项目比编辑 3 个文件并启动 3 个命令 恕我直言
  • project/project/targetproject/target 对此比较不感兴趣:它们可以被清除并重新生成(您可能会想手动删除它们)。有趣的部分(我猜)是 project 文件夹周围的某个地方。
猜你喜欢
  • 1970-01-01
  • 2016-03-08
  • 2013-05-14
  • 2012-12-26
  • 1970-01-01
  • 2021-08-29
  • 2011-04-16
  • 2016-02-28
  • 1970-01-01
相关资源
最近更新 更多