2010-01-12 79 views
9

我使用Maven站点:运行生成的Cobertura代码覆盖...的Maven的Cobertura的OutOfMemoryError

以下是我的Cobertura配置的pom.xml:

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

但是我在得到的OutOfMemoryError网站结束:运行。请建议如何摆脱这个错误。 (我已经尝试了所有的-Xmx,-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) 
+0

杜佩:http://stackoverflow.com/questions/1920059/maven -throws-java-lang-outofmemoryerror – 2010-01-12 20:29:56

回答

15

使用这个属性在你的pom.xml:

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

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

</project> 
+0

我明白了!在pom.xml中添加 512m解决了我的问题。谢谢大家 – KrishPrabakar 2010-02-19 08:52:46

+0

然后考虑投票并接受Jean-Philippe Briend的答案。 – ewernli 2010-02-19 09:55:06

1

你尝试类似export MAVEN_OPTS=-Xmx1024m(或匹配你的机器的最高值)?

如果您仍然没有足够的内存来运行maven,那么我会建议您尝试禁用其他插件并从测试覆盖范围中排除某些类以检查它是否真的存在内存问题。

<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

编辑

其他的想法:

设置以下属性(见cobertura plugin properties

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

尝试使用fork或使用以下内容增加内存。我不确定它是否适用于cobertura,但似乎适用于junit。从这个page片段:

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

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

这是我的MAVEN_OPTS:-XX:MaxPermSize = 512m -Xms128m -Xmx600m(我将其更改为-Xmx1024m,但出现以下错误: 错误发生在虚拟机初始化期间 无法为对象堆预留足够的空间 无法创建Java虚拟机。) – KrishPrabakar 2010-01-12 12:32:41

+0

嗨ewernli, 我试过了,但仍存在问题...这是我在pom.xml :(I排除的最大包) \t \t <仪器> \t \t \t \t COM/XXX/**/*的Test.class \t \t COM/XXX/YYY /等级/ **/* .class \t \t com/xxx/yyy/common/**/*。类 \t \t \t \t KrishPrabakar 2010-01-19 10:21:32

+0

我知道了!在pom.xml中添加 512m解决了我的问题。感谢大家! – KrishPrabakar 2010-02-19 08:52:28

相关问题