Покрытие кода Sonar Maven Jacoco для многомодульного проекта
У меня есть многомодульный проект с родительским pom.xml и двумя модулями. Project.jar и Project.war. Все тестовые случаи находятся в Project.jar. Когда я запускаю mvn sonar.sonar goal для Parent pom, jacoco.exec не генерируется, и покрытие кода пустое. У меня есть следующие свойства в родительском пом.
<properties>
<sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
<sonar.jacoco.reportPath>${project.basedir}/target/jacoco.exec</sonar.jacoco.reportPath>
</properties>
Пожалуйста помоги. Я использую Sonarqube 4.2.
2 ответа
Начиная с версии 2.4 плагина Java, вы должны сгенерировать отчет о покрытии, прежде чем запускать анализ SonarQube. Вы можете увидеть эту страницу http://docs.codehaus.org/display/SONAR/JaCoCo+Plugin о том, как это сделать.
Для тех, у кого есть подобная проблема, я решил эту проблему немного по-другому (где я запускаю ее из командной строки, а Дженкинс не делает этого). У меня не было проблемы с плагинами.
Все эти настройки определены в родительском POM. Я использую следующую версию:
<plugin.jacoco.version>0.7.2.201409121644</plugin.jacoco.version>
Путь к отчету немного отличается, поэтому создается только один файл jacoco.exec. По умолчанию Sonar будет добавлять результаты вместе, если файл уже существует.
<sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath>
В разделе pluginManagement у меня есть следующий плагин:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${plugin.jacoco.version}</version>
<configuration>
<destFile>${sonar.jacoco.reportPath}</destFile>
</configuration>
<executions>
<execution>
<id>agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
</executions>
</plugin>
Затем в разделе плагинов я убедился, что плагин доступен для всего проекта:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
</plugin>
Как отметил Бензонико, перед анализом сонара необходимо выполнить тесты, которые я делаю следующим образом:
mvn clean test sonar:sonar
Мне не нужно было вносить какие-либо изменения в плагин Surefire (как я должен был делать в прошлом).