Próbuję wygenerować dane pokrycia testu jednostkowego sonaru dla wielomodułowego projektu maven i nie uzyskać poprawnych wyników.Nie można uzyskać sonaru do przetwarzania plików jacoco exec dla wielomodułowego projektu maven
Struktura projekt jest podobny do następującego:
- projektu
- parentPom
- moduleA
- moduleB
- moduł B1
- Moduł B2
- moduł C
Używam Maven jacoco plugin do generowania jacoco.exec
pliki, a sonar Maven plugin do analizy kodu (w tym jacoco.exec
plików).
Pliki te są generowane w fazie process-tests
, co następuje:
<properties>
<jacoco.report.path>${project.build.directory}/jacoco.exec</jacoco.report.path>
<sonar.jacoco.reportPath>${jacoco.report.path}</sonar.jacoco.reportPath>
</properties>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.4.201502262128</version>
<executions>
<execution>
<id>default-prepare-agent</id>
<phase>process-test-classes</phase>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<destFile>${jacoco.report.path}</destFile>
</configuration>
</execution>
</executions>
</plugin>
Kiedy biegnę mvn czystej instalacji widzę, że tam jest jacoco.exec
plik stworzony dla każdego modułu:
$ find . -name '*.exec'
./moduleA/target/jacoco.exec
./moduleB/moduleB1/target/jacoco.exec
./moduleB/moduleB2/target/jacoco.exec
./moduleC/target/jacoco.exec
Po uruchomieniu mvn sonar: sonar Widzę, że czujnik Jacoco działa dla wszystkich modułów, ale tylko wydaje się działać z pierwszym modułem. Kolejne moduły pokazać Coverage information was not collected
:
[INFO] [17:13:58.333] Sensor JaCoCoSensor
[INFO] [17:13:58.350] Analysing moduleA\target\jacoco.exec
[INFO] [17:13:58.374] No information about coverage per test.
[INFO] [17:13:58.374] Sensor JaCoCoSensor (done) | time=41ms
...
[INFO] [17:14:02.202] Sensor JaCoCoSensor
[INFO] [17:14:02.261] Analysing moduleB\moduleB1\target\jacoco.exec
[WARN] [17:14:02.334] Coverage information was not collected. Perhaps you forget to include debug information into compiled classes?
[INFO] [17:14:02.334] Sensor JaCoCoSensor (done) | time=132ms
...
Nie jestem pewien, dlaczego nie ma informacji pokrycia w drugim i kolejnych modułów, ponieważ maven-compiler-plugin
zawiera informacje debugowania domyślnie i pewności Ja również prowadził mvn clean install -Dmaven.compiler.debug=true
ale mam takie same wyniki .
W konsekwencji, gdy sprawdzam projekt na serwerze sonaru, pokazuje on zasięg kodu tylko dla pierwszego modułu: moduleA
. Brak informacji o zasięgu kodu dla pozostałych modułów.
Najwyraźniej rozwiązaniem jest wygenerowanie tylko jednego pliku jacoco.exec
, tak aby po wykonaniu jacoco-maven-plugin
dołączał on wynik dla każdego modułu do tego pliku, aby sonar mógł poprawnie wykonywać swoją magię.
związku z tym, że zmodyfikowane mój plik parentPom/pom.xml
następująco:
<properties>
<!-- single jacoco.exec file relative to root directory of the project -->
<jacoco.report.path>${session.executionRootDirectory}/code-coverage/jacoco.exec</jacoco.report.path>
<sonar.jacoco.reportPath>${jacoco.report.path}</sonar.jacoco.reportPath>
</properties>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.4.201502262128</version>
<executions>
<execution>
<id>default-prepare-agent</id>
<phase>process-test-classes</phase>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<destFile>${jacoco.report.path}</destFile>
<append>true</append> <!-- now appending to single jacoco.exec file -->
</configuration>
</execution>
</executions>
</plugin>
To oznacza, że po testy jednostkowe został uruchomiony agent jacaco jest wywoływana Teraz gdy uruchamiam mvn czystej instalacji widzę tylko jedną jacoco.exec
plik:
$ find . -name '*.exec'
./code-coverage/target/jacoco.exec
Ale kiedy biegnę mvn sonar: sonarJaCoCoSe nsor nie wydaje się być wywoływany, a projekt na serwerze sonaru w ogóle nie ma zasięgu.
Co ja tu robię źle? Jak uzyskać sonar do analizy zasięgu kodu dla wszystkich modułów w moim projekcie maven?
Czy muszę w jakiś sposób zmodyfikować maven-surefire-plugin
?
Używam SonarQube JDK 5.1, 1.8, jacoco-maven-plugin czujnik 0.7.4.201502262128