Tengo un maven multi-módulo de proyecto y estoy usando jacoco-maven para informes de cobertura de código. Algunas clases no deben ser reportadas, como son la Primavera de configuración y yo no estoy interesado en ellos.

He declarado el maven-jacoco plugin como sigue:

<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.2.201409121644</version>
<configuration>
    <outputDirectory>${project.reporting.outputDirectory}/jacoco-ut</outputDirectory>
    <exclude>some.package.*</exclude>
    <exclude>**/*Config.*</exclude>
    <exclude>**/*Dev.*</exclude>
    <exclude>some/package/SomeClass.java</exclude>
</configuration>
<executions>
    <execution>
        <goals>
            <goal>prepare-agent</goal>
        </goals>
    </execution>
    <execution>
        <id>report</id>
        <phase>prepare-package</phase>
        <goals>
            <goal>report</goal>
        </goals>
    </execution>
    <execution>
        <id>post-unit-test</id>
        <phase>test</phase>
        <goals>
            <goal>report</goal>
        </goals>
    </execution>
</executions>
</plugin>

El problema es que cuando ejecuto mvn clean verify jacoco todavía los informes de las clases que debería haber sido excluido como mi xml de configuración de los puntos de salida. ¿Cómo puedo configurar correctamente?

InformationsquelleAutor resilva87 | 2015-01-06

