Плагин Maven cobertura - один отчет для многомодульного проекта

Я использую плагин maven cobertura, чтобы сообщить о покрытии кода в моем многомодульном проекте.

Проблема в том, что я не знаю, как создать один отчет для всех модулей в проекте.

Пока что я создал отдельные отчеты для каждого модуля, но было бы неплохо иметь один отчет для всего проекта.

Моя родительская конфигурация pom:

   <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>cobertura-maven-plugin</artifactId>
        <version>2.4</version>
        <inherited>true</inherited>
        <executions>
            <execution>
                <phase>test-compile</phase>
                <goals>
                    <goal>clean</goal>
                    <goal>cobertura</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

person Lukasz Moren    schedule 22.09.2010    source источник


Ответы (4)


Насколько мне известно, в настоящее время это не поддерживается, см. MCOBERTURA-65. Но к проблеме прикреплен патч, может попробовать. Но я предлагаю использовать что-то вроде Sonar для агрегирования показателей.

person Pascal Thivent    schedule 22.09.2010
comment
Сейчас поддерживается. Смотрите мой ответ. - person vegemite4me; 23.09.2013

Плагин был обновлен с тех пор, как был задан этот вопрос (и был дан последний ответ), чтобы теперь включить агрегированные отчеты с помощью свойства конфигурации aggregate в родительском POM.

Это создает сводный отчет о покрытии на target/site/cobertura/index.html, который будет включать все модули.

(Каждый модуль также будет иметь свой собственный отчет, если это будет полезно.)

Родительский pom.xml

<modules>
    <module>moduleA</module>
    <module>moduleB</module>
    <module>moduleC</module>
<modules>
<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>cobertura-maven-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <check/>
                    <formats>
                        <format>html</format>
                        <format>xml</format>
                    </formats>
                    <aggregate>true</aggregate>
                </configuration>
            </plugin>
            ...
    </pluginManagement>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>cobertura-maven-plugin</artifactId>
        </plugin>
    </plugins>
...
</build>
person vegemite4me    schedule 23.09.2013
comment
Должен ли я запускать mvn cobertura:cobertura -Dcobertura.report.format=xml команду в родительском модуле, и она сгенерирует агрегированный отчет в родительском модуле? - person वरुण; 23.06.2016
comment
Я выполнил команду mvn cobertura:cobertura -Dcobertura.report.format=xml в родительском пакете, она объединяет отчеты дочерних модулей, но не показывает покрытие класса в дочернем модуле maven этого родительского модуля, если этот класс покрывается классом из другого дочернего модуля maven этого родительского модуля. - person वरुण; 23.06.2016
comment
Похоже, у вас есть один модуль, тестирующий классы другого модуля. Это не похоже на хорошую идею. Модуль должен содержать тесты для своих классов. Если это не так, вам следует задать отдельный вопрос. - person vegemite4me; 23.06.2016
comment
Это также можно сделать без редактирования файла pom: mvn cobertura:cobertura -Dcobertura.aggregate=true -Dcobertura.report.format=xml Вы можете изменить формат отчета по своему желанию. Согласно репозиторию github плагина cobertura maven, эта функция доступна начиная с версии 2.5 (фиксация 64a8823). - person clapsus; 27.07.2016

Я использовал Hudson как инструмент непрерывной интеграции. Плагин Cobertura позволяет мне видеть покрытие кода всех дочерних модулей при проверке родительского.

person user582011    schedule 19.01.2011

Плагин Jenkins Cobertura автоматически объединяет отчет, но если вас интересует сам файл покрытия по другим причинам, вы можете сделать это, выполнив следующую процедуру:

  1. Загрузите Cobertura с здесь

  2. Перейдите в рабочую область своего проекта -> найдите все .ser файлы и переименуйте их

    (i=0; find . | grep cobertura.ser$ | while read line;do echo $line; cp -i $line cobertura$i.ser;i=$(($i+1));done;)
    
  3. используйте cobertura-merge.sh для создания глобального .ser файла

    ~/cobertura-2.0.3/cobertura-merge.sh --datafile cobertura.ser cobertura*.ser
    
  4. используйте cobertura-report.sh для создания отчета по глобальному файлу .ser

    ~/cobertura-2.0.3/cobertura-report.sh ./cobertura.ser --destination ./ --format xml
    

У вас будет глобальный coverage.xml, созданный в текущем каталоге. Вы можете использовать его для дальнейшей обработки.

person Venkat Gajulapalli    schedule 24.08.2013
comment
Это также можно сделать через командную строку только с помощью maven: mvn cobertura:cobertura -Dcobertura.aggregate=true -Dcobertura.report.format=xml Вы можете изменить формат отчета по своему желанию. Согласно репозиторию github плагина cobertura maven, эта функция доступна начиная с версии 2.5 (фиксация 64a8823). - person clapsus; 27.07.2016