我正面临一个开始真正恼人的错误。
这是我所拥有的:
1) 使用 JaCoCo 作为覆盖工具的 Sonar 3.5。
2) Jmockit lib 使用模拟执行测试。
3) 使用 maven 自动化构建过程。
所以当我首先运行 mvn clean install
时没问题,然后我运行 mvn sonar:sonar
以及这里发生的事情:
- Jmockit 似乎可以检测它需要的类。
- JaCoCo 无法检测已经由 Jmockit 检测的类,并吐出大量异常,表示不可能检测已经检测过的类。
然而, Sonar 似乎对这种情况有有效的输出。
所以第一个问题是:我能以某种方式抑制这样的异常吗?这真的很关键,因为我们 CI 系统上的日志文件大小达到50Mb
(!),这是 Not Acceptable 。在我们的 CI 机器上,大量的可用空间被这样的日志吃掉了。
以下是我遇到的异常(exception)情况:
java.lang.instrument.IllegalClassFormatException: Error while instrumenting class app/MyClass.
Caused by: java.lang.IllegalStateException: Class app/MyClass is already instrumented.
假设抑制这样的异常是不可能的,我稍微调查了一下,发现 JaCoCo(Sonar 使用的一个工具和一个不能检测已经检测过的类的工具)有这样的模式 离线检测
(AFAIK Sonar 既不支持此离线检测
,也不能抑制此类警告)。这个东西就是专门为这种情况而设计的。所以我尝试将 JaCoCo 设置为 Maven 中的插件,但我没有这样做,因为 JaCoCo 找不到一些执行文件。当我运行 mvn clean install
时,弹出以下错误:
[INFO] --- jacoco-maven-plugin:0.6.2.201302030002:report (report) @ webservice-mws --- [INFO] Skipping JaCoCo execution due to missing execution data file
如果我没记错的话,这个执行文件是 JaCoCo 插件的结果。我非常沮丧,不知道该怎么办。
如果有人能帮助我,我将不胜感激!
提前致谢!
JaCoCo 插件的 pom.xml 设置:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.6.2.201302030002</version>
<executions>
<execution>
<phase>process-test-resources</phase>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>verify</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
最佳答案
您可以使用 Cobertura 作为 Sonar 3.5.1 上的代码覆盖率。
改变它:
- 以管理员身份登录
- 转到“设置”>“配置”
- 在常规设置类别 > Java
- 设置代码覆盖插件 = cobertura
在我的项目上表现出色 ^_-
关于java - Sonar (jacoco)+ jmockit 垃圾邮件有异常(exception),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16855717/