You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@maven.apache.org by David Hoffer <dh...@gmail.com> on 2018/01/30 14:50:09 UTC

jacoco-maven-plugin site generation question

I am using jacoco-maven-plugin v0.8.0 to generate test code coverage
reports (and checks) to the build. This is working fine for normal dev
builds, e.g. mvn clean install.

However we also need to include these reports in the Maven site that is
generated and published that part is not working.

The build is a multi-module build and I see you have a link to some ways of
creating an aggregated report, https://github.com/jacoco/
jacoco/wiki/MavenMultiModule, however I am not to the part yet. Right now
I'm just trying to get it to publish the individual reports in the site
build.

The problem is that the site build is including JaCoCo but its labeled
as JaCoCo
Aggregate on each of the modules (and parent) and each of these point to
'target/site/jacoco-aggregate/index.html' however that folder does not
exist. The actual generated report is at target/site/jacoco-ut/index.html.

How can I configure JaCoCo so that it reports the correct name and location
for each report? I have tried various configuration options in the
reporting section but to no avail. It seems hard coded to use
ReportAggregateMojo when it should use ReportMojo (and optionally
ReportITMojo) and I need to provide the outputDirectory when used
indirectly via the site plugin. I will include my config below.

build...

<plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <executions>
            <!--
    Prepares the property pointing to the JaCoCo runtime agent which
    is passed as VM argument when Maven the Surefire plugin is executed.
-->
            <execution>
                <id>jacoco-pre-unit-test</id>
                <goals>
                    <goal>prepare-agent</goal>
                </goals>
                <configuration>
                    <!-- Sets the path to the file which contains the
execution data. -->

<destFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</destFile>
                    <!--
                        Sets the name of the property containing the settings
                        for JaCoCo runtime agent.
                    -->
                    <propertyName>surefireArgLine</propertyName>
                </configuration>
            </execution>

            <!--
    Ensures that the code coverage report for unit tests is created after
    unit tests have been run.
-->
            <execution>
                <id>jacoco-post-unit-test</id>
                <phase>test</phase>
                <goals>
                    <goal>report</goal>
                    <!--<goal>report-aggregate</goal>-->
                </goals>
                <configuration>
                    <!-- Sets the path to the file which contains the
execution data. -->

<dataFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</dataFile>
                    <!-- Sets the output directory for the code
coverage report. -->

<outputDirectory>${project.reporting.outputDirectory}/jacoco-ut</outputDirectory>
                </configuration>
            </execution>

            <!--Ensures that the build has a minimum level of test coverage-->
            <execution>
                <id>jacoco-check</id>
                <phase>test</phase>
                <goals>
                    <goal>check</goal>
                </goals>
                <configuration>

<dataFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</dataFile>
                    <haltOnFailure>true</haltOnFailure>
                    <rules>
                        <rule
implementation="org.jacoco.maven.RuleConfiguration">
                            <!--BUNDLE, PACKAGE, CLASS, SOURCEFILE or METHOD-->
                            <element>BUNDLE</element>
                            <limits>
                                <limit
implementation="org.jacoco.report.check.Limit">
                                    <!--INSTRUCTION, LINE, BRANCH,
COMPLEXITY, METHOD, CLASS-->
                                    <counter>INSTRUCTION</counter>
                                    <!--TOTALCOUNT, COVEREDCOUNT,
MISSEDCOUNT, COVEREDRATIO, MISSEDRATIO-->
                                    <value>COVEREDRATIO</value>

<minimum>${jacoco.percentage.instruction}</minimum>
                                </limit>
                                <limit
implementation="org.jacoco.report.check.Limit">
                                    <!--INSTRUCTION, LINE, BRANCH,
COMPLEXITY, METHOD, CLASS-->
                                    <counter>BRANCH</counter>
                                    <!--TOTALCOUNT, COVEREDCOUNT,
MISSEDCOUNT, COVEREDRATIO, MISSEDRATIO-->
                                    <value>COVEREDRATIO</value>

<minimum>${jacoco.percentage.branch}</minimum>
                                </limit>
                            </limits>
                        </rule>
                    </rules>
                </configuration>
            </execution>

            <!-- The Executions required by unit tests are omitted. -->
            <!--
                Prepares the property pointing to the JaCoCo runtime agent which
                is passed as VM argument when Maven the Failsafe
plugin is executed.
            -->
            <execution>
                <id>jacoco-pre-integration-test</id>
                <phase>pre-integration-test</phase>
                <goals>
                    <goal>prepare-agent</goal>
                </goals>
                <configuration>
                    <!-- Sets the path to the file which contains the
execution data. -->
                    <destFile>${jacoco.it.execution.data.file}</destFile>
                    <!--
                        Sets the name of the property containing the settings
                        for JaCoCo runtime agent.
                    -->
                    <propertyName>failsafeArgLine</propertyName>
                </configuration>
            </execution>
            <!--
                Ensures that the code coverage report for integration
tests after
                integration tests have been run.
            -->
            <execution>
                <id>jacoco-post-integration-test</id>
                <phase>post-integration-test</phase>
                <goals>
                    <goal>report</goal>
                    <!--<goal>report-integration</goal>-->
                </goals>
                <configuration>
                    <!-- Sets the path to the file which contains the
execution data. -->
                    <dataFile>${jacoco.ut.execution.data.file}</dataFile>
                    <!-- Sets the output directory for the code
coverage report. -->

<outputDirectory>${project.reporting.outputDirectory}/jacoco-it</outputDirectory>
                </configuration>
            </execution>

        </executions>
    </plugin>

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.15</version>
        <configuration>
            <!-- Sets the VM argument line used when unit tests are run. -->
            <argLine>${surefireArgLine}</argLine>
            <!-- Skips unit tests if the value of skip.unit.tests
property is true -->
            <skipTests>${skip.unit.tests}</skipTests>
            <!-- Excludes integration tests when unit tests are run. -->
            <excludes>
                <exclude>**/IT*.java</exclude>
            </excludes>
        </configuration>
    </plugin>

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-plugin</artifactId>
        <version>2.15</version>
        <executions>
            <!--
                Ensures that both integration-test and verify goals of
the Failsafe Maven
                plugin are executed.
            -->
            <execution>
                <id>integration-tests</id>
                <goals>
                    <goal>integration-test</goal>
                    <goal>verify</goal>
                </goals>
                <configuration>
                    <!-- Sets the VM argument line used when
integration tests are run. -->
                    <argLine>${failsafeArgLine}</argLine>
                    <!--
                        Skips integration tests if the value of
skip.integration.tests property
                        is true
                    -->
                    <skipTests>${skip.integration.tests}</skipTests>
                </configuration>
            </execution>
        </executions>
    </plugin>

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-site-plugin</artifactId>
        <version>3.7</version>
    </plugin>


reporting...

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.0</version>
</plugin>


Note I'm not running IT tests yet. But ideally when we do I'd like to be
able to publish both sets of reports in the site.


My command line to generate the site is mvn clean package site

-Dave