7 Comentarios

  1. 138

    El XML está un poco mal, necesita añadir alguna clase de exclusiones dentro de un excluye a los padres de campo, por lo que su configuración anterior debe tener el siguiente aspecto como por el Jacoco docs

    <configuration>
        <excludes>
            <exclude>**/*Config.*</exclude>
            <exclude>**/*Dev.*</exclude>
        </excludes>
    </configuration>

    Los valores de la exclusión de los campos debe ser de la clase de caminos (no se los nombres de los paquetes) de las clases compiladas en relación con el directorio de destino/clases/utilizando el estándar de sintaxis de comodín

    *   Match zero or more characters
    **  Match zero or more directories
    ?   Match a single character

    También puede excluir un paquete y todos sus niños/subpaquetes de esta manera:

    <exclude>some/package/**/*</exclude>

    Esta forma, se excluye cada clase en some.package, así como a cualquier niño. Por ejemplo, some.package.child no ser incluidos en los informes.

    He probado y a mi informe de informes objetivos sobre un número reducido de clases utilizando el anterior.

    Si, a continuación, empujando el presente informe a Sonar, entonces usted tendrá que decirle a Sonar para excluir a estas clases en la pantalla que se puede hacer en la configuración del Sónar

    Ajustes > General Settings > Exclusiones > la Cobertura de Código

    Sonar Docs explica un poco más

    De ejecutar el comando anterior

    mvn clean verify

    Se muestran las clases han sido excluidos

    Sin exclusiones,

    [INFO] --- jacoco-maven-plugin:0.7.4.201502262128:report (post-test) @ ** ---
    [INFO] Analyzed bundle '**' with 37 classes

    Con exclusiones

    [INFO] --- jacoco-maven-plugin:0.7.4.201502262128:report (post-test) @ ** ---
    [INFO] Analyzed bundle '**' with 34 classes

    Espero que esto ayude

    • Tuve que actualizar el Jacoco plugin de la versión 0.7.5 a 0.7.6 para obtener el excluir a ser tomado en cuenta.
    • Por el camino. te gustaría tener una idea sobre la visualización de mis pruebas en el jacoco-que carpeta ? stackoverflow.com/questions/37485133/…
    • Me pregunto cómo excluir, no el código fuente de las clases, pero las clases de prueba.
    • Gran consejo con respecto a Sonar. Fácil suponer que JaCoCo exclusiones se automágicamente propagarse a Sonar (como hice yo).
    • Si yo excluir un archivo de forma jacoco se muestra en el informe de la cobertura con 0% de cobertura. Así que, básicamente, puedo obtener peores resultados en comparación con los no excluir. Este puede ser fijo?
    • Recuerde utilizar la barra entre los nombres de archivo y no de punto. También, el archivo final es .clase y no .java.
    • Si usted tiene un informe con 0% de cobertura probablemente se perdió la configuración de los informes.También se excluye de la sección.
    • estoy usando sonar-escáner con sonar-proyecto de la proposición de archivos para capturar jacoco informe, pero en realidad cuando yo uso esta opción en mi pom para excluir a algunas clases, la cobertura de código en el sonar no considerar la posibilidad de que, pero en la construcción considerar que para qué !!

  2. 10

    A pesar de que Andrew ya respondió a la pregunta con detalles , me estoy dando el código de cómo excluir en pom

               <plugin>
                    <groupId>org.jacoco</groupId>
                    <artifactId>jacoco-maven-plugin</artifactId>
                    <version>0.7.9</version>
                    <configuration>
                        <excludes>
                            <exclude>**/*com/test/vaquar/khan/HealthChecker.class</exclude>
                        </excludes>
                    </configuration>
                    <executions>
                        <!-- prepare agent for measuring integration tests -->
                        <execution>
                            <id>jacoco-initialize</id>
                            <goals>
                                <goal>prepare-agent</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>jacoco-site</id>
                            <phase>package</phase>
                            <goals>
                                <goal>report</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>

    Para Springboot aplicación

    <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>sonar-maven-plugin</artifactId>
                </plugin>
                <plugin>
                    <groupId>org.sonarsource.scanner.maven</groupId>
                    <artifactId>sonar-maven-plugin</artifactId>
                </plugin>
                <plugin>
                    <groupId>org.jacoco</groupId>
                    <artifactId>jacoco-maven-plugin</artifactId>
                    <configuration>
                        <excludes>
                           <!-- Exclude class from test coverage -->
                            <exclude>**/*com/khan/vaquar/Application.class</exclude>
                            <!-- Exclude full package from test coverage -->
                            <exclude>**/*com/khan/vaquar/config/**</exclude>
                        </excludes>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    • HOLA Vaquar, he estado golpeando mi cabeza para la exclusión de paquete a través de jacoco plugin de maven. No quiero mostrar Excluidos de los paquetes en Index.html que es creado.. si tienes el código con el que puedes hacer el mismo, tenga la amabilidad de ayudarme con ello. Me envían el código en [email protected]
    • Parece que la ruta de clase debe ser sin .class final, tales como: <exclude>**/*com/test/vaquar/khan/HealthChecker</exclude>
    • Esto elimina el paquete completo del informe para mí: <exclude>com/mycompany/mypackage/**/*</exclude>
  3. 3

    https://github.com/jacoco/jacoco/issues/34

    Estos son los diferentes notaciones para las clases tenemos:

    • Nombre de máquina virtual: java/util/Mapa de$Entrada
    • Java Nombre: java.util.Mapa De$Archivo De Entrada De
    • Nombre: java/util/Mapa de$Entry.class

    Agente de Parámetros, tareas Ant y Maven preparar el agente objetivo

    • incluye: Java Nombre de (Nombre de máquina virtual también funciona)
    • excluye: Java Nombre de (Nombre de máquina virtual también funciona)
    • exclclassloader: Java Nombre

    Estas especificaciones permiten que los comodines * y ?, donde * comodín de cualquier número de caracteres, incluso varias carpetas anidadas.

    Maven informe objetivo

    • incluye: Nombre de Archivo
    • excluye: Nombre de Archivo

    Estas especificaciones permiten Hormiga Filespec como caracteres comodín *, ** y ?, donde * comodines partes de un solo camino solo elemento.

  4. 3

    Otra solución:

    <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <version>0.7.5.201505241946</version>
        <executions>
            <execution>
                <id>default-prepare-agent</id>
                <goals>
                    <goal>prepare-agent</goal>
                </goals>
            </execution>
            <execution>
                <id>default-report</id>
                <phase>prepare-package</phase>
                <goals>
                    <goal>report</goal>
                </goals>
            </execution>
            <execution>
                <id>default-check</id>
                <goals>
                    <goal>check</goal>
                </goals>
                <configuration>
                    <rules>
                        <rule implementation="org.jacoco.maven.RuleConfiguration">
                            <excludes>
                                <exclude>com.mypackage1</exclude
                                <exclude>com.mypackage2</exclude>
                            </excludes>
                            <element>PACKAGE</element>
                            <limits>
                                <limit implementation="org.jacoco.report.check.Limit">
                                    <counter>COMPLEXITY</counter>
                                    <value>COVEREDRATIO</value>
                                    <minimum>0.85</minimum>
                                </limit>
                            </limits>
                        </rule>
                    </rules>
                </configuration>
            </execution>
        </executions>
    </plugin>

    Por favor, tenga en cuenta que estamos utilizando "<element>PACKAGE</element>" en la configuración que a continuación nos ayuda a excluir a nivel de paquete.

    • Estoy usando jacoco-maven-plugin:0.7.9. Con su solución, se calcula correctamente los resultados. Sin embargo, todas las clases en el proyecto se muestran en el jacoco informe (index.html). Es posible mostrar en el informe sólo lo que el plugin se ha analizado con el fin de tener el valor real de cubiertas ratio?
  5. 3

    Uso de una sonda.de la cobertura.exclusiones de la propiedad.

    mvn clean install -Dsonar.coverage.exclusions=**/*ToBeExcluded.java

    Esto debe excluir a las clases de cobertura de cálculo.

  6. 2

    puede configurar la cobertura de exclusión en el sonar de las propiedades, en las afueras de la configuración de la jacoco plugin:

    ...
    <properties>
        ....
        <sonar.exclusions>
            **/generated/**/*,
            **/model/**/*
        </sonar.exclusions>
        <sonar.test.exclusions>
            src/test/**/*
        </sonar.test.exclusions>
        ....
        <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
        <sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath>
        <sonar.coverage.exclusions>
            **/generated/**/*,
            **/model/**/*
        </sonar.coverage.exclusions>
        <jacoco.version>0.7.5.201505241946</jacoco.version>
        ....
    </properties>
    ....

    y recuerde que para eliminar la exclusión de configuración del plugin

  7. 1

    Aquí está la muestra de trabajo en pom.xml archivo.

        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>${jacoco.version}</version>
    
    
            <executions>
                <execution>
                    <id>prepare-agent</id>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                </execution>
                <execution>
                    <id>post-unit-test</id>
                    <phase>test</phase>
                    <goals>
                        <goal>report</goal>
                    </goals>
    
                </execution>
    
                <execution>
                    <id>default-check</id>
                    <goals>
                        <goal>check</goal>
                    </goals>
    
                </execution>
            </executions>
            <configuration>
                <dataFile>target/jacoco.exec</dataFile>
                <!-- Sets the output directory for the code coverage report. -->
                <outputDirectory>target/jacoco-ut</outputDirectory>
                <rules>
                    <rule implementation="org.jacoco.maven.RuleConfiguration">
                        <element>PACKAGE</element>
                        <limits>
                            <limit implementation="org.jacoco.report.check.Limit">
                                <counter>COMPLEXITY</counter>
                                <value>COVEREDRATIO</value>
                                <minimum>0.00</minimum>
                            </limit>
                        </limits>
                    </rule>
                </rules>
                <excludes>
                    <exclude>com/pfj/fleet/dao/model/**/*</exclude>
                </excludes>
                <systemPropertyVariables>
    
                    <jacoco-agent.destfile>target/jacoco.exec</jacoco-agent.destfile>
                </systemPropertyVariables>
            </configuration>
        </plugin>

Dejar respuesta

Please enter your comment!
Please enter your name here