Maven Cobertura OutOfMemoryError
-
20-09-2019 - |
Domanda
Sto usando sito Maven: correre per generare una copertura del codice cobertura ...
Di seguito è la mia configurazione pom.xml per cobertura:
<reporting>
...
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<version>2.3</version>
</plugin>
</plugins>
</reporting>
Comunque sto ottenendo OutOfMemoryError alla fine del sito: corsa. Si prega di suggerire come sbarazzarsi di questo errore. (Ho provato tutte quelle -Xmx, opzioni -XX ...)
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)
Soluzione
Utilizzare questa proprietà nel vostro pom.xml:
<project>
...
<build>
...
</build>
<properties>
<cobertura.maxmem>256M</cobertura.maxmem>
</properties>
</project>
Altri suggerimenti
Hai provato qualcosa di simile export MAVEN_OPTS=-Xmx1024m
(o il valore più alto che corrispondono alla vostra macchina)?
Se ancora non si dispone di memoria sufficiente per eseguire Maven, poi vorrei suggerire si tenta di disattivare altri plug-in ed escludere alcune classi dalla copertura di test per verificare se è davvero un problema di memoria.
<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
Modifica
Altre idee:
Impostare le seguenti proprietà (vedi le COBERTURA plugin di proprietà )
-Dmaven.cobertura.report.maxmemory=xxx
-Dmaven.cobertura.instrumentation.maxmemory=xxx
Prova ad usare forchetta o aumentare la memoria con il seguente. Non sono sicuro se funziona per cobertura, ma sembra funzionare per JUnit. Frammento da questo pagina :
<plugin>
...
<configuration>
<forkMode>pertest</forkMode>
</configuration>
</plugin>
o
<plugin>
...
<configuration>
...
<argLine>-Xmx512m -XX:MaxPermSize=256m</argLine>
</configuration>
</plugin>