Быстрый ответ
Заменить mvn test
на mvn verify
. Не требуется явного объявления настроек.
Мой процесс расследования
Я пытался выполнить сборки с явными значениями настроек по умолчанию.
1) Явное значение по умолчанию устаревшей настройки: -Dsonar.jacoco.reportPaths=target/jacoco.exec
.
Это приводит к следующему журналу, указывающему, что эта настройка больше не будет работать для нового сонара:
[INFO] Sensor JaCoCo XML Report Importer [jacoco] (done) | time=57ms
[INFO] Sensor SurefireSensor [java]
[INFO] parsing [/builds/myProject/target/surefire-reports]
[INFO] Sensor SurefireSensor [java] (done) | time=23ms
[INFO] Sensor Removed properties sensor [java]
[WARNING] Property 'sonar.jacoco.reportPaths' is no longer supported. Use JaCoCo's xml report and sonar-jacoco plugin.
[INFO] Sensor Removed properties sensor [java] (done) | time=1ms
Очевидно, покрытие остается на уровне 0.0%
.
См. также вопрос об Ant, относящийся к данной теме, по этой теме c: Отображение покрытия кода Sonar с помощью файла jacoco.exe c в Sonar LTS 7.9.2 .
2) Явное значение по умолчанию для новой настройки: -Dsonar.coverage.jacoco.xmlReportPaths=target/site/jacoco/jacoco.xml
Примечание: , хотя это значение по умолчанию не является ( по какой-то причине) задокументировано на https://docs.sonarqube.org/pages/viewpage.action?pageId=1442166, я только что нашел его, выполнив поиск jacoco.xml
в моем локальном каталоге target
.
Покрытие осталось на 0.0%
, и журнал заданий GitLab CI начал наконец показывать что-то ясное:
[INFO] Sensor SonarCSS Rules [cssfamily] (done) | time=1ms
[INFO] Sensor JaCoCo XML Report Importer [jacoco]
[WARNING] Report doesn't exist: '/builds/myProject/target/site/jacoco/jacoco.xml'
[INFO] Sensor JaCoCo XML Report Importer [jacoco] (done) | time=4ms
[INFO] Sensor SurefireSensor [java]
! Это Жаль, что этот журнал не пишется при запуске без явных настроек. Это значительно упростит расследование.
Так что теперь у нас есть понимание: /target/site
не генерируется в моем конвейере GitLab CI. Очевидно, это связано с тем, что скрипт содержит только mvn test
, что недостаточно для жизненного цикла сборки Maven .
Изучение примеров Maven + Sonar: они содержат mvn verify sonar:sonar
или mvn install sonar:sonar
.
Поэтому здесь мы go:
3) mvn verify
+ явное значение по умолчанию для новой настройки: -Dsonar.coverage.jacoco.xmlReportPaths=target/site/jacoco/jacoco.xml
Это сработало! Покрытие отображается в SonarQube, и в части журнала, связанной с JaCoCo, нет ошибок:
[INFO] Sensor JaCoCo XML Report Importer [jacoco]
[INFO] Sensor JaCoCo XML Report Importer [jacoco] (done) | time=94ms
[INFO] Sensor SurefireSensor [java]
[INFO] parsing [/builds/myProject/target/surefire-reports]
[INFO] Sensor SurefireSensor [java] (done) | time=92ms
[INFO] Sensor JavaXmlSensor [java]
[INFO] Sensor JavaXmlSensor [java] (done) | time=7ms
4) mvn verify
без явной настройки.
Итак, наконец, я пробовал без каких-либо значений настроек, и это работает:
- mvn verify sonar:sonar -Dsonar.host.url=${SONAR_HOST_URL} -Dsonar.login=${SONAR_TOKEN}
Сводка
- Старая
sonar.jacoco.reportPaths
настройка не работает на новых версиях SonarQube (7.9.2+). - Значение по умолчанию для новой настройки
sonar.coverage.jacoco.xmlReportPaths
равно target/site/jacoco/jacoco.xml
. - Причина root состояла в том, что каталог
/target/site/jacoco
не был создан (включая jacoco.xml
и все другие файлы Отчет JaCoCo) - Все, что мне нужно сделать, это заменить
mvn test
на mvn verify
. - Ошибка главного сонара не записывает журнал ошибок о "файле отчета не найден", когда значение
sonar.coverage.jacoco.xmlReportPaths
явно не установлено. Было бы хорошо, если бы разработчики SonarQube это исправили.