2017-12-20 1 views
0

Ich habe einen Fehler in Bezug auf Scala-maven-plugin in meinem Maven-Projekt gefunden. Ich habe eine sehr lange Reihe von Features (für Machine Learning Zwecke) Ich handkodiert (74 Elemente).Scala Maven Plugin kompiliert nicht mit StackOverflowError

Ich habe ein Element in der Sequenz hinzugefügt und es kompiliert nicht mehr. Wenn ich ein Element dieser Sequenz kommentiere, verringert sich die Anzahl der Elemente und es wird kompiliert.

Für weitere Informationen, hier ist die letzte Ausgabe meiner Sammlung:

[ERROR] Failed to execute goal net.alchim31.maven:scala-maven-plugin:3.3.1:compile (default) on project SecretProject: wrap: org.apache.commons.exec.ExecuteException: Process exited with an error: 240 (Exit value: 240) -> [Help 1] 
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. 
[ERROR] Re-run Maven using the -X switch to enable full debug logging. 
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles: 
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException 

Plus die ganz am Anfang der Stacktrace:

[INFO] Compiling 13 source files to /home/belka/Bureau/SecretProject/target/classes at 1513759339071 
[ERROR] error: java.lang.StackOverflowError 
[INFO] at scala.reflect.internal.TreeInfo.isSelfConstrCall(TreeInfo.scala:296) 
[INFO] at scala.reflect.internal.TreeInfo.isSelfOrSuperConstrCall(TreeInfo.scala:344) 
[INFO] at scala.reflect.internal.Trees$UnderConstructionTransformer$class.transform(Trees.scala:1701) 
[INFO] at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:291) 
[INFO] at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:457) 
[INFO] at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:352) 
[INFO] at scala.reflect.internal.Trees$class.itransform(Trees.scala:1345) 

(modifizierte Projektname)

  • Hat jemand ein ähnliches Problem mit Scala-maven-plugin?
  • Hat Scala-maven-plugin Parser (im Compiler) irgendeine Art von Hard-Limit für Sequenzen Parsing?
  • Wie löst man es und kompiliert mein Projekt?
  • Warum funktioniert es mit IntelliJ Compilation ("Play" -Taste), aber nicht mit Maven Compilation?

EDIT:

Ich füge das pom.xml Fragment mein Scala-maven-plugin Fragment enthält:

 <plugin> 
     <!-- see http://davidb.github.com/scala-maven-plugin --> 
     <groupId>net.alchim31.maven</groupId> 
     <artifactId>scala-maven-plugin</artifactId> 
     <version>3.3.1</version> 
     <executions> 
      <execution> 
      <goals> 
       <goal>compile</goal> 
       <goal>testCompile</goal> 
      </goals> 
      <configuration> 
       <args> 
       <arg>-dependencyfile</arg> 
       <arg>${project.build.directory}/.scala_dependencies</arg> 
       </args> 
       <jvmArgs> 
       <jvmArg>-Xms512m</jvmArg> 
       <jvmArg>-Xmx4096m</jvmArg> 
       </jvmArgs> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
+0

Welchen Fehler bekommen Sie? Bitte geben Sie ein kleines Beispiel, das das Problem reproduziert. – marstran

+0

Ich habe Informationen über die Stack-Trace + hinzugefügt, um das Problem zu reproduzieren, können Sie eine Sequenz erstellen, die 74 Elemente enthält, die von Hand hinzugefügt werden, dann an der 75. sollte es nicht mehr kompilieren. – belka

+0

Ich habe versucht, eine Sequenz von 200 Elementen von Hand hinzugefügt, und es hat gut funktioniert. Bitte geben Sie ein minimales, überprüfbares und vollständiges Beispiel an, damit wir Ihr Problem reproduzieren können. – marstran

Antwort

1

Sie könnten:

  • de-rekursive Code oder verwenden Schwanz rekursive
  • oder die maximale Stapelgröße des JVM erhöhen verwendet scalac über -Xss

     <jvmArgs> 
         <jvmArg>-Xss4m</jvmArg> 
         <jvmArg>-Xms512m</jvmArg> 
         <jvmArg>-Xmx4096m</jvmArg> 
         </jvmArgs> 
    
laufen

Ich denke, IDEA bereits die Standard-Max-Stack-Größe (Iirc 1024k in der 64-b es VM).

+0

danke! Das hat mein Problem gelöst. Haben Sie eine Dokumentation darüber, wie Sie diese Lösung gefunden haben oder warum sie mein Problem löst? Warum reicht eine kleine Heap-Größe? – belka

+0

Xss für Stack-Größe, Xms/Xmn für Heap-Größe (4G ist nicht kleine Heap-Größe). Sie können nach dem Unterschied zwischen der Stackgröße und der Heapgröße suchen (für den JVM). Ich fand die Lösung, weil ich dieses Problem schon vor einigen Jahren mit zu rekursiver App oder Buggy-App mit unendlicher Rekursion hatte. –

+0

und wie ist 4M für eine Stapelgröße? – belka

1

Um Ihnen Fragen zu beantworten, um:

  • Ja. Siehe this für das Problem und die Lösung.
  • JVM hat ein Stack-Limit, jetzt spekuliere ich ein wenig, aber beim Parsen von Code wird normalerweise ein Stack verwendet und wenn es rekursiv (oivey) ist, macht es Sinn, eine sehr lange Sequenz zu parsen. Anscheinend unter dem Speicherverbrauch von Maven und dem Scala-Parser ist es zu viel.
  • Um es zu lösen siehe Link oben.
  • Könnte sein, wie ich oben erwähnt, dass Maven mehr Stack Speicherverbrauch als intellij hat. Edit: Ich denke, es hängt eher davon ab, wie der Compiler-Prozess gestartet wird, wenn ich mich nicht irre, dass es einen anderen Stack-Status haben könnte.
+0

Ich sah die vorgeschlagene Lösung, aber das passt nicht zu meinem Problem. Die Kompilierungsphase verwendet ungefähr 4-5% meines Gedächtnisses ... – belka

+0

@belka Sie verfügbarer Speicher oder JVM's Stapelspeicher? Die Stapelgröße ist unabhängig vom verfügbaren Systemspeicher begrenzt. – Eytan

+0

von meinem verfügbaren Speicher; Die JVM-Stack-Größe ist auf 4096M eingestellt, was weit über dem verbrauchten Speicher liegt. – belka

Verwandte Themen