MyT*_*tle 10 scala sbt multi-module playframework playframework-2.0
我从GitHub(https://github.com/henrikengstrom/roygbiv)下载了多模块Scala项目,其中一个模块是Play 2.0模块.所以我可以run
在每个模块上使用SBT 命令运行整个应用程序,一切正常.但是,当我添加到Play 2.0模板(index.scala.html
)非英文字符并在浏览器中按F5时,我得到编译错误:
使用UTF-8解码C:\ Users ...\web\target\scala-2.9.1\src_managed\main\views\html\index.template.scala时出现IO错误请尝试使用-encoding选项指定另一个
Play 2.0模块我也使用SBT的run
命令运行,而不是使用Play
控制台.
我检查了源文件编码 - 它是UTF-8.还尝试了没有BOM的UTF-8.
哪里可以有问题?
您可以尝试使用强制编码将SBT启动到UTF-8.我在这篇文章中读到,对于某些人来说,它有助于使用以下选项启动SBT:
JAVA_TOOL_OPTIONS='-Dfile.encoding=UTF8'
Run Code Online (Sandbox Code Playgroud)
那么SBT的第一行应该显示:
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8
Run Code Online (Sandbox Code Playgroud)
您的问题似乎是这样的:您的中间 scala 文件编码不正确。
这是过程:
Play 获取您的模板文件 ( foo.scala.html
) 并将其转换为 Scala:target/scala-2.10/src_managed/main/views/html/foo.template.scala
。然后由 sbt 编译为 .class 文件并通过 play 运行。
当 sbt 创建这些中间文件时,它使用默认编码创建它们(在我的例子中是 Windows 机器,因此是没有 BOM 的 UTF-8 - 您的机器可能有所不同)。重要的是,这种编码仍然存在,因此即使我更改原始模板文件的编码(foo.scala.html 为 UTF-16),.scala 文件的编码仍然是相同的(在我的模板文件中没有 BOM 的 UTF-8)案件)。但是,该文件不再编译,因为无法读取该文件,因为 scala 编译器需要 ITF-8。
“正确”的解决方案是始终使用 UTF-8,事实上,这是为 play 1.x 推荐的解决方案,请参阅Play 文档 国际化。这是play 2的等效项。您还可以使用普通的国际化消息文件。
所以,如果你指定
JAVA_TOOL_OPTIONS='-Dfile.encoding=UTF8' sbt
Run Code Online (Sandbox Code Playgroud)
正如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
)
Run Code Online (Sandbox Code Playgroud)
这告诉 scala 编译器它读取的所有文件(即 foo.template.scala)都以 UTF-8 编码。如果您将其设置为默认编码,这也可能有效。
最好的办法是执行 sbt clean,确保有问题的文件已消失,然后按照上面的建议使用 JAVA_TOOL_OPTION 重新启动。但是,您必须确保所有构建都考虑到这一点(jenkins、其他开发人员等)。
归档时间: |
|
查看次数: |
5302 次 |
最近记录: |