加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala Play 2.0.编译错误:解码时出现IO错误

发布时间:2020-12-16 21:33:20 所属栏目:安全 来源:网络整理
导读:我从 GitHub( https://github.com/henrikengstrom/roygbiv)下载了多模块Scala项目,其中一个模块是Play 2.0模块.所以我可以使用SBT的运行命令在每个模块上运行整个应用程序,一切正常.但是当我添加到Play 2.0模板(index.scala.html)非英文字符并在浏览器中按F5
我从 GitHub( https://github.com/henrikengstrom/roygbiv)下载了多模块Scala项目,其中一个模块是Play 2.0模块.所以我可以使用SBT的运行命令在每个模块上运行整个应用程序,一切正常.但是当我添加到Play 2.0模板(index.scala.html)非英文字符并在浏览器中按F5时,我得到编译错误:

IO error while decoding
C:Users…webtargetscala-2.9.1src_managedmainviewshtmlindex.template.scala
with UTF-8 Please try specifying another one using the -encoding
option

播放2.0模块我也使用SBT的运行命令,不使用播放控制台.

我检查了源文件编码 – 它是UTF-8.也尝试UTF-8没有BOM.

哪里可以问题?

解决方法

你的问题似乎是这样的:你的中间scala文件编码不正确.

这是过程:

播放需要您的模板文件(foo.scala.html)并将其转换为Scala:target / scala-2.10 / src_managed / main / views / html / foo.template.scala.然后,它被sbt编译为.class文件并通过播放运行.

当sbt创建这些中间文件时,它会使用默认编码创建它们(在我的情况下是Windows机器,因此UTF-8没有BOM – 您的机器可能不同).重要的是,这种编码方式依然存在,所以即使我将原始模板文件(foo.scala.html)的编码更改为UTF-16,而.scala文件的编码仍然是一样的(UTF-8没有BOM在我的案件).但是,该文件不再编译,因为该文件无法读取,因为scala编译器期待ITF-8.

“正确”的解决方案是始终使用UTF-8,实际上这是推荐播放1.x的解决方案见Play documentation 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清洁,确保违规文件消失,并重新启动与JAVA_TOOL_OPTION如上所述.但是,您必须确保所有的构建都考虑到这一点(jenkins,其他开发者等).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读