2011-01-24 6 views
10

Ecco un'eccezione che si ottiene quando si tenta di compilare un codice appena estratto in Windows Server 2003 con Maven 2.2.1 e JDK 1.6.0_23. Diverse macchine che eseguono Ubuntu con la stessa versione di Maven e JDK non hanno alcun problema a compilare la stessa identica fonte.Compilazione Maven: Errore nell'esecuzione javac

Hanno provato a fornire opzioni alternative Maven (ad esempio MAVEN_OPTS = -Xms256m -Xmx1024m) senza alcun risultato.

Quale potrebbe essere la causa di questo problema e quale sarebbe una possibile soluzione? Grazie.

[INFO] Compilation failure 

Failure executing javac, but could not parse the error: 


The system is out of resources. 
Consult the following stack trace for details. 
java.lang.StackOverflowError 
    at com.sun.tools.javac.comp.Attr.visitSelect(Attr.java:1799) 
    at com.sun.tools.javac.tree.JCTree$JCFieldAccess.accept(JCTree.java:1522) 
    at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:360) 
    at com.sun.tools.javac.comp.Attr.attribExpr(Attr.java:377) 
    at com.sun.tools.javac.comp.Attr.visitApply(Attr.java:1241) 
    at com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1210) 
    at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:360) 
    ... then trace repeats multiple times 
+0

'MAVEN_OPTS = -Xms256m -Xmx1024m' aumenterà memoria heap –

risposta

12

provare

MAVEN_OPTS=-Xms256m -Xmx1024m -Xss1024k

Nota: -Xss, deve essere impostato in base all'hardware disponibile

+0

Accettare questo come era la prima risposta che ha funzionato. La risposta di @dogbane è potenzialmente più flessibile in quanto legata al progetto piuttosto che al sistema (MAVEN_OPTS è una variabile di ambiente). – 01es

+1

+1, poiché questo mi ha aiutato a capire cosa presumo sia la soluzione per http://stackoverflow.com/questions/9229020/jenkins-not-showing-maven-compiler-errors/10857174#10857174 (o almeno era il mio problema, come dettagliato nella mia risposta laggiù) – haylem

7

è qualsiasi del codice essere generato automaticamente per esempio da un WSDL? Puoi individuare quale classe (i) sta causando il problema? Un modo per farlo sarebbe quello di rimuovere parte della tua fonte, ricompilare e ripetere fino a restringere a un piccolo sottoinsieme di classi.

Hai classi grandi o metodi lunghi? Se è così, dovresti refactoring.

Aumentare le dimensioni dello stack. Penso che il valore predefinito sia 512k. Modificare la configurazione del compilatore a:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>2.3.2</version> 
    <configuration> 
    <compilerArgument>-J -Xss10M</compilerArgument> 
    </configuration> 
</plugin> 
+3

+1 Il compilerArgument non ha funzionato per me (argomento javac non valido per qualche motivo). Tuttavia compilerArguments (plurale) ha fatto. Come nota a margine, la documentazione di maven (http://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html#compilerArguments) afferma che fork deve essere impostato su true per compilerArgument e compilerArguments su essere usato. – 01es

+1

La maggior parte [documentazione recente] (http://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html) dice che '' è ora deprecato e dovresti usare ' 'invece. –

+0

In Maven 3.5.x che deve essere impostato in questo modo: org.apache.maven.plugins Maven-compiler-plugin 3.5.1 vero -J-Xss4m

2

quello che potrebbe essere la causa di questo problema e quello che sarebbe una soluzione possibile? Grazie.

Ecco alcune possibili cause:

  • Lo stack è in realtà troppo piccola. Correzione - imposta una dimensione più grande dello stack.
  • Si sta compilando una classe o un metodo patologico. Correzione: prova e identifica il file, identifica la patologia e rifattalo.
  • Hai incontrato un bug del compilatore Java. Correzione - prova e identifica il file, identifica ciò che sta attivando il bug e rifattalo per risolvere il problema.
  • In qualche modo sei riuscito a ottenere un file JAR corrotto nel repository locale Maven sulla macchina Windows. Correzione: cancellare il repository e ricostruire. (Ciò può comportare il ri-download di un mucchio di artefatti e plug-in.)
0

Ho riscontrato lo stesso problema. per risolvere il problema quello che ho fatto, è- ho eseguito il seguente comando nella consolle

set MAVEN_OPTS=-Xms256m -Xmx1024m -Xss1024k *-XX:MaxPermSize=384m 

invece di-

set MAVEN_OPTS=-Xms256m -Xmx1024m -Xss1024k *-XX:MaxPermSize=128m 

Prova questo, sarebbe sicuramente lavorare.Se ancora si ottiene lo stesso problema quindi sostituire

-XX:MaxPermSize=384m 

a

-XX:MaxPermSize=512m 
+0

spostato a Java 8, che non usa più permgen. – 01es

0

Il commento qui sotto è una risposta di lavoro

set MAVEN_OPTS=-Xms256m -Xmx1024m -Xss1024k -XX:MaxPermSize=384m"