Совокупный отчет Sonar для проекта mutiModule maven

У меня есть настройка для проекта модуля с несколькими модулями, что-то вроде этого

Модуль1

|
 submodule1
|
submodule2

Я написал тест Junit в подмодуле 1, и он также охватывает код подмодуля 2, но когда я пытаюсь увидеть покрытие в сонаре, он показывает 0% для подмодуля 2. Есть ли способ показать покрытие подмодуля 2? Также я могу создать агрегированный отчет xml, запустив mvn clean install jacoco:report-aggregate, но как я могу передать этот агрегированный отчет в сонар? Как настроить pom модуля, а также подмодули?


person Navneet_1789    schedule 14.12.2020    source источник
comment
Как ты позвонил Сонару? Мейвен? Откуда ты позвал Мейвена?   -  person khmarbaise    schedule 14.12.2020
comment
См. создание родительского pom. Это должно помочь вам дальше.   -  person Samy    schedule 14.12.2020


Ответы (1)


Я не уверен, что это то, что вы делаете, но я все равно скажу это. Если вы создаете submodule1 как «код» и submodule2 как «тесты», это ужасный способ его организовать. Тесты (в частности, модульные тесты) должны храниться вместе с тестируемым кодом. Таким образом, каждый подмодуль имеет src/main/java и src/test/java.

Теперь, с учетом сказанного, вполне вероятно, что у вас есть модуль «common-lib», а затем дополнительные модули, которые зависят от этой библиотеки (например, уровень приложений). Весьма вероятно, что вы запускаете тест на уровне приложения, и он вызывает код в модуле lib. Но за это вы не получаете кредита на покрытие кода. Покрытие библиотеки Jacoco будет основано исключительно на тестах в библиотеке. Тесты «приложения» охватывают только приложение. Это связано с инструментированием, которое происходит при запуске jacoco - оно будет инструментировать только то, что является локальным для модуля, в котором он работает.

Да, есть отчет jacoco-aggregate, но он объединит отчеты модулей вместе — один отчет каждого модуля. Он НЕ дает вам унифицированного охвата теста уровня приложения, вызывающего методы lib и т. д.

Наконец, сонар. Я считаю, что пока у вас есть файлы jacoco, сонар-сканер будет их использовать. Я думаю, что он работает с необработанным файлом jacoco.exec, но может быть в состоянии интерпретировать jacoco-result.xml или jacoco-aggregate.xml. Если это вас огорчает, включите свой pom.xml

person Jeff Bennett    schedule 14.12.2020
comment
Будучи разработчиком JaCoCo, не могу удержаться от исправления: по умолчанию агент JaCoCo обрабатывает все классы, загруженные в JVM, независимо от того, из какого места на диске (например, из модуля Maven) они загружены. Таким образом, jacoco:report-aggregate может обеспечить унифицированный охват классов один модуль Maven из-за вызовов из классов другого модуля. - person Godin; 15.12.2020