2016-12-20 38 views
2

我一直在Cobertura上工作了几个月,最近我收到一条错误消息,指出“从特定目标位置读取错误.ser文件” .Does任何人有想法,为什么我收到以下错误:Cobertura:读取文件错误cobertura.ser:null java.io.EOFException:null

的Cobertura Maven插件版本:2.7

Java版本:1.8

[INFO] Cobertura 2.1.1 - GNU GPL License (NO WARRANTY) - See COPYRIGHT file 
[ERROR] Cobertura: Error reading file C:\view\ 
xyz\target\cobertura\cobertura.s 
er: null 
java.io.EOFException: null 
     at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputSt 
ream.java:2626) ~[na:1.8.0_102] 
     at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1321) ~[ 
na:1.8.0_102] 
     at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:20 
18) ~[na:1.8.0_102] 
     at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1942) 
~[na:1.8.0_102] 
     at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1 
808) ~[na:1.8.0_102] 
     at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353) ~[ 
na:1.8.0_102] 
     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373) ~[na 
:1.8.0_102] 
     at java.util.HashMap.readObject(HashMap.java:1404) ~[na:1.8.0_102] 
     at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source) ~[na:na] 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces 
sorImpl.java:43) ~[na:1.8.0_102] 
     at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_102] 
     at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:105 
8) ~[na:1.8.0_102] 
     at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1909) 
~[na:1.8.0_102] 
     at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1 
808) ~[na:1.8.0_102] 
     at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353) ~[ 
na:1.8.0_102] 
     at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:20 
18) ~[na:1.8.0_102] 
     at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:50 
3) ~[na:1.8.0_102] 
     at net.sourceforge.cobertura.coveragedata.CoverageDataContainer.readObje 
ct(CoverageDataContainer.java:321) ~[cobertura-2.1.1.jar:2.1.1] 
     at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source) ~[na:na] 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces 
sorImpl.java:43) ~[na:1.8.0_102] 
     at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_102] 
     at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:105 
8) ~[na:1.8.0_102] 
     at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1909) 
~[na:1.8.0_102] 
     at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1 
808) ~[na:1.8.0_102] 
     at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353) ~[ 
na:1.8.0_102] 
     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373) ~[na 
:1.8.0_102] 
     at java.util.HashMap.readObject(HashMap.java:1404) ~[na:1.8.0_102] 
     at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source) ~[na:na] 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces 
sorImpl.java:43) ~[na:1.8.0_102] 
     at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_102] 
     at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:105 
8) ~[na:1.8.0_102] 
     at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1909) 
~[na:1.8.0_102] 
     at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1 
808) ~[na:1.8.0_102] 
     at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353) ~[ 
na:1.8.0_102] 
     at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:20 
18) ~[na:1.8.0_102] 
     at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:50 
3) ~[na:1.8.0_102] 
     at net.sourceforge.cobertura.coveragedata.CoverageDataContainer.readObje 
ct(CoverageDataContainer.java:321) ~[cobertura-2.1.1.jar:2.1.1] 
     at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source) ~[na:na] 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces 
sorImpl.java:43) ~[na:1.8.0_102] 
     at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_102] 
     at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:105 
8) ~[na:1.8.0_102] 
     at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1909) 
~[na:1.8.0_102] 
     at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1 
808) ~[na:1.8.0_102] 
     at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353) ~[ 
na:1.8.0_102] 
     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373) ~[na 
:1.8.0_102] 
     at java.util.HashMap.readObject(HashMap.java:1404) ~[na:1.8.0_102] 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8. 
0_102] 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. 
java:62) ~[na:1.8.0_102] 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces 
sorImpl.java:43) ~[na:1.8.0_102] 
     at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_102] 
     at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:105 
8) ~[na:1.8.0_102] 
     at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1909) 
~[na:1.8.0_102] 
     at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1 
808) ~[na:1.8.0_102] 
     at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353) ~[ 
na:1.8.0_102] 
     at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:20 
18) ~[na:1.8.0_102] 
     at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:50 
3) ~[na:1.8.0_102] 
     at net.sourceforge.cobertura.coveragedata.CoverageDataContainer.readObje 
ct(CoverageDataContainer.java:321) ~[cobertura-2.1.1.jar:2.1.1] 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8. 
0_102] 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. 
java:62) ~[na:1.8.0_102] 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces 
sorImpl.java:43) ~[na:1.8.0_102] 
     at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_102] 
     at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:105 
8) ~[na:1.8.0_102] 
     at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1909) 
~[na:1.8.0_102] 
     at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1 
