Java Scala:由于链中有大量方法而导致编译错误
有一个带有生成器的对象(从avro模式生成的java对象)。该对象具有平面结构,包含大约200个字段 代码如下所示:Java Scala:由于链中有大量方法而导致编译错误,java,scala,compiler-errors,Java,Scala,Compiler Errors,有一个带有生成器的对象(从avro模式生成的java对象)。该对象具有平面结构,包含大约200个字段 代码如下所示: Object.newBuilder() .setField1() .setField2() ... .setField200() Idea中的scala编译器可以毫无问题地编译它。当我尝试运行maven build时,它失败了,出现了编译问题:StackOverflow [ERROR] error: java.lang.StackOverflowError
Object.newBuilder()
.setField1()
.setField2()
...
.setField200()
Idea中的scala编译器可以毫无问题地编译它。当我尝试运行maven build时,它失败了,出现了编译问题:StackOverflow
[ERROR] error: java.lang.StackOverflowError
[INFO] at scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:666)
[INFO] at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5303)
[INFO] at scala.tools.nsc.typechecker.Typers$Typer.scala$tools$nsc$typechecker$Typers$Typer$$typedInternal(Typers.scala:5330)
[INFO] at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5277)
[INFO] at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5281)
[INFO] at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:5379)
[INFO] at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:5387)
[INFO] at scala.tools.nsc.transform.Erasure$Eraser.adaptMember(Erasure.scala:612)
[INFO] at scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:666)
[INFO] at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5303)
Scala版本:2.11
Scala maven插件:3.3.1
作为一种解决方法,我将set方法拆分为多个组(每个链中有100个setter)
它成功地在我的本地机器上编译,但在Jenkins服务器上编译失败。在我将setter拆分为更小的组(每组30个setter)之后,Jenkins服务器上编译的代码也会被删除
在scala编译器中是否有配置该行为的参数 我曾经遇到过同样的问题,我通过将堆栈大小从默认的1MB增加到10MB来解决它。希望能有帮助 我曾经遇到过同样的问题,我通过将堆栈大小从默认的1MB增加到10MB来解决它。希望能有帮助 也许这可以作为一个解决办法:?@ernest_k,谢谢,我有-Xss4m,尝试了10次,没有帮助。也许这可以作为一个解决办法:?@ernest_k,谢谢,我有-Xss4m,尝试了10次,没有帮助,谢谢。我以前用过-Xss4m,用10m试过。反正失败了。由于这个参数对所有env(我的本地机器和Jenkins服务器)都是相同的,所以我认为问题出在另一个地方谢谢。我以前用过-Xss4m,用10m试过。反正失败了。由于这个参数对所有env(我的本地机器和Jenkins服务器)都是相同的,所以我认为问题出在另一个地方
val builder = Object.newBuilder()
builder.setField1()
.setField2()
...
.setField100()
builder.setField101()
...
.setField200()