2017-01-13 2 views
-2

Ich bekomme eine java.lang.StackOverflowError, wenn ich versuche, meinen Code mit mvn package und Java 1.8.0_112 zu kompilieren und zu verpacken.StackOverflowError mit Maven 3.3.9, Java 8 und Scala 2.12

Mein Code kompiliert gut mit Java 7.

Ich versuchte JAVA_OPTS=-Xss512m zu setzen und versuchte auch mit 1G aber immer den gleichen Fehler.

Der Code wird in Scala geschrieben und ich diese Versionen in meiner pom.xml bin mit:

<scala.version>2.10.4</scala.version> 
    <spark.version>1.6.0-cdh5.7.1</spark.version> 
    <hbase.version>1.2.0-cdh5.7.1</hbase.version> 
    <kafka.version>0.9.0.0</kafka.version> 
    <jackson.version>2.7.2</jackson.version> 
    <iodadm.version>05.4.1</iodadm.version> 

ich auch 2.12.0 mit Scala Version versucht, weil 2.10.x mit Java 8 nicht kompatibel ist

Teil des Fehler-Stack:

INFO] java.lang.reflect.InvocationTargetException 
[INFO] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
[INFO] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
[INFO] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
[INFO] at java.lang.reflect.Method.invoke(Method.java:498) 
[INFO] at scala_maven_executions.MainHelper.runMain(MainHelper.java:164) 
[INFO] at scala_maven_executions.MainWithArgsInFile.main(MainWithArgsInFile.java:26) 
[ERROR] Caused by: java.lang.StackOverflowError 
[INFO] at java.security.AccessController.doPrivileged(Native Method) 
[INFO] at java.io.PrintWriter.<init>(PrintWriter.java:116) 
[INFO] at java.io.PrintWriter.<init>(PrintWriter.java:100) 
[INFO] at scala.reflect.api.Printers$class.render(Printers.scala:168) 
[INFO] at scala.reflect.api.Universe.render(Universe.scala:59) 
[INFO] at scala.reflect.api.Printers$class.show(Printers.scala:190) 

eine weitere Sache ist Stackoverflow-Fehler in der Regel ein Fehler Ausführung Laufzeit, wie ist es möglich, sie während der Kompilierung zu bekommen?

[Hinzugefügt 1] Ich fand, dass dieser Fehler durch scala Klassen mit mindestens 150 Eigenschaften verursacht wird

[Hinzugefügt 2] Die Funktion dieser Fehler zu werfen ist Funktion ist gleich, ich entwickelte es wie folgt aus:

def equals(other:MyClass):Boolean = { 
    this.P1 == other.P1 && 
    this.P2 == other.P2 && 
    ... ~ 180 similar line ... 
    this.P180 == other.P180 
} 

Vielen Dank.

+2

Könnten Sie uns ein paar weitere Details über das '' 'StackOverflowError''' geben? Einige reproduzierbare Beispielcode wäre großartig. Ansonsten ist die Frage zu breit und ich bezweifle, dass jemand Ihnen eine wertvolle Antwort geben kann. – h3nrik

+0

BTW: Ein '' 'StackOverflowError''' tritt normalerweise auf, wenn Sie z. endlose Rekursionen irgendwo. In diesem Fall wäre es nicht wichtig, die Stapelgröße zu erhöhen. Sie würden immer denselben Fehler erhalten, bis Sie die Ursache behoben haben. – h3nrik

+0

@ h3nrik: Danke für den Rat. aber das Projekt ist groß und ich kann nicht wissen, welcher Teil des Codes diesen Fehler wirft. Außerdem funktioniert der Code gut mit Java 7. Ich habe die Antwort mit einem Teil des Fehlerstapels bearbeitet – bbary

Antwort

0

Ich löste das Problem, indem sie die logische Operation Aufspalten viele in

def equals(other:MyClass):Boolean = { 
    Boolean bool1=this.P1 == other.P1 && 
    this.P2 == other.P2 && 
    ... 
    this.P100 == other.P100 
    Boolean bool2=this.P101 == other.P101 && 
    this.P102 == other.P102 && 
    ... 
    this.P200 == other.P200 

    bool1 && bool2 
} 

Der Ansatz, um diese Art von Problemen zu lösen ist, den Code schrittweise bis zu finden, den Code-Block zu erstellen, die den Fehler

I wirft hoffe das wird jemandem helfen

Verwandte Themen