2015-05-26 9 views
74

Sto usando SonarQube per il controllo della qualità del codice e improvvisamente le build che altrimenti passerebbero non possono essere analizzate e falliscono.JaCoCo SonarQube versione incompatibile 1007

[INFO] [00: 00: 03,630] Analisi /mySuperProject/target/jacoco.exec -> java.io.IOException: Incompatibile versione 1007

Quando invoco Maven costruire con il debug interruttore, questa causa si rivela

Caused by: java.io.IOException: Incompatible version 1007. 
at org.jacoco.core.data.ExecutionDataReader.readHeader(ExecutionDataReader.java:127) 
at org.jacoco.core.data.ExecutionDataReader.readBlock(ExecutionDataReader.java:107) 
at org.jacoco.core.data.ExecutionDataReader.read(ExecutionDataReader.java:87) 
at org.sonar.plugins.jacoco.AbstractAnalyzer.readExecutionData(AbstractAnalyzer.java:134) 
at org.sonar.plugins.jacoco.AbstractAnalyzer.analyse(AbstractAnalyzer.java:107) 

Durante l'ispezione jacoco ExecutionDataReader, ho scoperto che viene generata un'eccezione da

if (version != ExecutionDataWriter.FORMAT_VERSION) { 
    throw new IOException(format("Incompatible version %x.",Integer.valueOf(version))); 
} 

e da ExecutionDataWriter ho scoperto

/** File format version, will be incremented for each incompatible change. */ 
public static final char FORMAT_VERSION = 0x1007; 

Cos'è questo incompatibili cambiamento e perché è successo? Qualche idea su come risolvere questa sfida?

+5

questione è stata sollevata sul lato SonarQube Java Plugin: http://jira.codehaus.org/browse/SONARJAVA-1091 e dovrebbe essere fissato nella prossima release. Questo è un cambio di rottura sul lato JaCoCo. Facciamo un po 'di tempo per essere in grado di risolverlo. – benzonico

risposta

73

Come già accennato, ciò è dovuto a un'interruzione del codice del plugin Maven JaCoCo. Si può (temporaneamente) specificare la versione nella Jenkins comando Maven come:

clean org.jacoco:jacoco-maven-plugin:<version>:prepare-agent install 

esempio

clean org.jacoco:jacoco-maven-plugin:0.7.4.201502262128:prepare-agent install 

Questa è stata la soluzione che ci ha aiutato. Ma come la maggior parte delle persone, sto ancora aspettando la soluzione.

+1

Bel trucco, in ambiente con molti sottoprogetti che era la soluzione più pulita finora – Padvinder

+0

Problema JaCoCo chiuso: http://jira.sonarsource.com/browse/SONARJAVA-1091 –

+1

Questo è stato risolto nell'ultima versione del plug-in Java SonarQube –

16

Molto probabilmente è causato dall'ultimo aggiornamento del plug-in jacoco-maven. Tutto stava funzionando su 0.7.4.201502262128 ma oggi siamo passati a 0.7.5.201505241946 che ha provocato questo errore.

+0

Anche io sto vedendo questo. Avete ulteriori informazioni su questo? –

1

Come kdowbecki lo ha citato, questo errore è molto probabilmente dovuto a un aggiornamento di jacoco-maven-plugin.

tuo SonarQube è più probabile che ora con la nuova versione di Jacoco Maven Plugin (probabilmente il nuovo 0.7.5.201505241946), ma è in realtà cercando di leggere una vecchia versione di un jacoco.exec (nel tuo caso potrebbe essere la lettura di un jacoco .exec generato da jacoco maven plug-in versione 0.7.4.201502262128) che risulta in una incompatibilità generata da JaCoCo.

Per risolvere questo problema, è necessario assicurarsi che tutti i processi SonarQube/Jenkins generino un rapporto JaCoCo ogni volta e non fare affidamento su una versione precedente di jacoco.exec che potrebbe essere stata generata da un lavoro precedente.

29

Quello che ho fatto è stato specificare la versione jacoco nel mio progetto Maven.

<jacoco-maven-plugin.version>0.7.4.201502262128</jacoco-maven-plugin.version> 

    <plugin> 
     <groupId>org.jacoco</groupId> 
     <artifactId>jacoco-maven-plugin</artifactId> 
     <version>${jacoco-maven-plugin.version}</version> 
    </plugin> 

Questo risolve il problema!

+0

Sì, ha funzionato. Grazie. – djangofan

5

Run:

mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent install 
mvn org.jacoco:jacoco-maven-plugin:prepare-agent clean install -Pcoverage-per-test 
mvn sonar:sonar 

Ciò ri-generare .exec file creati con versioni precedenti di jacoco.

4

Provare ad aggiornare il plug-in Java nel Centro di aggiornamento SonarQube, questo funziona per me.Ho aggiornato il plugin Java dalla versione 2.4 all'ultima 3.13.1.

SonarQube Update Center -> Aggiornamenti Plugin -> Java