Сонар JaCoCoSensor игнорирует анализ Якоко - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть многомодульный проект maven, в котором есть и модульные тесты, и тесты комплексного обслуживания (не совсем интеграционные тесты, поскольку они на самом деле ни с чем не интегрируются), где мы высмеиваем границы конкретногоСервис тестируется.Этот последний набор тестов (использующий mockmvc для проверки всех слоев перед развертыванием) генерирует jacoco.exec (или jacoco-it.exec в зависимости от конфигурации maven, которую я пробую), которая ясно показывает, что тесты влияют на покрытие кода.На самом деле, подавляющее большинство покрытия находится в этом слое (примерно 40% на jacoco).

Когда я запускаю гидролокаторный анализ проекта локально или через jenkins, я получаю следующее для тестов верхнего уровня:

[INFO] Датчик JaCoCoSensor [java]

[INFO] Анализ /Users/tokkov/Documents/workspace/platform/customer/assemblies/service/target/jacoco.exec

[ПРЕДУПРЕЖДЕНИЕ] Информация о покрытии не была собрана.Возможно, вы забыли включить отладочную информацию в скомпилированные классы?

[INFO] Датчик JaCoCoSensor [java] (сделано) |время = 164 мс

Итак, сонар находит анализ джакоко.Он находит скомпилированный код (распаковывает jar-файлы в каталог сборки и указывает его местоположение с помощью sonar.java.binaries), скомпилированный код имеет отладочную информацию (проверяется с помощью javap -l), но он все равно поднимает руки и уходит.

Есть идеи, почему сонар игнорирует отчет о джакоко?Я где-то пропустил конфигурацию?Он с удовольствием поглощает все отчеты jacoco.exec в других модулях, но не этот.

<sonar.java.binaries>${project.build.directory}/class-fix</sonar.java.binaries>
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
<sonar.jacoco.reportPaths>${project.build.directory}/jacoco.exec</sonar.jacoco.reportPaths>

Версии: Sonarqube v 7.1 (сборка 11001), плагин JaCoCo maven v 0.8.1

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Похоже, проблема связана с вложенными модулями maven.Структура проекта была сильно вложена в природу, я думаю, чтобы помочь мысленно усилить сегрегацию гексагональной архитектуры, которую они внедряли.Это привело к нескольким модулям, которые просто содержали другие модули, и плагин сонара, похоже, терялся в том, как был связан код.После того, как я удалил все модули, не содержащие код, чтобы немного сгладить структуру папок, отчет прошел так, как и должен.

Во втором проекте я указал использование одного файла jacoco.exec, чтобы jacocoможет объединить его до того, как сонар станет вовлеченным.Это также решило проблему и позволило командам сохранить структуру с высокой степенью вложенности.

В обоих случаях проблема заключалась в том, что гидролокатор не обрабатывает ссылки на кросс-модульные коды для целей покрытия, если только результаты jacoco агрегированы доАнализ гидролокатора.

Это серьезная проблема при сквозном тестировании сервиса, которая сводит на нет преимущества разделения кода на дискретные модули.

tl; dr Sonar не может обрабатывать несколько уровней вложенных модулей maven.И полностью игнорируемый код вне модуля, содержащего тесты.

0 голосов
/ 19 сентября 2018

Это конфигурация в pom.xml, которая работает для меня:

    <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
    <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
    <sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath>
    <sonar.language>java</sonar.language>

и настройки плагина jacoco в том же pom.xml:

        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.8.1</version>
            <configuration>
                <destFile>${sonar.jacoco.reportPath}</destFile>
                <append>true</append>
            </configuration>
            <executions>
                <execution>
                    <id>agent</id>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...