Это недавнее сообщение в блоге Томаса Сандберга содержит метод, который частично решает проблему с помощью муравья для вызовов cobertura вместо использования плагина maven cobertura.
Он основан на следующем базовом подходе со специализированными файлами pom.xml и build.xml:
Начните с типичной компиляции maven на родительском pom, которая скомпилирует все классы в дочерних модулях..
mvn clean compile # maven-compile-plugin called for compiling
Затем инструментальные средства всех классов модулей:
ant instrument # cobertura called for instrumentation
Затем вызовите плагин maven-surefire, вызываемый для тестирования с использованием инструментированных классов, с cobertura в качестве тестовой зависимости
mvn test
Затем используйте пользовательский вызов отчета для извлечения всех результатов из разных модулей:
ant report # cobertura called for reporting
Ключевыми элементами файла ant build.xml являются инструментальные средства для всех модулей по отдельности.а затем доложить обо всех модулях после слияния результатов.Эта функция должна вызываться для каждого модуля в его примере:
<target name="instrumentAModule">
<property name="classes.dir" value="target/classes"/>
<cobertura-instrument todir="./${module}/${classes.dir}">
<fileset dir="./${module}/target/classes">
<include name="**/*.class"/>
</fileset>
</cobertura-instrument>
</target>
Затем, после завершения тестирования, на этапе создания отчетов сначала объединяются все результаты из всех различных каталогов, которые объединяются в новый файл .ser.(в этом примере он называется sum.ser)
<target name="report" depends="merge">
<property name="src.dir" value="src/main/java/"/>
<cobertura-report datafile="sum.ser"
format="html"
destdir="./target/report">
<!-- Add all modules that should be included below -->
<!-- fileset dir="./MODULE_NAME_TO_REPLACE/${src.dir}"/ -->
<fileset dir="./product/${src.dir}"/>
</cobertura-report>
</target>
<target name="merge">
<cobertura-merge datafile="sum.ser">
<fileset dir=".">
<include name="**/cobertura.ser"/>
</fileset>
</cobertura-merge>
</target>
Возможно интегрировать компоненты ant в maven с помощью плагина antrun, но я недостаточно знаком с фазами / жизненными циклами, чтобы знать, куда их поместитьразличные вызовы.
Это очень полезно для меня, так как я пишу абстрактные тестовые классы в своих модулях API, а затем предоставляю им реализацию в моих модулях lib.Пока и cobertura, и emma не смогли справиться с этим дизайном, поэтому мой охват кода обычно равен 0 или одной цифре.