今天在使用maven打包項目的時候,報了以下異常:
[ERROR] error: java.lang.StackOverflowError[INFO] at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5365)[INFO] at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:5472)[INFO] at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:5480)[INFO] at scala.tools.nsc.transform.Erasure$Eraser.adaptMember(Erasure.scala:644)[INFO] at scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:698)
看到這個異常的第一反應,就是檢查代碼中是否有大量的遞迴調用,結果發現就是沒有。
然後想到的是JVM預設的棧大小,於是想修改JVM參數,這個參數可以在maven的pom.xml檔案中進行配置,如下:
<build> <plugins> <plugin> <groupId>org.scala-tools</groupId> <artifactId>maven-scala-plugin</artifactId> <executions> <execution> <goals> <goal>compile</goal> <goal>testCompile</goal> </goals> </execution> </executions> <configuration> <scalaVersion>${scala.version}</scalaVersion> <args> <arg>-target:jvm-1.8</arg> </args> <jvmArgs> <jvmArg>-Xss2048K</jvmArg> </jvmArgs> </configuration> </plugin> </plugins> </build>
其中,以下片段為修改棧大小:
<jvmArgs> <jvmArg>-Xss2048K</jvmArg></jvmArgs>
重新打包,問題解決。