Estou usando o Maven 3.0.3, JUnit 4.8.1 e Jacoco 0.6.3.201306030806 e estou tentando criar relatórios de cobertura de teste.
Tenho um projeto apenas com testes de unidade, mas não consigo fazer relatórios para executar, estou recebendo repetidamente o erro: Skipping JaCoCo execution due to missing execution data file
quando executo:
mvn clean install -P test-coverage
Aqui está como meu pom está configurado:
<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>
Todos os meus testes foram executados com sucesso. Aqui estão algumas das saídas do 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]
Alguma ideia de qual configuração estou perdendo?
destFile
removemos o e o deixamos gravar no arquivo target / jacoco.exec padrão.Respostas:
jacoco-maven-plugin: 0.7.10-SNAPSHOT
Do jacoco: prepare-agent que diz:
Observe o
@{argLine}
que foi adicionado a-your -extra -arguments
.Obrigado Slava Semushin por perceber a mudança e relatar no comentário .
jacoco-maven-plugin: 0.7.2-SNAPSHOT
A seguir jacoco: prepare-agent que diz:
você deve alterar a seguinte linha na
maven-surefire-plugin
configuração do plugin (observe o${argLine}
interior<argLine>
):para
Faça também as alterações necessárias no outro plug
maven-failsafe-plugin
- in e substitua o seguinte (novamente, observe o${argLine}
):para
fonte
@{argLine}
.mvn clean package sonar:sonar -U -DargLine="-Dxxx=yyy"
. Não estou declarando o maven-surefire-plugin explicitamente e definindo configurações. Acabei de adicionar o espaço reservado argLine na linha de comando do maven, comomvn clean package sonar:sonar -U -DargLine="@{argLine} -Dxxx=yyy"
. Agora o arquivo jacoco.exec é gerado e o relatório de cobertura é gerado no sonar.Eu enfrentei um problema um pouco diferente que retornou o mesmo erro.
A verdade é que esse erro é retornado por muitos e muitos motivos. Experimentamos as diferentes soluções no Stack Overflow, mas descobrimos que este recurso é o melhor. Ele destrói as várias razões potenciais pelas quais Jacoco poderia estar retornando o mesmo erro.
Para nós, a solução foi adicionar um agente de preparação à configuração.
Eu imagino que a maioria dos usuários experimentará isso por diferentes razões, então dê uma olhada no recurso mencionado acima!
fonte
**/*Test.java
quando minhas classes de teste foram nomeadas*Tests.java
*Test.java
classe e um método de teste anotado com@Test
para que Jacoco possa fazer algo. 2. No Travis, as variáveis de ambiente do meu projeto, se houve erro de digitaçãoSONART_TOKEN=*****
, deveriam ter sido nomeadasSONAR_TOKEN=*****
. Veja a documentação do Travis aqui , pesquiseor define SONAR_TOKEN in your Repository Settings
. Depois de consertar isso, o build foi executado com sucesso. Você pode ver meu projeto gitbhub em questão .Pode haver um caso onde alguma outra configuração argline ou plugin no pom pode estar substituindo a configuração da ordem de execução do jacoco.
argLine definida para -
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
Um dos exemplos
Depois de se livrar do argLine desses plugins, o jacoco começou a funcionar normalmente.
fonte
Também é possível obter o erro "Ignorando a execução do JaCoCo devido à ausência do arquivo de dados de execução" devido à ausência de testes no projeto. Por exemplo, quando você inicia um novo projeto e não tem nenhum arquivo * Test.java.
fonte
F O que o furacão disse:
mude sua configuração de plugin para isto:
Edit: apenas notei uma coisa importante, destFile e dataFile parecem fazer distinção entre maiúsculas e minúsculas, então é suposto ser destFile, não destfile.
fonte
Eu sei que esta pergunta é muito antiga, mas se alguém como eu vier aqui procurando uma resposta, isso pode ajudar. Consegui superar o erro acima com isso.
1) Remova o pedaço de código abaixo do plugin maven-surefire-plugin
2) Adicione a meta abaixo:
fonte
Encontrei o mesmo problema agora.
Eu tenho uma classe chamada
HelloWorld
e criei uma classe de teste para ela chamadaHelloWorldTests
, então obtive a saídaSkipping JaCoCo execution due to missing execution data file.
Tentei mudar o meu
pom.xml
para fazê-lo funcionar, mas a tentativa falhou.Finalmente, simplesmente renomeio
HelloWorldTests
paraHelloWorldTest
e funcionou!Então eu acho que, por padrão , o jacoco só reconhece a classe de teste chamada como
XxxTest
, o que indica que é a classe de teste paraXxx
. Portanto, basta renomear suas classes de teste para este formato deve funcionar!fonte
Tentei todas as respostas, mas apenas a seguinte combinação de conselhos funcionou para mim. Por quê? Eu tinha requisitos muito específicos:
mvn clean verify
(Maven 3.6.0)javaagent
definido nosurefire
pluginSolução - prefixe o
argLine
valor nasurefire
configuração com a propriedade maven de "substituição tardia",@{...}
conforme explicado nosurefire
FAQ ( minha configuração fixa )Falha na primeira tentativa - definir a propriedade jaCoCoArgLine na
prepare-agent
configuração do objetivo dejacoco
- o cenário falhou em meu segundo requisito, IntelliJ IDEA não conseguiu descobrir o agente para jmockit que uso no projeto para simulação de método estáticofonte
Eu adicionei um projeto Maven / Java com 1 classe de domínio com os seguintes recursos:
Onde estão os resultados do Jacoco? Após testar e executar 'mvn clean', você pode encontrar os resultados em 'target / site / jacoco / index.html'. Abra este arquivo no navegador.
Aproveitar!
Tentei manter o projeto o mais simples possível. O projeto reúne muitas sugestões dessas postagens em um projeto de exemplo. Obrigado, colaboradores!
fonte
Eu lutei por dias. Tentei todas as diferentes configurações sugeridas neste tópico. Nenhum deles funciona. Finalmente, acho que apenas a configuração importante é o objetivo de preparar o agente . Mas você tem que colocar na fase certa. Já vi tantos exemplos colocá-lo no " teste de pré-integração ", isso é um equívoco, pois só será executado após o teste unitário. Portanto, o teste de unidade não será instrumentado.
A configuração correta deve usar apenas a fase padrão (não especifique a fase explicitamente). E geralmente, você não precisa se preocupar com o plugin maven-surefire .
fonte
A execução diz que está colocando os dados do jacoco em /Users/davea/Dropbox/workspace/myproject/target/jacoco.exec, mas sua configuração do maven está procurando os dados em $ {basedir} / target / Cover-reports / jacoco-unit. exec.
fonte
Minha resposta está muito atrasada, mas para outros usuários No seu caso, você deve configurar o plug-in à prova de falhas para usar a configuração do agente de linha de comando salva na variável itCoverageAgent. Por exemplo
Na configuração do maven, o jacoco prepara os argumentos da linha de comando na fase de preparação do agente, mas o plug-in à prova de falhas não o usa, portanto não há arquivo de dados de execução.
fonte
Tente usar:
para ver os detalhes sobre seu processo de relatório.
Eu configurei meu jacoco assim:
Em seguida,
mvn jacoco:report -debug
mostra usando a configuração padrão, o que significa quejacoco.exec
não está em~/jacoco.exec
. O erro dizmissing execution data file
.Portanto, basta usar a configuração padrão:
E tudo funciona bem.
fonte
Às vezes, a execução é executada na primeira vez e, quando fazemos a instalação limpa do maven, ela não é gerada depois disso. O problema era usar true para skipMain e skip properties em maven-compiler-plugin do arquivo pom principal. Remova-os se eles foram introduzidos como parte de qualquer problema ou sugestão.
fonte
No meu caso, o agente de preparação tinha uma
destFile
configuração diferente , mas, portanto, o relatório teve que ser configurado com umdataFile
, mas essa configuração estava faltando. Depois dedataFile
adicionado, ele começou a funcionar bem.fonte