scala – 为什么sbt编译失败并出现StackOverflowError?
我正在研究一个已经存在了几年的Scala项目,但对我来说是新的.我的任务是将它从Scala 2.9.3升级到2.11.7,以及它的依赖项.我已经过了错误和警告,但我无法让项目在SBT中成功编译.我总是在几乎相同的地方得到一个StackOverflowError.堆栈跟踪看起来像这样,但细节因Xss设置而异(目前为4M,但尝试高达24M):
java.lang.StackOverflowError at scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:698) at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5395) at scala.tools.nsc.typechecker.Typers$Typer.scala$tools$nsc$typechecker$Typers$Typer$$typedInternal(Typers.scala:5422) at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5369) at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5373) at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:5471) at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:5479) at scala.tools.nsc.transform.Erasure$Eraser.adaptMember(Erasure.scala:644) at scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:698) at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5395) at scala.tools.nsc.typechecker.Typers$Typer.scala$tools$nsc$typechecker$Typers$Typer$$typedInternal(Typers.scala:5422) SBT_OPTS看起来像这样: -Xmx2G -Xss4M -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled 我可以在Intellij中成功“制作”项目,其他人可以从GitHub中获取我的更改并在sbt中编译项目,因此问题似乎是我的机器本地(最近的四核Macbook Pro,带有16GB RAM).其他Scala / sbt项目在这台机器上成功编译. 以下是其他相关细节: Scala version: 2.11.7 Java version: java version "1.8.0_66" (build 1.8.0_66-b17) sbt version: 0.13.7 (have also tried 0.13.9) 我已经完全重建了ivy2缓存并清除了lib_managed目录. scala-compiler.jar的版本与至少一台可以“成功编译”代码的机器上使用的版本相同.我做了一个干净的重新安装sbt(通过brew删除sbt,手动删除?/ .sbt目录,然后brew install sbt). 我没有试图在发生错误时隔离正在编译的源代码行.我认为在某处查找配置问题或依赖性冲突会更有效率. 任何进一步故障排除的建议将不胜感激. [添加…]添加它作为实验,我从https://github.com/scala/scala下载了Scala语言源代码并尝试进行sbt编译时遇到以下非常类似的错误,这可能会有所帮助: java.lang.StackOverflowError at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.outerValue(ExplicitOuter.scala:229) at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:441) at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:352) at scala.reflect.internal.Trees$class.itransform(Trees.scala:1345) at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16) at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16) at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555) at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:44) at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.scala$reflect$internal$Trees$UnderConstructionTransformer$$super$transform(ExplicitOuter.scala:219) at scala.reflect.internal.Trees$UnderConstructionTransformer$class.transform(Trees.scala:1693) at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:291) at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:459) at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:352) at scala.reflect.internal.Trees$class.itransform(Trees.scala:1347) at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16) at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16) at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555) 这是有趣的事情.从this post开始,我发现了启动带有-d标志的sbt以获取调试信息.得到以下输出: Kevins-MacBook-Pro:scala kdoherty$sbt -d [process_args] java_version = '1.8.0_66' # Executing command line: java -Xmx2G -Xss4M -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -Xmx384m -Xss512k -XX:+UseCompressedOops -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar /usr/local/Cellar/sbt/0.13.9/libexec/sbt-launch.jar 所以在某处我的SBT_OPTS设置被覆盖(默认情况下,我猜).现在我需要找到这些默认值的来源. 解决方法
我想到了.一旦我知道-d标志会告诉我SBT实际使用的是什么设置,我看到我的SBT_OPTS环境变量中的值被其他较低的设置破坏了.那些人来自哪里?从我的JAVA_OPTS env变量!我应该早点注意到它们,但现在我知道我可以按原样保留这些Java选项,并通过将特定于SBT的设置添加到我的/usr/local / etc / sbtopts文件来覆盖它们,使用有点笨拙的格式
-J-Xmx2G -J-Xss2M 使用显示的值,我能够在我的项目上成功运行sbt compile. 我希望有人觉得这很有用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Angular2渲染器setElementClass isAdd选项不起作用
- playframework – 如何创建一个Play 2.2 Scala应用程序作为
- 用于日食的Angular 4插件
- Advanced Programming in UNIX Environment Episode 21
- angularjs – 关闭角度提示
- bash – 如何创建新的终端会话并执行多个命令
- 《数据结构》第六章 图 学习问题回收站
- 如何在bash中组合timeout和eval命令
- yum – 在AWS Elastic Beanstalk上启用EPEL存储库
- twitter-bootstrap – 在页面加载时可见的Bootstrap 3工具提