JaCoCo yürütüldüğünde "Eksik yürütme veri dosyası nedeniyle JaCoCo yürütmesi atlanıyor"


123

Maven 3.0.3, JUnit 4.8.1 ve Jacoco 0.6.3.201306030806 kullanıyorum ve test kapsamı raporları oluşturmaya çalışıyorum.

Yalnızca birim testleri olan bir projem var, ancak çalıştırılacak raporları alamıyorum, sürekli olarak şu hatayı alıyorum: Skipping JaCoCo execution due to missing execution data fileçalıştırdığımda:

mvn clean install -P test-coverage

Pom'ım şu şekilde yapılandırılıyor:

<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>

Tüm testlerim başarıyla yapıldı. İşte Maven'in bazı çıktıları:

[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] 

Hangi konfigürasyonu kaçırdığıma dair bir fikrin var mı?



Görünüşe göre ponponda entegrasyon testleri var, bu da dikkat dağıtıcı olabilir. Ayrıca, destFilevarsayılan hedef / jacoco.exec dosyasını çıkardık ve yazmasına izin verdik.
MarkHu

Bu konuma cevap gönderdim .
Shivkumar Kawtikwar

Yanıtlar:


135

jacoco-maven-eklentisi: 0.7.10-SNAPSHOT

Gönderen jacoco:-agent hazırlamak diyor ki:

Maven-surefire-plugin durumunda bunu yapmanın yollarından biri, geç mülk değerlendirmesi için sözdizimi kullanmaktır:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <argLine>@{argLine} -your -extra -arguments</argLine>
  </configuration>
</plugin>

Not @{argLine}olarak eklenir o -your -extra -arguments.

Yorumdaki değişikliği ve bildirimi fark ettiği için teşekkürler Slava Semushin .

jacoco-maven-eklentisi: 0.7.2-SNAPSHOT

Jacoco'nun ardından : hazırla-ajan diyor ki:

[org.jacoco: jacoco-maven-plugin: 0.7.2-SNAPSHOT: hazırlama-aracısı] Test edilen uygulamaya bir VM argümanı olarak aktarılabilen JaCoCo çalışma zamanı aracısına işaret eden bir özellik hazırlar. Proje paketleme türüne bağlı olarak, varsayılan olarak aşağıdaki ada sahip bir özellik ayarlanır:

  • tycho.testArgLine paketleme tipi eclipse-test-eklentisi için ve
  • aksi takdirde argLine.

Bu özelliklerin test yapılandırması tarafından üzerine yazılmaması gerektiğini unutmayın, aksi takdirde JaCoCo aracısı eklenemez. Özel parametrelere ihtiyacınız varsa, lütfen bunları ekleyin. Örneğin:

<argLine>${argLine} -your -extra -arguments</argLine>

Ortaya çıkan kapsam bilgileri yürütme sırasında toplanır ve varsayılan olarak işlem sona erdiğinde bir dosyaya yazılır.

Aşağıdaki satırı maven-surefire-plugineklenti yapılandırmasından değiştirmelisiniz ( ${argLine}içeriye dikkat edin <argLine>):

<argLine>-Xmx2048m</argLine>

için

<argLine>${argLine} -Xmx2048m</argLine>

Diğer eklentide de gerekli değişiklikleri yapın maven-failsafe-pluginve aşağıdakileri değiştirin (tekrar dikkat edin ${argLine}):

<argLine>-Xmx4096m -XX:MaxPermSize=512M ${itCoverageAgent}</argLine>

için

<argLine>${argLine} -Xmx4096m -XX:MaxPermSize=512M ${itCoverageAgent}</argLine>

Şimdi olsa da, bu sorun, jacoco hedefi olmadan, yapı başarısız olur.
Andreas

İçin çalıştı ama tycho kullandığım için tycho.testArgLine kullanmak zorunda kaldım.
Raffi Khatchadourian

1
Alıntılanan bağlantının şimdi kullanmak için biraz farklı bir önerisi var @{argLine}.
Slava Semushin

2
Tam olarak bu benim sorunumdu. Mvn komutunda özel argümanlar vardı mvn clean package sonar:sonar -U -DargLine="-Dxxx=yyy". Açıkça maven-surefire-eklentisini beyan etmiyorum ve konfigürasyonları ayarlamıyorum. Maven komut satırına argLine yer tutucusunu ekledim mvn clean package sonar:sonar -U -DargLine="@{argLine} -Dxxx=yyy". Artık jacoco.exec dosyası oluşturulmuş ve sonarda kapsama raporu üretilmiştir.
RenatoIvancic

