Конфигурация Maven Jacoco-исключить классы / пакеты из отчета не работает
у меня есть многомодульный проект maven, и я использую jacoco-maven для отчетов о покрытии кода. Некоторые классы не должны быть сообщены, так как они Весенняя конфигурация, и я не заинтересован в них.
Я объявил плагин maven-jacoco следующим образом:
<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>
проблема в том, что когда я выполнить mvn clean verify jacoco по-прежнему сообщает о классах, которые должны были быть исключены, как указывает моя конфигурация xml. Как я могу настроить его правильно?
7 ответов:
ваш XML немного ошибочен, вам нужно добавить любые исключения классов в родительское поле excludes, поэтому ваша конфигурация выше должна выглядеть следующим образом в соответствии с Jacoco docs
<configuration> <excludes> <exclude>**/*Config.*</exclude> <exclude>**/*Dev.*</exclude> </excludes> </configuration>значения полей exclude должны быть путями классов (а не именами пакетов) скомпилированных классов относительно целевого каталога/classes/ с использованием стандартного синтаксиса подстановочных знаков
* Match zero or more characters ** Match zero or more directories ? Match a single characterвы также можете исключить пакет и все его дети/подпакеты таким образом:
<exclude>some/package/**/*</exclude>это исключит каждый класс в
some.package, как и любые дети. Например,some.package.childне будут включены в отчеты.я протестировал и мой отчет цель отчеты о сниженном количестве классов, используя выше.
если вы затем нажимаете этот отчет в Sonar, вам нужно будет сказать Sonar, чтобы исключить эти классы на дисплее, что можно сделать в Sonar настройки
Настройки > Общие Настройки > Исключения > Покрытие Кода
Sonar Docs объясняет это немного больше
запуск команды выше
mvn clean verifyпокажет классы были исключены
исключения
[INFO] --- jacoco-maven-plugin:0.7.4.201502262128:report (post-test) @ ** --- [INFO] Analyzed bundle '**' with 37 classesС исключения
[INFO] --- jacoco-maven-plugin:0.7.4.201502262128:report (post-test) @ ** --- [INFO] Analyzed bundle '**' with 34 classesнадеюсь, что это помогает
https://github.com/jacoco/jacoco/issues/34
Это разные обозначения для классов у нас есть:
- имя виртуальной машины: java / util / Map$Entry
- имя Java: java.утиль.Карте Запись Файла$
- имя: java / util / Map$Entry.класс
параметры агента, задачи Ant и Maven prepare-цель агента
- включает в себя: имя Java (имя виртуальной машины также работает)
- исключает: Java Имя (имя виртуальной машины также работает)
- exclclassloader: Java Name
эти характеристики позволяют использовать подстановочные знаки * и ?, где * шаблоны любое количество символов, даже несколько вложенных папок.
цель отчета Maven
- включает в себя: имя файла
- исключает: имя файла
эти спецификации позволяют Ant Filespec как подстановочные знаки *, * * и ?, где * подстановочные знаки части только одного элемента пути.
хотя Андрей уже ответил на вопрос с подробностями , я даю код, как исключить его в 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>
другое решение:
<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>обратите внимание, что мы используем
"<element>PACKAGE</element>"в конфигурации, который затем помогает нам исключить на уровне пакета.
использовать сонар.охват.исключения собственности.
mvn clean install -Dsonar.coverage.exclusions=**/*ToBeExcluded.javaэто должно исключить классы из расчета покрытия.
вы можете настроить исключение покрытия в свойствах сонара, вне конфигурации плагина jacoco:
... <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> ....и не забудьте удалить настройки исключения из плагина
вот рабочий образец в .
<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>
Comments