Покрытие кода 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 (как я должен был делать в прошлом).

Другие вопросы по тегам