1
İşe yarıyor !!! Sorun, Entegrasyon testleri için belleği artırmak amacıyla maven-surefire-eklentisine eklediğim bir <argLine> yapılandırmasından kaynaklanıyordu. <argLine> $ {argLine} --my - additional-arguments - here-- </ argLine yapılandırılıyor > sorunu çözdü
Massimo Da Ros

23

Aynı hatayı döndüren biraz farklı bir sorunla karşılaştım.

Skipping JaCoCo execution due to missing execution data /target/jacoco.exec

Gerçek şu ki, bu hata birçok nedenden dolayı geri döndürülür. Stack Overflow'da farklı çözümleri denedik, ancak bu kaynağı bulduk en iyisi . Jacoco'nun neden aynı hatayı verebileceğinin birçok farklı olası nedenini ortadan kaldırıyor.

Bizim için çözüm, konfigürasyona bir hazırlık ajanı eklemekti.

<execution>
   <id>default-prepare-agent</id>
   <goals>
       <goal>prepare-agent</goal>
   </goals>
</execution>

Çoğu kullanıcının bunu farklı nedenlerle deneyimleyeceğini tahmin ediyorum, bu yüzden yukarıda belirtilen kaynağa bir göz atın!


2
Sanırım başardın. İnsanlar "hızlı düzeltme" için Google'da arama yapabilir, ancak en doğru cevap "Gerçek şu ki, bu hata birçok nedenden dolayı geri döndü" olacaktır. Sadece ne olduğunu bulmalıyım. Benim için, maven-surefire-eklentisindeki <argLine> üzerine yazan bir ebeveyn pomdu.
tuan.dinh

