Estoy usando Maven 3.0.3, JUnit 4.8.1 y Jacoco 0.6.3.201306030806, y estoy tratando de crear informes de cobertura de prueba.
Tengo un proyecto con pruebas unitarias solamente, pero no puedo ejecutar los informes, recibo repetidamente el error: Skipping JaCoCo execution due to missing execution data file
cuando ejecuto:
mvn clean install -P test-coverage
Así es como se configura mi pom:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.14.1</version>
<configuration>
<reuseForks>true</reuseForks>
<argLine>-Xmx2048m</argLine>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.14.1</version>
<configuration>
<reuseForks>true</reuseForks>
<argLine>-Xmx4096m -XX:MaxPermSize=512M ${itCoverageAgent}</argLine>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
...
<profile>
<id>test-coverage</id>
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.6.3.201306030806</version>
<configuration>
<destfile>${basedir}/target/coverage-reports/jacoco-unit.exec</destfile>
<datafile>${basedir}/target/coverage-reports/jacoco-unit.exec</datafile>
</configuration>
<executions>
<execution>
<id>prepare-unit-tests</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<!-- prepare agent for measuring integration tests -->
<execution>
<id>prepare-integration-tests</id>
<goals>
<goal>prepare-agent</goal>
</goals>
<phase>pre-integration-test</phase>
<configuration>
<propertyName>itCoverageAgent</propertyName>
</configuration>
</execution>
<execution>
<id>jacoco-site</id>
<phase>verify</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
Todas mis pruebas se ejecutan con éxito. Aquí está algunos de los resultados de Maven:
[INFO] --- jacoco-maven-plugin:0.6.2.201302030002:prepare-agent (prepare-unit-tests) @ myproject ---
[INFO] argLine set to -javaagent:/Users/davea/.m2/repository/org/jacoco/org.jacoco.agent/0.6.2.201302030002/org.jacoco.agent-0.6.2.201302030002-runtime.jar=destfile=/Users/davea/Dropbox/workspace/myproject/target/jacoco.exec
[INFO]
...
Tests run: 14, Failures: 0, Errors: 0, Skipped: 0
[INFO]
...
[INFO]
[INFO] --- jacoco-maven-plugin:0.6.2.201302030002:prepare-agent (prepare-integration-tests) @ myproject ---
[INFO] itCoverageAgent set to -javaagent:/Users/davea/.m2/repository/org/jacoco/org.jacoco.agent/0.6.2.201302030002/org.jacoco.agent-0.6.2.201302030002-runtime.jar=destfile=/Users/davea/Dropbox/workspace/myproject/target/jacoco.exec
[INFO]
[INFO] --- maven-failsafe-plugin:2.14.1:integration-test (default) @ myproject ---
[WARNING] File encoding has not been set, using platform encoding MacRoman, i.e. build is platform dependent!
[INFO]
[INFO] --- maven-failsafe-plugin:2.14.1:verify (default) @ myproject ---
[INFO] Failsafe report directory: /Users/davea/Dropbox/workspace/myproject/target/failsafe-reports
[WARNING] File encoding has not been set, using platform encoding MacRoman, i.e. build is platform dependent!
[INFO]
[INFO] --- jacoco-maven-plugin:0.6.2.201302030002:report (jacoco-site) @ myproject ---
[INFO] Skipping JaCoCo execution due to missing execution data file
[INFO]
¿Alguna idea de qué configuración me falta?
destFile
y lo dejamos escribir en el archivo target / jacoco.exec predeterminado.Respuestas:
jacoco-maven-plugin: 0.7.10-SNAPSHOT
De jacoco: prepare-agent que dice:
Tenga en cuenta el
@{argLine}
que se agrega a-your -extra -arguments
.Gracias Slava Semushin por notar el cambio e informar en el comentario .
jacoco-maven-plugin: 0.7.2-SNAPSHOT
Siguiendo a jacoco: prepare-agent que dice:
debe cambiar la siguiente línea en la
maven-surefire-plugin
configuración del complemento desde (tenga${argLine}
en cuenta el interior<argLine>
):a
Realice también los cambios necesarios en el otro complemento
maven-failsafe-plugin
y reemplace lo siguiente (nuevamente, observe el${argLine}
):a
fuente
@{argLine}
.mvn clean package sonar:sonar -U -DargLine="-Dxxx=yyy"
. No estoy declarando maven-surefire-plugin explícitamente y estableciendo configuraciones. Solo agrego el marcador de posición argLine en la línea de comando de maven comomvn clean package sonar:sonar -U -DargLine="@{argLine} -Dxxx=yyy"
. Ahora se genera el archivo jacoco.exec y el informe de cobertura se genera en la sonda.Enfrenté un problema un poco diferente que devolvió el mismo error.
La verdad es que este error se devuelve por muchas, muchas razones. Experimentamos con las diferentes soluciones en Stack Overflow, pero descubrimos que este recurso es el mejor. Derriba las diferentes razones potenciales por las que Jacoco podría estar devolviendo el mismo error.
Para nosotros, la solución fue agregar un agente de preparación a la configuración.
Me imagino que la mayoría de los usuarios lo experimentarán por diferentes razones, ¡así que eche un vistazo al recurso mencionado anteriormente!
fuente
**/*Test.java
cuando se nombraron mis clases de prueba*Tests.java
*Test.java
clase y un método de prueba anotado@Test
para que Jacoco pueda hacer algo. 2. En las variables de entorno de Travis para mi proyecto, tenía un error tipográficoSONART_TOKEN=*****
, debería haber sido nombradoSONAR_TOKEN=*****
. Consulte los documentos de Travis aquí , busqueor define SONAR_TOKEN in your Repository Settings
. Después de que solucioné eso, la compilación se ejecutó correctamente. Puede ver mi proyecto de gitbhub en cuestión .Puede haber un caso en el que alguna otra configuración de argumentación o complemento en pom pueda anular la configuración de la orden de ejecución de jacoco.
argLine establecido en -
javaagent:/Users/davea/.m2/repository/org/jacoco/org.jacoco.agent/0.6.2.201302030002/org.jacoco.agent-0.6.2.201302030002-runtime.jar=destfile=/Users/davea/Dropbox/workspace/myproject/target/jacoco.exec
Uno de los ejemplos
Después de deshacerse de argLine de estos complementos, jacoco comenzó a funcionar normalmente.
fuente
También se puede obtener el error "Omitiendo la ejecución de JaCoCo debido a que falta el archivo de datos de ejecución" debido a que faltan pruebas en el proyecto. Por ejemplo, cuando inicia un nuevo proyecto y no tiene ningún archivo * Test.java.
fuente
F Lo que dijo tdrury:
cambie la configuración de su complemento a esto:
Editar: Acabo de notar una cosa importante, destFile y dataFile parecen distinguir entre mayúsculas y minúsculas, por lo que se supone que es destFile, no destfile.
fuente
Sé que esta pregunta es bastante antigua, pero si alguien como yo viene aquí buscando una respuesta, esto podría ayudar. He podido superar el error anterior con esto.
1) Elimine el siguiente código del complemento maven-surefire-plugin
2) Agregue el siguiente objetivo:
fuente
Encontré el mismo problema en este momento.
Tengo una clase nombrada
HelloWorld
, y creé una clase de prueba para ella nombradaHelloWorldTests
, luego obtuve el resultadoSkipping JaCoCo execution due to missing execution data file.
Luego intenté cambiar mi
pom.xml
para que funcionara, pero el intento falló.Finalmente, simplemente cambio el nombre
HelloWorldTests
aHelloWorldTest
, ¡y funcionó!Entonces supongo que, por defecto , jacoco solo reconoce la clase de prueba nombrada como
XxxTest
, lo que indica que es la clase de prueba paraXxx
. ¡Así que simplemente cambiar el nombre de sus clases de prueba a este formato debería funcionar!fuente
Probé todas las respuestas, pero solo la siguiente combinación de consejos me ha funcionado. ¿Por qué? Tenía requisitos muy específicos:
mvn clean verify
(Maven 3.6.0)javaagent
definido en elsurefire
complemento.Solución : anteponer el
argLine
valor en lasurefire
configuración con la propiedad maven de "reemplazo tardío"@{...}
como se explica en lassurefire
preguntas frecuentes ( mi configuración fija )Falló el primer intento: defina la propiedad jaCoCoArgLine en la
prepare-agent
configuración del objetivo dejacoco
: el escenario falló en mi segundo requisito, IntelliJ IDEA no pudo averiguar el agente para jmockit que uso en el proyecto para la simulación de métodos estáticosfuente
He agregado un proyecto Maven / Java con 1 clase de dominio con las siguientes características:
¿Dónde están los resultados de Jacoco? Después de probar y ejecutar 'mvn clean', puede encontrar los resultados en 'target / site / jacoco / index.html'. Abra este archivo en el navegador.
¡Disfrutar!
Traté de mantener el proyecto lo más simple posible. El proyecto reúne muchas sugerencias de estas publicaciones en un proyecto de ejemplo. ¡Gracias, colaboradores!
fuente
Luché durante días. Probé todas las diferentes configuraciones sugeridas en este hilo. Ninguno de ellos funciona. Finalmente, encuentro que solo la configuración importante es el objetivo del agente de preparación . Pero hay que ponerlo en la fase correcta. Vi tantos ejemplos ponerlo en la " prueba previa a la integración ", eso es engañoso, ya que solo se ejecutará después de la prueba unitaria. Por tanto, la prueba unitaria no estará instrumentada.
La configuración correcta debería usar la fase predeterminada (no especifique la fase explícitamente). Y, por lo general, no es necesario concentrarse en maven-surefire-plugin .
fuente
La ejecución dice que está poniendo los datos de jacoco en /Users/davea/Dropbox/workspace/myproject/target/jacoco.exec pero su configuración de maven está buscando los datos en $ {basedir} / target / coberturas-informes / jacoco-unit. ejecutivo.
fuente
Mi respuesta es muy tardía, pero para otros usuarios. En su caso, debe configurar el pluging a prueba de fallas para usar la configuración del agente de línea de comandos guardada en la variable itCoverageAgent. Por ejemplo
En su configuración de maven, jacoco prepara los argumentos de la línea de comando en la fase de preparación del agente, pero el complemento a prueba de fallas no lo usa, por lo que no hay un archivo de datos de ejecución.
fuente
Tratar de usar:
para ver los detalles sobre su proceso de denuncia.
Configuré mi jacoco así:
Luego lo
mvn jacoco:report -debug
muestra usando la configuración predeterminada, lo que significa quejacoco.exec
no está en~/jacoco.exec
. El error dicemissing execution data file
.Así que usa la configuración predeterminada:
Y todo funciona bien.
fuente
A veces, la ejecución se ejecuta por primera vez, y cuando hacemos una instalación limpia de maven, no se genera después de eso. El problema era usar true para skipMain y skip properties en maven-compiler-plugin del archivo pom principal. Elimínelos si se presentaron como parte de algún problema o sugerencia.
fuente
En mi caso, el agente de preparación tenía una
destFile
configuración diferente , pero en consecuencia, el informe tenía que configurarse con adataFile
, pero faltaba esta configuración. Una vez quedataFile
se agregó, comenzó a funcionar bien.fuente