808) ~[na:1.8.0_102] 
     at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353) ~[ 
na:1.8.0_102] 
     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373) ~[na 
:1.8.0_102] 
     at net.sourceforge.cobertura.coveragedata.CoverageDataFileHandler.loadCo 
verageData(CoverageDataFileHandler.java:85) ~[cobertura-2.1.1.jar:2.1.1] 
     at net.sourceforge.cobertura.coveragedata.CoverageDataFileHandler.loadCo 
verageData(CoverageDataFileHandler.java:62) ~[cobertura-2.1.1.jar:2.1.1] 
     at net.sourceforge.cobertura.dsl.Cobertura.getProjectDataInstance(Cobert 
ura.java:146) [cobertura-2.1.1.jar:2.1.1] 
     at net.sourceforge.cobertura.dsl.Cobertura.report(Cobertura.java:122) [c 
obertura-2.1.1.jar:2.1.1] 
     at net.sourceforge.cobertura.reporting.ReportMain.parseArgumentsAndRepor 
t(ReportMain.java:91) [cobertura-2.1.1.jar:2.1.1] 
     at net.sourceforge.cobertura.reporting.ReportMain.generateReport(ReportM 
ain.java:141) [cobertura-2.1.1.jar:2.1.1] 
     at net.sourceforge.cobertura.reporting.ReportMain.main(ReportMain.java:1 
51) [cobertura-2.1.1.jar:2.1.1] 
Report time: 1031ms 

在此先感谢。

回答

1

通常只有当您没有足够的内存分配给cobertura来生成报告时.ser文件才会被锁定。溶液应

1)从SRC /测试/ java和运行的Cobertura或

2删除所有不必要的测试类的文件)增加的Cobertura的存储器大小,像下面

<plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>cobertura-maven-plugin</artifactId> 
      <version>2.7</version> 
      <configuration> 
       <quiet>true</quiet> 
       <cobertura.maxmem>1024m</cobertura.maxmem> 
       <instrumentation> 
        <excludes> 
         <exclude>com/homepage/helper/ABC.class</exclude> 

        </excludes> 
        <ignores> 
         <!-- <ignore>com..homepage..helper.ABC</ignore> --> 
        </ignores> 
        <maxmem>1024m</maxmem> 
       </instrumentation> 
       <argLine>-Xms512m -Xmx2048m -XX:MaxPermSize=1024m</argLine> 
       <!-- <argLine>-Xmx2048m</argLine> --> 
      </configuration> 
      <executions> 
       <execution> 
        <id>clean</id> 
        <phase>pre-site</phase> 
        <goals> 
         <goal>clean</goal> 
        </goals> 
       </execution> 
       <execution> 
        <id>instrument</id> 
        <phase>site</phase> 
        <goals> 
         <goal>instrument</goal> 
         <goal>cobertura</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

在pom.xml只需将cobertura.maxmem大小更改为我们想要的任何大小,并且我们可以选择忽略少数类,同时生成报告。

3)还有一种可能性是您的确定插件版本不受支持。如果以上两种方案都没有,那么工作尝试更新像下面万无一失的版本(Maven的万无一失,插件应该是2.12):

<plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.12</version> 
      <dependencies> 
       <dependency> 
        <groupId>org.apache.maven.surefire</groupId> 
        <artifactId>surefire-junit47</artifactId> 
        <version>2.17</version> 
       </dependency> 
      </dependencies>    
      <configuration>      
        <groups>${testcase.include}</groups> 
        <excludedGroups>${testcase.exclude}</excludedGroups> 
      </configuration> 

     </plugin> 

希望它是有用的。

1

尝试更新内存按照上述,并没有为我们工作。然而,发现了一个“解决方案”(或补救至少)通过另一种方式在不经意间:

我们有大约60名饰用类级别的注释

@RunWith(PowerMockRunner.class) 

巧合的测试类,因为这些类不展示在我们当地的环境(其实际使用EclEmma代码覆盖 - 这是一样的JaCoCo - 已知的问题)报道,我尝试了注释转换...

@RunWith(PowerMockRunner.class) 

@RunWith(MockitoJUnitRunner.class) 

并能够转换我们所拥有的60个中的30个。虽然我们无法将它们全部转换,但因为有些与测试中的PowerMock功能相关联,例如允许测试静态方法。但是将PowerMockRunner的注释转换为MockitoJUnitRunner仍然可以解决上述Cobertura错误出错的问题。我仍然无法给出实质性的答案,因为Cobertura确实为@RunWith(PowerMockRunner.class)显示了类的覆盖范围。但是我知道后会更新这篇文章。

+0

有时它会显示@RunWith(PowerMockRunner.class)的覆盖率报告,有时不会,不知道为什么cobertura正在运行..... –