¿Cómo puedo obtener la cobertura de código de una biblioteca java externa con jacoco?

Si tengo un proyecto Java que usa una biblioteca (un archivo jar), ¿es posible obtener la cobertura de código de las clases dentro de este jar?

La idea detrás de esto es que me gustaría saber en qué proporción de las bibliotecas externas se basa el proyecto (digamos spring, hibernate, o podrían ser los tarros de scala si se tratara de un proyecto de scala, por qué no). Incluso me imagino que podría intentar enumerarlos y volver a agruparlos en un solo archivo jar que contendría solo los archivos .class necesarios (con un complemento como apache felix, por ejemplo) para obtener el archivo jar más pequeño posible. No estoy seguro de querer hacer esto, estoy consciente de que probablemente sea una mala idea por varias razones, pero lo considero una experimentación.

No puedo encontrar cómo hacerlo, jacoco informa que solo cubre los archivos de clase directamente dentro de mi proyecto. Tal vez estoy haciendo algo mal, estoy usando el complemento Maven como este:

        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.5.6.201201232323</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>

Intenté cambiar la etiqueta de inclusión, pero el único efecto es restringir el valor predeterminado que incluye solo los archivos de clase directamente dentro de mi proyecto.

Gracias por adelantado !


Editar después de la respuesta de los oers:

Descubrí cómo hacerlo con ant y antrun-plugin, aunque es muy complicado, tuve muchos problemas con las versiones de antrun plugin (no puedo hacer que una versión reciente funcione, incluso para una tarea básica) y realmente me gustaría quédate con Maven. Si alguien sabe cómo hacer el equivalente con el complemento je jacoco maven en lugar de hormiga, ¡estoy interesado!

Solución parcial con hormiga: en realidad el archivo jacoco.exec ya contenía referencias a las clases de mis jarras externas; por lo tanto, es la tarea del informe la que debe decirse que tenga en cuenta estos jar, y no la fase de tiempo de ejecución como pensé. Aquí está la configuración de Maven que utilicé (encontré ayuda en 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.201201232323</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"
                                   classpattarget='_blank' href="maven.plugin.classpath" />
                            <taskdef classpattarget='_blank' href="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>
Respuesta 1

Debe dar al objetivo del informe las clases de la biblioteca que desea analizar. Desafortunadamente no puedo encontrar una documentación sobre eso. El documento oficial es ... hm ... escaso

Si puede ejecutar hormiga, sugeriría mirar la tarea de informe .

<jacoco:report>

    <executiondata>
        <file file="jacoco.exec"/>
    </executiondata>

    <structure name="Example Project">
        <classfiles>
            <fileset dir="classes"/> <!-- HERE THE CLASSES FROM YOUR LIB -->
        </classfiles>
        <sourcefiles encoding="UTF-8">
            <fileset dir="src"/> <!-- HERE THE SORUCESFROM YOUR LIB -->
        </sourcefiles>
    </structure>

    <html destdir="report"/>

</jacoco:report>
Respuesta: 2

Todo lo que estoy haciendo es agregar tres cadenas a un Java PriorityQueue y luego imprimirlas. Este es mi código: import java.util. *; import java.lang. *; class Main {public static void main (String [] args) ...

Tengo un Map <byte [], Element> y quiero ordenarlo y escribirlo en el disco, de modo que tenga un archivo con todos los elementos ordenados por clave a través de UnsignedBytes.lexicographicalComparator de Guava. Qué ...

Usando Eclipse, ¿cómo puedo encontrar qué clases de Java implementan la interfaz A y la interfaz B? Gracias.

En Nhibernate tenemos Nhibernate Fluent y, ahora, la función incorporada "Mapeo por código" en Nhibernate 3.2. Ambos le permiten construir mediante programación las asignaciones para su dominio y podríamos ...