What is the proper way to use Cobertura with Maven 3.0.2

31,617

Solution 1

I successfully integrated Cobertura in my projects with adding this:

  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>cobertura-maven-plugin</artifactId>
        <version>2.4</version>
        <configuration>
          <instrumentation>
            <includes>
              <include>foo/bar/**/*.class</include>
            </includes>
          </instrumentation>
        </configuration>
    <executions>
      <execution>
        <id>clean</id>
        <phase>pre-site</phase>
        <goals>
          <goal>clean</goal>
        </goals>
      </execution>
      <execution>
        <id>instrument</id>
        <phase>site</phase>
        <goals>
          <goal>instrument</goal>
          <goal>cobertura</goal>
        </goals>
      </execution>
    </executions>
      </plugin>
    </plugins>
  </build>

  <reporting>
    <plugins>
      <plugin>
    <!-- use mvn cobertura:cobertura to generate cobertura reports -->
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>cobertura-maven-plugin</artifactId>
    <version>2.4</version>
    <configuration>
      <formats>
        <format>html</format>
        <format>xml</format>
      </formats>
     </configuration>
      </plugin>
    </plugins>
  </reporting>

If you run mvn cobertura:cobertura the reports will be generated in target\site\cobertura. See also maven cobertura plugin.


Today I analyze projects with SonarQube. It has an easy installation step (if you are not interested in using an enterprise database) and also includes a code coverage analysis (using JaCoCo) among many other metrics.

Solution 2

In maven 3.0.3 (not yet out when you asked the question), simply use maven's site plug-in and configure it such that it uses cobertura, as follows:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-site-plugin</artifactId>
            <version>3.0</version>
            <configuration>
                <reportPlugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>cobertura-maven-plugin</artifactId>
                        <version>2.5.1</version>
                        <configuration>
                            <formats>
                                <format>html</format>
                                <format>xml</format>
                            </formats>
                        </configuration>
                    </plugin>
                </reportPlugins>
            </configuration>
        </plugin>
....

Solution 3

You can also integrate the Cobertura plugin in the <reporting> section of your webapp:

  <reporting>
    <outputDirectory>${project.build.directory}/site</outputDirectory>
    <plugins>
      <!-- Maven Project Info Reports Plugin -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-project-info-reports-plugin</artifactId>
        <version>2.7</version>
        <configuration>
          <dependencyLocationsEnabled>false</dependencyLocationsEnabled>
        </configuration>
      </plugin>
      <!-- Cobertura Code Coverage Plugin -->
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>cobertura-maven-plugin</artifactId>
        <version>2.6</version>
        <configuration>
          <instrumentation>
            <ignoreTrivial>true</ignoreTrivial>
          </instrumentation>
          <formats>
            <format>html</format>
            <format>xml</format>
          </formats>
        </configuration>
      </plugin>
    </plugins>
  </reporting>

If you run mvn site, then your report will be available in target/site/cobertura/index.html within the target directory of your application.

Share:
31,617
juancn
Author by

juancn

Updated on July 09, 2022

Comments

  • juancn
    juancn almost 2 years

    I have been trying unsuccessfully for the last few days to run Cobertura 2.4 with Maven 3.0.2. We have a very large project with many modules (sub-projects). What I found is that documentation is basically non-existent or plain wrong. All tutorials I was able to find don't work with Maven 3.x (they build, but Cobertura either doesn't run or cannot generate the reports).

    Has anyone here been able to make it work? Any useful tips/examples? Thanks.

  • Mark O'Connor
    Mark O'Connor almost 13 years
    Yes Sonar is the way to go. No changes to your project POM required
  • Ryan Stewart
    Ryan Stewart almost 13 years
    Sonar is awesome, but it's also nice to be able to generate coverage reports without a full Sonar analysis.
  • FrVaBe
    FrVaBe almost 13 years
    @Ryan Stewart Because Sonar gives you information about your product you never wanted to know :-)?
  • Ryan Stewart
    Ryan Stewart almost 13 years
    +1 for the lol. My team likes to have coverage reports on every CI build. Sonar increases the build time about 2.5x, so we only run it nightly. Cobertura alone is only a small increase in build time, so we run it per version control change.
  • juancn
    juancn almost 13 years
    We're using sonar, but it runs nightly. What I was looking for was general guidelines on how to integrate it for everyday use. So far, the best way as far as I know, is basically do nothing and run mvn cobertura:cobertura to generate it. Your answer so far has been the best.
  • FrVaBe
    FrVaBe almost 13 years
    @juancn Integration of code coverage tools in the IDE would be the best for everyday use - I tried ecobertura and EclEmma a bit and remember that they worked both well.
  • Benny Neugebauer
    Benny Neugebauer almost 13 years
    Cobertura Report generation was successful. Thank you very much! To give my two cents I want to say, that you can also use the <exclude> tag within the <instrumentation> tag. It may be easier to exclude the files, which should not be analyzed, than to include the files you want to have analyzed.
  • A Gupta
    A Gupta about 10 years
    how could we initiate it through pluginExecution in maven ? any guess ?
  • matt freake
    matt freake about 8 years
    Just installing and running Sonar does not generate any Cobertura coverage reports for me
  • FrVaBe
    FrVaBe about 8 years
    @matt freake Meanwhile SonarQube changed the coverage tool and now uses Jacoco. You should see the results in the project dashboard.
  • asur
    asur almost 7 years
    @FrVaBe I have a multi module project, Module A and B has Intgrtn Tests and Module C,D and E have unit test cases. How should I use cobertura. I used cobertura-integration-test and cobertura:cobertura but no luck. Do I need to add above plugin in Module A and B pom files as well?
  • FrVaBe
    FrVaBe almost 7 years
    @Kally You should take a look at questions that handle Cobertura on Multi Module projects like this one. I myself have no experience on that, sorry.
  • PRATHAP S
    PRATHAP S almost 7 years
    Is there any way to generate Cobertura reports on mvn clean install command instead of mvn cobertura:cobertura, When I changed the executions- phase as test and goal as cobertura, it works but it is running test cases twice, any idea on this?