The setup for my environment is SBT 1.3.0-RC1, Scala 2.12.8 and Java 1.8.0_212. The SBT threw an exception during 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
The same error occurred for running command-line SBT. How do I fix this? Thanks
Updates #1
TL;DR Increase SBT thread stack size i.e. SBT_OPTS="-Xss2m" sbt clean compile
My project uses PureConfig and it is compiler heavy. Increasing the memory footprint clear the compiler from overflow exception. Case in point, my case class has a List
or Option
nested case class in its parameter. Coincidentally, the nested case class has a List
or Option
in its constructor,
case class Foo(bars: List[Bar])
case class Bar(name: String, url: Option[URL])
This will cause the compiler to throw a StackOverflowException. But with additional memory given to SBT, the compilation will go thru.