Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sonar (jacoco) + jmockit spamming with exceptions

I'm facing a error which starting to be really irritating.
Here is what I have: 1) Sonar 3.5 which uses JaCoCo as coverage tool. 2) Jmockit lib to perform testing with use of mocks. 3) Build process automized with maven.

So when I run first mvn clean install which is ok and then I'm running mvn sonar:sonar and what is happening here:

  • Jmockit seems to instrument classes it need.
  • JaCoCo can not instrument classes which is already instrumented by Jmockit and spits out a HUGE amount of exceptions, saying that it's impossible to instrument class, which were already instrumented. However Sonar seems to have a valid output for such a scenario.
    So first question is: can I somehow suppress such an exceptions? It is really critical because the size of the log file on our CI system achieves 50Mb (!), which is not acceptable. A lot of free space is just eaten up by such a logs on our CI machine.

Here are the exceptions I've got:

java.lang.instrument.IllegalClassFormatException: Error while instrumenting class app/MyClass.
Caused by: java.lang.IllegalStateException: Class app/MyClass is already instrumented.

Assuming that suppression of such an exceptions is impossible I investigated it a little bit and found out that JaCoCo (a tool, which Sonar uses and a tool, which can't instrument already instrumented classes) have such a mode as offline instrumentation (AFAIK Sonar neither support this offline instrumentation or can suppress such a warnings). This thing is designed to be used exactly for such a cases. So I tried to set up JaCoCo as a plugin in maven, but I failed to do this cause JaCoCo can't find some execution file. When I'm running mvn clean install the following error pops up:

[INFO] --- jacoco-maven-plugin:0.6.2.201302030002:report (report) @ webservice-mws --- [INFO] Skipping JaCoCo execution due to missing execution data file

If I'm not mistaken this execution file is the RESULT of the JaCoCo plugin. I'm totally frustrated and do not know what to do with this.

If somebody can help me with that it will be greatly appreciated!
Thanks in advance!

my pom.xml settings for JaCoCo plugin:

             <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>
like image 338
mr.nothing Avatar asked May 31 '13 10:05

mr.nothing


1 Answers

You may use Cobertura as your code coverage on Sonar 3.5.1.

To change it:

  1. Login as admin
  2. Go to Settings > Configuration
  3. In General Settings Category > Java
  4. Set Code coverage plugin = cobertura

Worked like charm on my project ^_-

like image 185
jjcosare Avatar answered Sep 23 '22 21:09

jjcosare