您的问题似乎是这样的:您的中间 scala 文件未正确编码。
这是过程:
Play 获取您的模板文件 ( foo.scala.html
) 并将其转换为 Scala: target/scala-2.10/src_managed/main/views/html/foo.template.scala
. 然后它被 sbt 编译为 .class 文件并由 play 运行。
当 sbt 创建这些中间文件时,它会使用默认编码创建它们(在我的情况下是 Windows 机器,所以 UTF-8 没有 BOM - 你的机器可能会有所不同)。重要的是,这种编码仍然存在,所以即使我将原始模板文件的编码(foo.scala.html 更改为 UTF-16),.scala 文件的编码仍然相同(我的 UTF-8 没有 BOM案子)。但是,该文件不再编译,因为 scala 编译器需要 ITF-8,因此无法读取该文件。
“正确”的解决方案是始终使用 UTF-8,事实上这是推荐用于 play 1.x 的解决方案,请参阅Play 文档 Internationalization。这是play 2的等价物。您还可以使用普通的国际化消息文件。
所以,如果你指定
JAVA_TOOL_OPTIONS='-Dfile.encoding=UTF8' sbt
正如Bjorn所建议的那样,这将告诉 sbt 它读取和写入的所有文件都将采用 UTF8 格式。您还可以在 Build.scala 中指定 scala 编译器的文件编码:
val main = play.Project(appName, appVersion, appDependencies).settings(
scalacOptions ++= Seq("-encoding", "UTF-8")
// Add your own project settings here
)
这告诉 scala 编译器它读取的所有文件(即 foo.template.scala)都以 UTF-8 编码。如果您将其设置为默认编码,这也可能有效。
最好的办法是进行 sbt clean,确保有问题的文件已经消失,然后按照上面的建议使用 JAVA_TOOL_OPTION 重新启动。但是,您必须确保所有构建都考虑到这一点(詹金斯、其他开发人员等)。