2010-01-12 7 views
9

Ich verwende Maven Website: betreiben eine cobertura Code-Coverage zu erzeugen ...Maven Cobertura OutOfMemoryError

Das folgende ist meine pom.xml Konfiguration für cobertura:

<reporting> 
    ... 
    <plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>cobertura-maven-plugin</artifactId> 
      <version>2.3</version> 
     </plugin> 
    </plugins> 
</reporting> 

aber ich bin immer OutOfMemoryError an Das Ende der Seite: run. Bitte schlagen Sie vor, wie Sie diesen Fehler beheben können. (Ich habe versucht, all diese -Xmx, -XX Optionen ...)

Exception in thread "Thread-0" java.lang.OutOfMemoryError: Java heap space 
     at sun.reflect.GeneratedSerializationConstructorAccessor74.newInstance(Unknown Source) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
     at java.io.ObjectStreamClass.newInstance(ObjectStreamClass.java:924) 
     at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1737) 
     at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) 
     at java.util.HashMap.readObject(HashMap.java:1030) 
     at sun.reflect.GeneratedMethodAccessor347.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974) 
     at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849) 
     at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 
     at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
     at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) 
     at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:480) 
     at net.sourceforge.cobertura.coveragedata.CoverageDataContainer.readObject(CoverageDataContainer.java:373) 
     at sun.reflect.GeneratedMethodAccessor348.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974) 
     at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849) 
     at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 
     at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 
     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) 
     at java.util.HashMap.readObject(HashMap.java:1030) 
     at sun.reflect.GeneratedMethodAccessor347.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974) 
     at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849) 
     at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) 
+0

Dupe: http://stackoverflow.com/questions/1920059/maven -throws-java-lang-outofmemoryerror –

Antwort

15

Verwenden Sie diese Eigenschaft in Ihrer pom.xml:

<project> 
... 
<build> 
... 
</build> 

<properties> 
    <cobertura.maxmem>256M</cobertura.maxmem> 
</properties> 

</project> 
+0

Ich habe es! Das Hinzufügen von 512m in pom.xml hat mein Problem behoben. Danke an alle – KrishPrabakar

+0

Dann überdenken Sie die Abstimmung und akzeptieren Sie die Antwort von Jean-Philippe Briend. – ewernli

1

Haben Sie versucht, so etwas wie export MAVEN_OPTS=-Xmx1024m (oder den höchsten Wert, der Ihre Maschine entsprechen)?

Wenn Sie immer noch nicht genug Speicher haben, um Maven auszuführen, dann würde ich vorschlagen, dass Sie versuchen, andere Plugins zu deaktivieren und einige Klassen aus der Testabdeckung auszuschließen, um zu überprüfen, ob es wirklich ein Speicherproblem ist.

<plugin> 
<groupId>org.codehaus.mojo</groupId> 
<artifactId>cobertura-maven-plugin</artifactId> 
<configuration> 
    <instrumentation> 
    <ignores> 
     <ignore>com.example.boringcode.*</ignore> 
    </ignores> 
    <excludes> 
     <exclude>com/example/dullcode/**/*.class</exclude> 
     <exclude>com/example/**/*Test.class</exclude> 
    </excludes> 
    </instrumentation> 
</configuration> 

http://mojo.codehaus.org/cobertura-maven-plugin/usage.html

EDIT

Andere Ideen:

Legen Sie die folgenden Eigenschaften (siehe cobertura plugin properties)

-Dmaven.cobertura.report.maxmemory=xxx 
-Dmaven.cobertura.instrumentation.maxmemory=xxx 

Versuchen Sie Gabel zu verwenden oder erhöhen Sie den Speicher mit den folgenden. Ich bin nicht sicher, ob es für cobertura funktioniert, aber scheint für junit zu arbeiten. Schnipsel aus diesem page:

<plugin> 
... 
<configuration> 
<forkMode>pertest</forkMode> 
</configuration> 
</plugin> 

oder

<plugin> 
... 
<configuration> 
... 
<argLine>-Xmx512m -XX:MaxPermSize=256m</argLine> 
</configuration> 
</plugin> 
+0

Das ist mein MAVEN_OPTS: -XX: MaxPermSize = 512m -Xms128m -Xmx600m (Ich änderte es zu -Xmx1024m aber ich habe den folgenden Fehler: Fehler bei der Initialisierung der VM aufgetreten Konnte nicht genügend Speicherplatz für Objekt-Heap reservieren Konnte die Java Virtual Machine nicht erstellen.) – KrishPrabakar

+0

Hallo ewernli, Ich habe versucht, aber immer noch gibt es existiert ... das ist die Änderung habe ich es in pom.xml : (I die größten Pakete ausgeschlossen) \t \t \t \t \t \t com/xxx/**/* Test.class \t \t com/xxx/yyy/Rating/**/* .klasse \t \t com/xxx/yyy/common/**/*. Klasse \t \t \t \t KrishPrabakar

+0

Ich habe es! Das Hinzufügen von 512m in pom.xml hat mein Problem behoben. Danke allen! – KrishPrabakar