Объединение сонарных метрик в мультимодульном проекте Maven

Я унаследовал нечетный мульти-модульный проект Maven. Стандартные бизнес-классы и модульные тесты находятся в модуле под названием "код", и у нас есть хорошие простые рабочие сонарные метрики для этого модуля. Второй модуль содержит различные тесты стиля интеграции, которые запускаются на развернутом сервере Glassfish, которые выполняются как модульные тесты в модуле Integ-Test.

pom.xml // root level,
    code // business code and unit tests :-)
        moduleA
        moduleB
    integ-test // ;-(
        moduleA
        moduleB

Я знаю, что самый простой вариант - это перенести классы "Integ-Test" в модуль "Code" и реорганизовать их как реальные интеграционные тесты, но на данный момент это не вариант.

Я нашел способ записать уровень покрытия кода для модуля "Integ-tests", используя цель jacoco: dump, чтобы загрузить jacococ.exec в модули Integ-Test.

Моя структура Maven Pom теперь выглядит так

 pom.xml // defined jacoco verify -> report goal
     code // business code and unit test
         moduleA
            target/jacoco.exec - unit test coverage
            pom.xml
     pom.xml - defines standard jacoco prepare-agent goal
     integ-test //
         moduleA
            target/jacoco.exec - really integration test coverage
            pom.xml
     pom.xml- defines jacoco dump and merge

Мой текущий подход состоит в том, чтобы объединить все файлы jacococ.exec в модуле "integra-test" и использовать значение "destFile", чтобы сохранить эти данные в модуле "code" в виде файла jacoco-it.exec. Затем стандартная цель sonar: sonar должна взять этот файл и использовать его в качестве покрытия интеграционного теста.

 pom.xml
     integ-test
         moduleA
            target/jacoco.exec - really integration test coverage modA
         moduleB
            target/jacoco.exec - really integration test coverage modB
     code
         moduleA
         moduleB
     target/jacoco-it.exec - This should be the merged content of the two files above
     pom.xml

Мой корневой уровень pom.xml определяет эту конфигурацию jacoco-maven-plugin

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <configuration>
        <append>true</append>
        <includes>
            <include>com/a/b/c/**</include>
        </includes>
    </configuration>
    <executions>

        <execution>
            <id>jacoco-agent</id>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
        </execution>

        <execution>
            <id>jacoco-dump</id>
            <phase>pre-integration-test</phase>
            <goals>
                <goal>dump</goal>
            </goals>
        </execution>

        <execution>
            <id>jacoco-merge</id>
            <phase>post-integration-test</phase>
            <goals>
                <goal>merge</goal>
            </goals>
            <configuration>
                <fileSets>
                    <fileSet implementation="org.apache.maven.shared.model.fileset.FileSet">
                        <directory>${project.basedir}/integ-test</directory>
                        <includes>
                            <include>*.exec</include>
                        </includes>
                    </fileSet>
                </fileSets>
                <destFile>${sonar.jacoco.itReportPath}</destFile>
            </configuration>
        </execution>

        <execution>
            <id>jacoco-site</id>
            <phase>verify</phase>
            <goals>
                <goal>report</goal>
            </goals>
        </execution>
    </executions>
</plugin>

<sonar.jacoco.itReportPath>${project.basedir}/../target/jacoco-it.exec</sonar.jacoco.itReportPath>

Я связал цель jacoco: merge с этапом maven post -gration-test, чтобы убедиться, что слияние происходит после запуска тестов, но файл 'jacoco-it.exec' всегда создается в папке 'Integ-Test',

Какие-либо предложения?

1 ответ

Как насчет указания на destFile в целевой директории главного pom? Просто определите

<configuration>
    <append>true</append>
    <destFile>${project.basedir}/../target/jacoco-it.exec</destFile>
    <propertyName>jacoco.integrationtest.arguments</propertyName>
</configuration>

в подпроектах. Все данные покрытия будут добавлены в файл jacoco-it.exec. Этот файл забирается sonarqube, и вы увидите покрытие как покрытие IT. Вы также можете использовать jacoco.exec в качестве имени файла.

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