1

Ich habe ein Maven Projekt mit einigen Arquillian Tests (Drone/Graphene Tests enthalten).Fehlende Jacoco Code Coverage und IncompatibleClassChangeError

Als ich baue mein Projekt Maven all meine Arquillian Tests verwenden, die Graphene und Drone oder Warp verwenden wird mit folgenden Ausnahme fehlschlagen

Running de.mmo.arq.model.diverses.stammdaten.geldinstitut.GeldinstitutBlzTest 
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 4.862 sec <<< FAILURE! - in de.mmo.arq.model.diverses.stammdaten.geldinstitut.GeldinstitutBlzTest 
de.mmo.arq.model.diverses.stammdaten.geldinstitut.GeldinstitutBlzTest Time elapsed: 4.862 sec <<< ERROR! 
org.jboss.shrinkwrap.api.exporter.ArchiveExportException: Failed to write asset to output: /WEB-INF/classes/de/mmo/base/dao/CrudService.class 
Caused by: java.lang.IncompatibleClassChangeError: class org.jacoco.core.internal.flow.ClassProbesVisitor has interface org.objectweb.asm.ClassVisitor as super class 

Dies ist der Ort, wo die Magie

<build> 
    <finalName>browser</finalName> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.2</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-release-plugin</artifactId> 
      <version>2.5.3</version> 
      <configuration> 
       <tagBase>...</tagBase> 
       <useReleaseProfile>false</useReleaseProfile> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
<profiles> 
    <profile> 
     <id>jacoco</id> 
     <dependencies> 
      <dependency> 
       <groupId>org.jacoco</groupId> 
       <artifactId>org.jacoco.core</artifactId> 
       <scope>test</scope> 
      </dependency> 
     </dependencies> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.jacoco</groupId> 
        <artifactId>jacoco-maven-plugin</artifactId> 
        <version>${jacoco}</version> 
        <executions> 
         <execution> 
          <goals> 
           <goal>prepare-agent</goal> 
          </goals> 
         </execution> 
         <execution> 
          <id>report</id> 
          <phase>prepare-package</phase> 
          <goals> 
           <goal>report</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
    <profile> 
     <id>arq-wildfly</id> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <version>${maven.surefire}</version> 
        <configuration> 
         <skipTests>false</skipTests> 
         <systemPropertyVariables> 
          <arquillian.launch>wildfly-remote</arquillian.launch> 
         </systemPropertyVariables> 
        </configuration> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
    <profile> 
     <id>default</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <build> 
      <plugins> 
       <plugin> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <version>${maven.surefire}</version> 
        <configuration> 
         <skipTests>true</skipTests> 
        </configuration> 
       </plugin> 
       <plugin> 
        <groupId>org.wildfly.plugins</groupId> 
        <artifactId>wildfly-maven-plugin</artifactId> 
        <version>${wildfly.maven-plugin}</version> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles> 

passieren soll Ich verwende mvn, um mein Projekt mit diesen Zielen zu bauen sauberes Paket -fae mit diesen Profilen jacoc o arq-wildfly

Der Build schlägt fehl und die Datei jacoco.exec wird in meinem Zielverzeichnis erstellt.

Wenn ich das Ziel prepare-Agent im jacoco Profil und führen Sie den gleichen MVN-Befehl (sauber Paket -fae) mit den Profilen jacoco ARQ-Wildfly alle meine Tests entfernen beenden erfolgreich, aber ohne die Schaffung jacoco.exe Datei.

Was mache ich falsch? Hat jemand ein funktionierendes Beispiel mit Arquillian mit Drone/Graphene Tests und Jacoco für die Codeabdeckung?

Weitere Informationen zu meiner Umgebung:

  • Wildfly 10
  • Arquillian Kern 1.1.11.Final
  • Arquillian Drone 1.3.1.Final
  • Arquillian Graphene 2.1.0.Beta1
  • Arquillian Jacoco 1.0.0.Alpha8
  • Jacoco 0.7.6.201602180812

Antwort

5

Sie haben eine multiple asm-Version auf Ihrem Klassenpfad, jacoco benötigt die neueste Version.

Verwenden mvn dependency:tree die asm-Versionen zu finden, ich glaube, Sie asm haben: asm und org.ow2.asm: asm-debug-all in Ihren Abhängigkeiten.

ausschließen die alte Version (asm: asm) mit der folgenden für die Abhängigkeit, die asm benötigt:

<dependency> 
    <groupId>...</groupId> 
    <artifactId>...</artifactId> 
    <exclusions> 
     <exclusion> 
      <artifactId>asm</artifactId> 
      <groupId>asm</groupId> 
     </exclusion> 
    </exclusions> 
</dependency> 

Für Drohne wäre es so etwas wie dieses:

<dependency> 
    <groupId>org.jboss.arquillian.graphene</groupId> 
    <artifactId>graphene-webdriver</artifactId> 
    <type>pom</type> 
    <scope>test</scope> 
    <exclusions> 
     <exclusion> 
      <artifactId>asm</artifactId> 
      <groupId>asm</groupId> 
     </exclusion> 
    </exclusions> 
</dependency>