Bu! Teşekkürler. Aynı mesajı aldım, ancak bunun nedeni, surefire eklentimimin yalnızca **/*Test.javatest sınıflarımın adı verildiğinde adlandırılan dosyaları arıyordu*Tests.java
Roger Worrell

İki problemim vardı: 1. Hiçbir test sınıfı yok, en az bir *Test.javasınıfa ve @TestJacoco'nun bir şeyler yapabilmesi için açıklamalı bir test yöntemine ihtiyacım var. 2. Travis ortamında projem için yazım hatası olan değişkenler SONART_TOKEN=*****adlandırılmalıydı SONAR_TOKEN=*****. Travis dokümanlar bakın burada , aramak or define SONAR_TOKEN in your Repository Settings. Bunu düzelttikten sonra, derleme başarıyla çalıştı. Söz konusu gitbhub projemi görüntüleyebilirsiniz .
Jose Quijada

16

Pom'daki başka bir argline kurulumunun veya eklentisinin jacoco yürütme düzeni kurulumunu geçersiz kıldığı bir durum olabilir.

argLine - olarak ayarlandı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

Örneklerden biri

           <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.16</version>
                <configuration>
                    <forkCount>5</forkCount>
                    <reuseForks>true</reuseForks>
                    <argLine>-Dnet.sf.ehcache.disabled=true</argLine>
                </configuration>
            </plugin>

Bu eklentilerden argLine'dan kurtulduktan sonra jacoco normal bir şekilde çalışmaya başladı.


Sorunumu çözdüm. Harika yer!
user1974753

13

Ayrıca projede eksik testler nedeniyle "Eksik yürütme veri dosyası nedeniyle JaCoCo yürütmesi atlanıyor" hatası alabilirsiniz. Örneğin, yeni bir proje başlattığınızda ve hiç * Test.java dosyanız olmadığında.


5

FTdrury ne dedi:

eklenti yapılandırmanızı şu şekilde değiştirin:

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.6.3.201306030806</version>
    <executions>
      <!-- prepare agent for measuring integration tests -->
      <execution>
        <id>prepare-integration-tests</id>
        <phase>pre-integration-test</phase>
        <goals>
          <goal>prepare-agent</goal>
        </goals>
        <configuration>
          <destFile>${basedir}/target/coverage-reports/jacoco-unit.exec</destFile>
        </configuration>
      </execution>
      <execution>
        <id>jacoco-site</id>
        <phase>post-integration-test</phase>
        <goals>
          <goal>report</goal>
        </goals>
        <configuration>
          <dataFile>${basedir}/target/coverage-reports/jacoco-unit.exec</dataFile>
        </configuration>
      </execution>
    </executions>
  </plugin>

Düzenleme: Sadece önemli bir şey fark ettim, destFile ve dataFile büyük / küçük harfe duyarlı görünüyor, bu yüzden destfile değil destFile olması gerekiyor.


5

Bu sorunun oldukça eski olduğunu biliyorum ama benim gibi biri buraya bir cevap aramaya gelirse, bu yardımcı olabilir. Bununla yukarıdaki hatanın üstesinden gelmeyi başardım.

1) Aşağıdaki kod parçasını maven-surefire-eklenti eklentisinden kaldırın

 <reuseForks>true</reuseForks>
 <argLine>-Xmx2048m</argLine>

2) Aşağıdaki hedefi ekleyin:

<execution>
<id>default-prepare-agent</id>
<goals>
   <goal>prepare-agent</goal>
</goals>
</execution>

3

Şimdi aynı problemle karşılaştım.

Adında bir sınıfım var HelloWorldve onun için adlandırılmış bir test sınıfı oluşturdum HelloWorldTests, sonra çıktıyı aldımSkipping JaCoCo execution due to missing execution data file.

Sonra değiştirmeyi denedim pom.xml , ancak girişim başarısız oldu.

Son olarak, ben sadece adlandırmak HelloWorldTestsiçin HelloWorldTestve işe yaradı!

Sanırım , jacoco varsayılan olarak yalnızca like adlı test sınıfını tanır XxxTest, bu da bunun test sınıfı olduğunu gösterir Xxx. Bu nedenle, test sınıflarınızı bu formatta yeniden adlandırmanız yeterlidir!


2

Tüm yanıtları denedim, ancak yalnızca aşağıdaki tavsiye kombinasyonu benim için çalıştı. Neden? Çok özel gereksinimlerim vardı:

  1. JaCoCo, derleme komut satırından çalıştırıldığında rapor oluşturur: mvn clean verify (Maven 3.6.0)
  2. Intellij IDEA (2019.01) testlerimi de çalıştırıyor
  3. Hepsi javaagent, surefireeklentide tanımlanmış başka bir şeyin varlığında çalışır

Çözüm - SSS'de açıklandığı gibi "geç değiştirme" maven özelliğiyle yapılandırmadaki argLinedeğeri başa ekleyin ( sabit yapılandırmam )surefire@{...}surefire

ArgLine'da diğer eklentiler tarafından ayarlanan özellikleri nasıl kullanırım? Maven mülkün yerine geçer

Herhangi bir eklenti çalıştırılmadan önce pom.xml'deki $ {...} değerleri. Bu yüzden Surefire, yer sahiplerini argLine özelliğinde asla görmez. Sürüm 2.17 bu özellikler için alternatif bir sözdizimi kullandığından,

@ {...}, eklenti çalıştırıldığında özelliklerin geç değiştirilmesine izin verir, böylece diğer eklentiler tarafından değiştirilen özellikler doğru bir şekilde alınacaktır.

İlk deneme başarısız oldu - hedef yapılandırmasında jaCoCoArgLine özelliğini tanımlama - senaryo ikinci gereksinimi karşılamadı, IntelliJ IDEA projede statik yöntemle alay etmek için kullandığım jmockit için aracı bulamadıprepare-agentjacoco


JMockit ile kullanırken aynı sorunla karşılaştı ve sorunu bu çözümle çözebildi. yani, surefire eklentisine argLine ekleniyor
Karthik Rao

1

Aşağıdaki özelliklere sahip 1 Domain sınıfına sahip bir Maven / Java projesi ekledim :

  • Surefire ve Failsafe eklentileri ile Birim veya Entegrasyon testi .
  • Findbugs.
  • Jacoco aracılığıyla kapsamı test edin .

Jacoco sonuçları nerede? "Mvn clean" i test edip çalıştırdıktan sonra sonuçları "target / site / jacoco / index.html" içinde bulabilirsiniz. Bu dosyayı tarayıcıda açın.

Zevk almak!

Projeyi olabildiğince basit tutmaya çalıştım. Proje, bu yazılardan birçok öneriyi örnek bir projede bir araya getiriyor. Teşekkürler, katkıda bulunanlar!


Git projenizi denedim ama raporu nasıl göreceğim belli değil.
Nagaraj Vittal

Jacoco sonuçları nerede? "Mvn clean" i test edip çalıştırdıktan sonra sonuçları "target / site / jacoco / index.html" içinde bulabilirsiniz. Bu dosyayı tarayıcıda açın.
tm1701

Deponuzu stackoverflow'a geri bağlamak isteyebilirsiniz. Demonuzda bir hata bulduktan sonra soruyu tekrar bulmakta zorlandım.
Wolfgang Fahl

Ve yine de beklendiği gibi çalışmıyor :-( hedef dizinde mvn temiz kurulum yaparken içeriği olduğu için yalnızca aggregate.exec var ...
Wolfgang Fahl

1

Günlerce mücadele ettim. Bu başlıkta önerilen tüm farklı konfigürasyonları denedim. Hiçbiri çalışmıyor. Son olarak, yalnızca önemli yapılandırmanın aracı hazırlama hedefi olduğunu buldum . Ama bunu doğru aşamaya koymalısın. O kadar çok örnek onu " entegrasyon öncesi test " e koyduğunu gördüm , bu yanıltıcı, çünkü sadece birim testinden sonra yürütülecek. Yani birim testi enstrümantasyona tabi tutulmayacak.

Doğru yapılandırma yalnızca varsayılan aşamayı kullanmalıdır (aşamayı açıkça belirtmeyin). Ve genellikle, maven-surefire-plugin etrafında toplanmanıza gerek yoktur .

  <plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.4</version>
    <executions>
      <execution>
        <id>default-prepare-agent</id>
        <goals>
          <goal>prepare-agent</goal>
        </goals>
      </execution>
      <execution>
        <id>jacoco-site</id>
        <phase>post-integration-test</phase>
        <goals>
          <goal>report</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

0

Yürütme, jacoco verilerini /Users/davea/Dropbox/workspace/myproject/target/jacoco.exec içine koyduğunu söylüyor, ancak maven yapılandırmanız verileri $ {basedir} / target / kapsama-raporları / jacoco-unit içinde arıyor. exec.


1
Doğru, peki neden eklenti yapılandırmada belirttiğim şeyi görmezden geliyor?
Dave

Destfile yapılandırmanızı aracı hazırlama yürütmesinin yapılandırmasına taşımayı deneyin. Tüm maven eklentileri, yapılandırma kalıtımını nazikçe işlemez.
tdrury

0

Cevabım çok geç ancak diğer kullanıcılar için Sizin durumunuzda itCoverageAgent değişkeninde kaydedilen komut satırı aracısı yapılandırmasını kullanmak için hataya dayanıklı eklenti yapılandırmanız gerekir. Örneğin

<configuration>
    <argLine>${itCoverageAgent}</argLine>
</configuration>

Maven yapılandırmanızda, jacoco komut satırı argümanlarını aracı hazırlama aşamasında hazırlar, ancak hata korumalı eklenti onu kullanmaz, dolayısıyla yürütme veri dosyası yoktur.


0

Kullanmaya çalışmak:

mvn jacoco:report -debug

raporlama sürecinizle ilgili ayrıntıları görmek için.

Jacob'ımı şu şekilde yapılandırdım:

<configuration>
    <dataFile>~/jacoco.exec</dataFile>
    <outputDirectory>~/jacoco</outputDirectory>
</configuration>

Ardından mvn jacoco:report -debugvarsayılan yapılandırmayı kullanarak gösterir, yani jacoco.execiçinde değildir ~/jacoco.exec. Hata diyor missing execution data file.

Bu nedenle, yalnızca varsayılan yapılandırmayı kullanın:

<execution>
    <id>default-report</id>
    <goals>
    </goals>
    <configuration>
        <dataFile>${project.build.directory}/jacoco.exec</dataFile>
        <outputDirectory>${project.reporting.outputDirectory}/jacoco</outputDirectory>
    </configuration>
</execution>

Ve her şey yolunda gidiyor.


0

Bazen yürütme ilk kez çalışır ve temiz kurulum yaptığımızda, bundan sonra oluşmaz. Sorun, skipMain için true kullanmak ve ana pom Dosyasının maven-compiler-eklentisi altındaki özellikleri atlamaktı. Herhangi bir sorunun veya önerinin parçası olarak tanıtılmışlarsa bunları kaldırın.


0

Benim durumumda, hazırlama aracısının destFileyapılandırması farklıydı , ancak buna göre raporun bir ile yapılandırılması gerekiyordu dataFile, ancak bu yapılandırma eksikti. Eklendikten sonra dataFileiyi çalışmaya başladı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.