Если у меня есть проект java, который использует библиотеку (файл jar), можно ли получить покрытие кода классов внутри этой банки?Как я могу получить покрытие кода внешней java-библиотеки с помощью jacoco?
Идея заключается в том, что я хотел бы узнать, какая доля внешних библиотек, на которые опирается проект (скажем, весна, спящий режим, или это могут быть банки scala, если это был проект scala, почему бы и нет) фактически используются. Я даже предполагаю, что я мог бы попытаться перечислить их и отменить их в одной банке, которая должна содержать только. Необходимые файлы .class (например, с плагином, например apache felix), чтобы получить наименьшую возможную банку. Я не уверен, что я действительно хочу это сделать, я знаю, что это, вероятно, плохая идея по ряду причин, но я думаю об этом как о эксперименте.
Я не могу найти, как это сделать, jacoco сообщает только покрытие для файлов классов непосредственно внутри моего проекта. Может быть, я делаю что-то неправильно, я использую Maven плагин, как это:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.5.6.2012</version>
<configuration>
<destfile>${basedir}/target/coverage-reports/jacoco-unit.exec</destfile>
<datafile>${basedir}/target/coverage-reports/jacoco-unit.exec</datafile>
<includes>
<include>**</include>
</includes>
</configuration>
<executions>
<execution>
<id>jacoco-initialize</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>jacoco-site</id>
<phase>package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
Я попытался изменить включаемые тег, но только эффект ограничения по умолчанию, который включает в себя только файлы класса непосредственно внутри мой проект.
Заранее благодарен!
Редактировать после ответа Oers':
я узнал, как сделать это с муравьем и antrun-плагин, хотя это очень сложно, у меня было много проблем с antrun версий плагинов (не в состоянии сделать недавняя работа над версиями, даже для основной задачи), и я бы очень хотел придерживаться Maven. Если кто-то знает, как сделать эквивалент с плагином j jacoco maven вместо муравья, мне интересно!
Частичное решение с муравьем: на самом деле файл jacoco.exec содержит ссылки на классы моих внешних банок; поэтому следует сказать, что задача отчета должна учитывать эту флягу, а не фазу времени выполнения, как я думал. Вот конфигурация Maven я (я нашел справку по http://intellectualcramps.wordpress.com/2012/03/22/jacoco-tycho-and-coverage-reports/):
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<!--<version>1.7</version>-->
<dependencies>
<dependency>
<groupId>org.jacoco</groupId>
<artifactId>org.jacoco.ant</artifactId>
<version>0.5.6.2012</version>
</dependency>
<dependency>
<groupId>ant-contrib</groupId>
<artifactId>ant-contrib</artifactId>
<version>20020829</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>jacoco-report</id>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<taskdef name="jacoco-report"
classname="org.jacoco.ant.ReportTask"
classpathref="maven.plugin.classpath" />
<taskdef classpathref="maven.runtime.classpath"
resource="net/sf/antcontrib/antcontrib.properties" />
<available
file="${project.basedir}/target/jacoco.exec"
property="jacoco.exec.file.exists" />
<echo message="${project.basedir}/target/jacoco.exec" />
<if>
<equals arg1="${jacoco.exec.file.exists}"
arg2="true" />
<then>
<echo message="Executing jacoco report" />
<trycatch>
<try>
<jacoco-report>
<executiondata>
<file
file="${project.basedir}/target/jacoco.exec" />
</executiondata>
<structure name="Minerva">
<classfiles>
<fileset
dir="target/classes" />
<fileset dir="C:/Data/dev/m2Repository/com/groupama/framework/crypt/fwk-cryptage/1.0/">
<include name="**/*.jar"/>
</fileset>
</classfiles>
<sourcefiles
encoding="UTF-8">
<fileset
dir="src/main/java" />
</sourcefiles>
</structure>
<html destdir="${project.basedir}/target/jacoco/report" />
<xml destfile="${project.basedir}/target/jacoco/report/jacoco.xml"/>
</jacoco-report>
</try>
<catch>
<echo>skipping</echo>
</catch>
</trycatch>
</then>
<else>
<echo message="No jacoco.exec file found." />
</else>
</if>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
Вы правы в документации, которая действительно должна быть более полной. Я действительно думал, что это была задача запуска, которую нужно было параметризовать; вы заставили меня заглянуть в файл jacoco.exec и понять, что он уже содержит ссылки на классы внутри внешних банок, а это значит, что это отчет, который нужно правильно параметризовать. Не зная муравей, я провел все утро, прежде чем заставить его работать, но он, наконец, работал.Он частично удовлетворяет меня, см. Мой ответ ниже, но это шаг в правильном направлении. Спасибо большое! – Guillaume
спасибо, что сохранил мой день – vinod