我有一个带有一些Arquillian测试的maven项目(包括无人机/石墨烯测试)。
当我使用maven构建我的项目时,所有使用Graphene和Drone或Warp的Arquillian测试将失败并出现以下异常
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
这是魔法应该发生的地方
<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>
我使用mvn使用此配置文件 clean package -fae 构建我的项目 jacoco arq-wildfly
构建失败,并在目标目录中创建jacoco.exec文件。
如果我删除了jacoco个人资料中的目标 prepare-agent ,并使用个人资料 jacoco arq-运行相同的mvn命令( clean package -fae ) wildfly 我的所有测试都成功完成但没有创建jacoco.exec文件。
我做错了什么?是否有人使用Arquillian与Drone / Graphene测试和Jacoco进行代码覆盖?
有关我的环境的其他信息:
答案 0 :(得分:5)
你的类路径上有多个asm版本,jacoco需要最新版本。
使用mvn dependency:tree
查找asm版本,我认为您的 asm:asm 和 org.ow2.asm:asm-debug-all 的依赖关系。
使用以下内容排除旧版本(asm:asm)以获取需要asm的依赖项:
<dependency>
<groupId>...</groupId>
<artifactId>...</artifactId>
<exclusions>
<exclusion>
<artifactId>asm</artifactId>
<groupId>asm</groupId>
</exclusion>
</exclusions>
</dependency>
对于无人机,它将是这样的:
<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>