我的环境的设置是 SBT 1.3.0-RC1、Scala 2.12.8 和 Java 1.8.0_212。SBT 在 期间抛出异常compile
,
[IJ]sbt:foobar> compile
[info] Compiling 15 Scala sources and 1 Java source to U:\workspace\foobar\target\scala-2.12\classes ...
[error] ## Exception when compiling 16 sources to U:\workspace\foobar\target\scala-2.12\classes
[error] null
[error] scala.reflect.internal.Trees.itransform(Trees.scala:1374)
[error] scala.reflect.internal.Trees.itransform$(Trees.scala:1372)
[error] scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:27)
[error] scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:27)
[error] scala.reflect.api.Trees$Transformer.transform(Trees.scala:2563)
[error] scala.reflect.internal.Trees$Duplicator.transform(Trees.scala:1706)
[error] scala.reflect.internal.Trees$Duplicator.transform(Trees.scala:1703)
[error] scala.reflect.internal.Trees.itransform(Trees.scala:1432)
[error] scala.reflect.internal.Trees.itransform$(Trees.scala:1372)
[error] scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:27)
[error] scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:27)
[error] scala.reflect.api.Trees$Transformer.transform(Trees.scala:2563)
[error] scala.reflect.internal.Trees$Duplicator.transform(Trees.scala:1706)
[error] scala.reflect.internal.Trees$Duplicator.transform(Trees.scala:1703)
[error] scala.reflect.internal.Trees.itransform(Trees.scala:1381)
[error] scala.reflect.internal.Trees.itransform$(Trees.scala:1372)
[error] scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:27)
[error] scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:27)
[error] scala.reflect.api.Trees$Transformer.transform(Trees.scala:2563)
[error] scala.reflect.internal.Trees$Duplicator.transform(Trees.scala:1706)
[error] scala.reflect.internal.Trees$Duplicator.transform(Trees.scala:1703)
[error] scala.reflect.internal.Trees.itransform(Trees.scala:1383)
[error] scala.reflect.internal.Trees.itransform$(Trees.scala:1372)
[error] scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:27)
[error] scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:27)
[error] scala.reflect.api.Trees$Transformer.transform(Trees.scala:2563)
[error] scala.reflect.internal.Trees$Duplicator.transform(Trees.scala:1706)
[error] scala.reflect.internal.Trees$Duplicator.transform(Trees.scala:1703)
[error] scala.reflect.api.Trees$Transformer.$anonfun$transformStats$1(Trees.scala:2597)
[error] scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2595)
[error] scala.reflect.internal.Trees.itransform(Trees.scala:1402)
[error] scala.reflect.internal.Trees.itransform$(Trees.scala:1372)
[error] scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:27)
[error] scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:27)
[error] scala.reflect.api.Trees$Transformer.transform(Trees.scala:2563)
[error] scala.reflect.internal.Trees$Duplicator.transform(Trees.scala:1706)
[error] scala.reflect.internal.Trees$Duplicator.transform(Trees.scala:1703)
[error] scala.reflect.internal.Trees.$anonfun$itransform$2(Trees.scala:1399)
[error] scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2608)
[error] scala.reflect.internal.Trees.itransform(Trees.scala:1397)
[error] scala.reflect.internal.Trees.itransform$(Trees.scala:1372)
[error] scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:27)
[error] scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:27)
[error] scala.reflect.api.Trees$Transformer.transform(Trees.scala:2563)
[error] scala.reflect.internal.Trees$Duplicator.transform(Trees.scala:1706)
[error] scala.reflect.internal.Trees$Duplicator.transform(Trees.scala:1703)
[error] scala.reflect.api.Trees$Transformer.$anonfun$transformStats$1(Trees.scala:2597)
[error] scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2595)
[error] scala.reflect.internal.Trees.itransform(Trees.scala:1440)
[error] scala.reflect.internal.Trees.itransform$(Trees.scala:1372)
[error] scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:27)
[error] scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:27)
[error] scala.reflect.api.Trees$Transformer.transform(Trees.scala:2563)
[error] scala.reflect.internal.Trees$Duplicator.transform(Trees.scala:1706)
[error] scala.reflect.internal.Trees$Duplicator.transform(Trees.scala:1703)
[error] scala.reflect.api.Trees$Transformer.transformTemplate(Trees.scala:2571)
[error] scala.reflect.internal.Trees.$anonfun$itransform$4(Trees.scala:1444)
[error] scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2608)
[error] scala.reflect.internal.Trees.itransform(Trees.scala:1443)
[error] scala.reflect.internal.Trees.itransform$(Trees.scala:1372)
[error] scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:27)
[error] scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:27)
[error] scala.reflect.api.Trees$Transformer.transform(Trees.scala:2563)
[error] scala.reflect.internal.Trees$Duplicator.transform(Trees.scala:1706)
[error] scala.reflect.internal.Trees$Duplicator.transform(Trees.scala:1703)
[error] scala.reflect.api.Trees$Transformer.$anonfun$transformStats$1(Trees.scala:2597)
[error] scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2595)
[error] scala.reflect.internal.Trees.itransform(Trees.scala:1402)
[error] scala.reflect.internal.Trees.itransform$(Trees.scala:1372)
[error] scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:27)
[error] scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:27)
[error] scala.reflect.api.Trees$Transformer.transform(Trees.scala:2563)
[error] scala.reflect.internal.Trees$Duplicator.transform(Trees.scala:1706)
[error] scala.reflect.internal.Trees$Duplicator.transform(Trees.scala:1703)
[error] scala.reflect.internal.Trees.itransform(Trees.scala:1436)
[error] scala.reflect.internal.Trees.itransform$(Trees.scala:1372)
[error] scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:27)
[error] scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:27)
[error] scala.reflect.api.Trees$Transformer.transform(Trees.scala:2563)
[error] scala.reflect.internal.Trees$Duplicator.transform(Trees.scala:1706)
[error] scala.reflect.internal.Trees.duplicateAndKeepPositions(Trees.scala:1739)
[error] scala.reflect.internal.Trees.duplicateAndKeepPositions$(Trees.scala:1739)
[error] scala.reflect.internal.SymbolTable.duplicateAndKeepPositions(SymbolTable.scala:27)
[error] scala.tools.nsc.typechecker.Macros$MacroExpander.$anonfun$expand$1(Macros.scala:638)
[error] scala.tools.nsc.Global.withInfoLevel(Global.scala:227)
[error] scala.tools.nsc.typechecker.Macros$MacroExpander.expand(Macros.scala:625)
[error] scala.tools.nsc.typechecker.Macros$MacroExpander.apply(Macros.scala:612)
...
[error] at scala.tools.nsc.Global.withInfoLevel(Global.scala:227)
[error] at scala.tools.nsc.typechecker.Macros$MacroExpander.expand(Macros.scala:625)
[error] at scala.tools.nsc.typechecker.Macros$MacroExpander.apply(Macros.scala:612)
[error] at scala.tools.nsc.typechecker.Macros.standardMacroExpand(Macros.scala:787)
[error] at scala.tools.nsc.typechecker.Macros.standardMacroExpand$(Macros.scala:785)
[error] at scala.tools.nsc.Global$$anon$4.standardMacroExpand(Global.scala:477)
[error] at scala.tools.nsc.typechecker.AnalyzerPlugins$$anon$12.default(AnalyzerPlugins.scala:439)
[error] at scala.tools.nsc.typechecker.AnalyzerPlugins$$anon$12.default(AnalyzerPlugins.scala:436)
[error] (Compile / compileIncremental) java.lang.StackOverflowError
运行命令行 SBT 时发生相同的错误。我该如何解决?谢谢
更新 #1
TL;DR增加 SBT 线程堆栈大小,即 SBT_OPTS="-Xss2m" sbt clean compile
我的项目使用PureConfig并且编译器很重。增加内存占用会清除编译器溢出异常。举个例子,我的案例类在其参数中有一个List
或Option
嵌套的案例类。巧合的是,嵌套案例类在其构造函数中有一个List
或,Option
case class Foo(bars: List[Bar])
case class Bar(name: String, url: Option[URL])
这将导致编译器抛出 StackOverflowException。但是随着 SBT 的额外内存,编译将通过。