我正面临一个开始非常恼人的错误。
这是我所拥有的: 1) Sonar 3.5,它使用 JaCoCo 作为覆盖工具。2) Jmockit lib 使用模拟执行测试。3) 使用 maven 自动化构建过程。
因此,当我首先运行时mvn clean install
,这没关系,然后我正在运行mvn sonar:sonar
,这里发生了什么:
- Jmockit 似乎提供了它需要的类。
- JaCoCo 无法检测已经被 Jmockit 检测的类并吐出大量异常,说不可能检测已经检测的类。然而,Sonar 似乎对这种情况有一个有效的输出。
所以第一个问题是:我能以某种方式抑制这样的例外吗?这真的很关键,因为我们的 CI 系统上的日志文件大小达到50Mb
(!),这是不可接受的。我们的 CI 机器上的此类日志会占用大量可用空间。
以下是我遇到的例外情况:
java.lang.instrument.IllegalClassFormatException: Error while instrumenting class app/MyClass.
Caused by: java.lang.IllegalStateException: Class app/MyClass is already instrumented.
假设抑制这种异常是不可能的,我对其进行了一些调查,发现 JaCoCo(Sonar 使用的一个工具和一个不能检测已经检测过的类的工具)具有这样的模式offline instrumentation
(AFAIK Sonar既不支持这offline instrumentation
或可以抑制这样的警告)。这个东西被设计用于这种情况。所以我尝试将 JaCoCo 设置为 maven 中的插件,但我没有这样做,因为 JaCoCo 找不到某些执行文件。当我运行时mvn clean install
,会弹出以下错误:
[INFO] --- jacoco-maven-plugin:0.6.2.201302030002:report (report) @ webservice-mws --- [INFO] 由于缺少执行数据文件而跳过 JaCoCo 执行
如果我没记错的话,这个执行文件是 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>