2016-12-20 3 views
2

Ich habe für einige Monate auf Cobertura gearbeitet und vor kurzem bekomme ich eine Fehlermeldung, dass "Fehler beim Lesen .ser-Datei" von bestimmten Zielort .Does jemand Ahnung, warum bin ich die folgenden Fehler bekommen:Cobertura: Fehler beim Lesen der Datei cobertura.ser: null java.io.EOFException: null

Cobertura maven Plugin-Version: 2.7

Java-Version: 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 

Vielen Dank im Voraus.

Antwort

1

Normalerweise werden .ser-Dateien nur gesperrt, wenn nicht genügend Arbeitsspeicher zur Verfügung steht, der für die Erstellung des Berichts für cobertura reserviert wurde. Die Lösung sollte

1) Löschen Sie alle nicht benötigten Testklassendateien werden von src/test/java und laufen cobertura oder

2) Erhöhen Sie die Speichergröße von cobertura, so etwas wie unten

<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> 

In pom.xml ändern Sie einfach die cobertura.maxmem Größe, was auch immer wir wollen und wir haben die Option, einige Klassen beim Generieren von Berichten zu ignorieren.

3) Und es gibt eine weitere Möglichkeit, dass Ihre sure-fire-Plugin-Version nicht unterstützt wird. Wenn über zwei Lösungen funktionieren nicht dann todsichere Version wie unten versuchen, die Aktualisierung (Maven-todsichere-Plugin sollte 2.12 sein):

<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> 

Hoffen, dass es nützlich ist.

1

Versucht, den Speicher wie oben zu aktualisieren und das hat nicht für uns funktioniert. Jedoch festgestellt, eine ‚Lösung‘ (oder Mittel zumindest) versehentlich über einen anderen Weg:

Wir über 60 Testklassen hatten, die mit der Klassenstufe Anmerkung

@RunWith(PowerMockRunner.class) 

Einstimmend eingerichtet wurden, da diese Klassen nicht waren zeigt Berichterstattung in unserer lokalen Umgebungen (die eigentlich EclEmma für Codeabdeckung verwenden - die die gleiche wie JaCoCo ist - bekanntes Problem), habe ich versucht, die Annotation konvertieren ...

@RunWith(PowerMockRunner.class) 

zu

@RunWith(MockitoJUnitRunner.class) 

und konnte etwa 30 der 60, die wir hatten konvertieren. Wir konnten zwar nicht alle konvertieren, da einige an die PowerMock-Funktionen in den Tests gebunden sind, wie beispielsweise das Testen von statischen Methoden. Aber das Konvertieren der Annotation von PowerMockRunner in MockitoJUnitRunner behob irgendwie das obige Problem von Cobertura, das nach dem obigen Fehler fehlte. Ich kann immer noch keine substantielle Antwort geben, warum das genau so wäre, denn Cobertura zeigt Deckung für Klassen mit @RunWith (PowerMockRunner.class). Aber ich werde diesen Beitrag aktualisieren, sobald ich weiß.

+0

manchmal zeigt Coverage-Bericht für @RunWith (PowerMockRunner.class) und manchmal nicht, nicht sicher, warum Cobertura verhält sich verdrahtet ..... –