【问题标题】:sbt compilation causes stackoverflow errorsbt 编译导致 stackoverflow 错误
【发布时间】:2015-09-12 00:21:52
【问题描述】:

我已经面临这个错误一段时间了。为此彻底生气了。尝试了在 stackoverflow 和其他站点中看到的所有类似解决方案。

我有 4 个独立的 scala 项目。其中,我在编译两个项目时遇到 StackOverflow 错误。这两个项目是 4 个项目中最大的一个。 当我尝试在 Ubuntu Server 机器中构建项目时出现此错误。我尝试在 sbt 配置文件中增加 Xmx 选项,但没有成功。

谁能帮我解决这个问题,因为我要疯了。如果我构建项目 10 次,它将在 1 或 2 次尝试中成功。

我从错误日志中了解到,问题与类型检查有关。但是,我不知道发生在哪里。

其中一个失败的项目有超过 1000 个类/特征(不包括案例类)。

详情

Ubuntu Server(14)
Sbt : 0.13.6 and 0.13.8 tried
Scala Version : 2.11.6
JDK: 1.8

下面贴几行错误:

java.lang.StackOverflowError
    at scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:696)
    at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5396)
    at scala.tools.nsc.typechecker.Typers$Typer.scala$tools$nsc$typechecker$Typers$Typer$$typedInternal(Typers.scala:5423)
    at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5370)
    at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5374)
    at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$96.apply(Typers.scala:4523)
    at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$96.apply(Typers.scala:4523)
    at scala.tools.nsc.typechecker.Typers$Typer.silent(Typers.scala:680)
    at scala.tools.nsc.typechecker.Typers$Typer.normalTypedApply$1(Typers.scala:4522)
    at scala.tools.nsc.typechecker.Typers$Typer.typedApply$1(Typers.scala:4578)
    at scala.tools.nsc.typechecker.Typers$Typer.typedInAnyMode$1(Typers.scala:5343)
    at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5360)
    at scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:696)
    at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5396)
    at scala.tools.nsc.typechecker.Typers$Typer.scala$tools$nsc$typechecker$Typers$Typer$$typedInternal(Typers.scala:5423)
    at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5370)
    at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5374)
    at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:5472)
    at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:5480)
    at scala.tools.nsc.transform.Erasure$Eraser.adaptMember(Erasure.scala:642)
    at scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:696)
    at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5396)
    at scala.tools.nsc.typechecker.Typers$Typer.scala$tools$nsc$typechecker$Typers$Typer$$typedInternal(Typers.scala:5423)
    at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5370)
    at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5374)
    at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$96.apply(Typers.scala:4523)
    at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$96.apply(Typers.scala:4523)
    at scala.tools.nsc.typechecker.Typers$Typer.silent(Typers.scala:680)
    at scala.tools.nsc.typechecker.Typers$Typer.normalTypedApply$1(Typers.scala:4522)
    at scala.tools.nsc.typechecker.Typers$Typer.typedApply$1(Typers.scala:4578)
    at scala.tools.nsc.typechecker.Typers$Typer.typedInAnyMode$1(Typers.scala:5343)
    at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5360)
    at scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:696)
    at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5396)
    at scala.tools.nsc.typechecker.Typers$Typer.scala$tools$nsc$typechecker$Typers$Typer$$typedInternal(Typers.scala:5423)
    at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5370)
    at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5374)
    at scala.tools.nsc.typechecker.Typers$Typer.typedArg(Typers.scala:3163)
    at scala.tools.nsc.typechecker.PatternTypers$PatternTyper$class.typedArgWithFormal$1(PatternTypers.scala:112)
    at scala.tools.nsc.typechecker.PatternTypers$PatternTyper$$anonfun$2.apply(PatternTypers.scala:115)
    at scala.tools.nsc.typechecker.PatternTypers$PatternTyper$$anonfun$2.apply(PatternTypers.scala:115)
    at scala.runtime.Tuple2Zipped$$anonfun$map$extension$1.apply(Tuple2Zipped.scala:46)
    at scala.runtime.Tuple2Zipped$$anonfun$map$extension$1.apply(Tuple2Zipped.scala:44)
    at scala.collection.immutable.List.foreach(List.scala:381)
    at scala.runtime.Tuple2Zipped$.map$extension(Tuple2Zipped.scala:44)
    at scala.tools.nsc.typechecker.PatternTypers$PatternTyper$class.typedArgsForFormals(PatternTypers.scala:115)
    at scala.tools.nsc.typechecker.Typers$Typer.typedArgsForFormals(Typers.scala:111)
    at scala.tools.nsc.typechecker.Typers$Typer.scala$tools$nsc$typechecker$Typers$Typer$$handleMonomorphicCall$1(Typers.scala:3469)
    at scala.tools.nsc.typechecker.Typers$Typer.doTypedApply(Typers.scala:3494)
    at scala.tools.nsc.typechecker.Typers$Typer.normalTypedApply$1(Typers.scala:4544)
    at scala.tools.nsc.typechecker.Typers$Typer.typedApply$1(Typers.scala:4578)
    at scala.tools.nsc.typechecker.Typers$Typer.typedInAnyMode$1(Typers.scala:5343)
    at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5360)
    at scala.tools.nsc.transform.Erasure$Eraser.typed1(E

【问题讨论】:

  • 您需要更改-Xss。试试-Xss3m
  • @jrudolph 我应该在哪里进行更改?在 sbtconfig.txt 中?还是其他地方?
  • 以与您更改 -Xmx 相同的方式。可能在您的 sbt 启动器脚本中。
  • @jrudolph:谢谢。我会添加它并尝试它是否有效。
  • 在机器上设置你的SBT_OPTS,这个例子有-Xss2m堆栈大小,很常见的问题stackoverflow.com/questions/15280839/…

标签: scala sbt stack-overflow


【解决方案1】:

这一直影响 Scala 从 2.11.4 到 2.11.6 afaik。它在 2.11.7 的最新发行说明中并未显示为已修复。

幸运的是,在问题跟踪器上关注track,它是重复的ticket,在stack overflow 上有答案

没有源代码很难给出更多指示,但这绝对是找到问题并应用建议解决方案的好方法

【讨论】:

  • 我使用了很多泛型,但正如票中所述,我们没有带有 Any 的清单。我尝试了所有与内存相关的设置,但没有用。
  • 你没有提到你还没有显化。无论如何,您可以尝试 a) 在您可能正在使用的库中搜索 Manifest 用法,可能其中一些正在使用它 b) 将您的项目升级到 Scala 2.11.7 c) 将错误报告给 scala-lang.org
  • 为了清楚起见,我在某些地方使用 Manifest 进行 json 反序列化。例如: def extractEntity(json: String)(implicit m: Manifest[E]): E = parse(json).extract[E],其中 E 是一个称为 BaseEntity 的特征,具有一些公共字段(id、isActive 等) .目前,我使用的是 2.11.6。我将尝试使用 2.11.7 并检查问题是否存在。
  • 如果Manifest 用法在您的代码中,我建议您将它们替换为TypeTagsClassTags see this。由于它将被弃用,Scala 的人可能根本不会修复该错误,正如我所说的那样,它不会出现在最近的 2.11.7 发行说明中
  • 感谢您的建议。 Json4s 的提取方法期望 Manifest 作为隐式参数。在那种情况下,我需要尝试如何在不使用该方法的情况下逃脱。
【解决方案2】:

我尝试了所有的配置更改,但没有在机器上工作。所以我已经跳过了将近一个月。最近,我尝试在Jenkins 中构建项目,但遇到了同样的错误。然后我升级了 sbt 0.13.8 并将 jvm 标志 -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256m -Xmx1024M -Xss16M 添加到 jenkins 构建标志中。到目前为止,所有的编译都成功了。 我记得将 jvm 标志添加到 sbt 配置文件,但得到了同样的错误。但是现在,添加该标志后,它在 jenkins 中运行良好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-14
    • 2017-11-03
    • 2013-02-01
    相关资源
    最近更新 更多