2016-12-20 36 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正在運行..... –