2016-03-30 24 views
10

Bir ebeveyn (HelloWorld) ve farklı çocuklar (HelloWorldServices ve HelloWorldPresentation) içeren bir Maven çoklu modül projemiz var ve Jenkins'i oluşturmak için kullanın. GelenMavenli JaCoCo - yürütme verisi dosyası eksik

<plugin> 
    <groupId>org.jacoco</groupId> 
    <artifactId>jacoco-maven-plugin</artifactId> 
    <version>0.7.6.201602180812</version> 
    <configuration> 
     <destfile>${project.artifactId}/target/jacoco.exec</destfile> 
     <datafile>${project.artifactId}/target/jacoco.exec</datafile> 
    </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> 

: Bu

[INFO] --- jacoco-maven-plugin:0.7.6.201602180812:prepare-agent (default-cli) @ HelloWorldServices --- 
[INFO] argLine set to -javaagent:/var/lib/jenkins/.m2/repository/org/jacoco/org.jacoco.agent/0.7.6.201602180812/org.jacoco.agent-0.7.6.201602180812-runtime.jar=destfile=/var/lib/jenkins/workspace/HelloWorld/HelloWorldServices/target/jacoco.exec 

Bu benim ana pom JaCoCo eklentisi tanımlı nasıl olduğunu söylüyor önce

başarılı testini çalıştırdıktan sonra hata

[INFO] --- jacoco-maven-plugin:0.7.6.201602180812:report (default-cli) @ HelloWorldServices --- 
[INFO] Skipping JaCoCo execution due to missing execution data file:/var/lib/jenkins/workspace/HelloWorld/HelloWorldServices/target/jacoco.exec 

hatları hiçbir pomma açıkça ateşten bahsetmiştim. Ayrıca argLine'i konfigürasyona koymak için her yerde bulduğunuz şeyi denedim ama hepsi aynı sonuçla. Ne yaparsam yapayım, JaCoCo .exec dosyası hiç oluşturulmadı. Ben jacoco hedefleri atladığınızda, hatta INFO mesajı görüntülenmez yana hedeflerine gelince, ben

mvn clean install jacoco:prepare-agent jacoco:report 

kullanın.

+1

'mvn temiz jacoco'yu deneyin: prepare-agent install' yerine (iki aşama arasındaki ajan) –

cevap

18

Sen çağırma yerine önce aşamasını yüklemek ama sonra ajan çağırmak, böylece olmamalıdır:

mvn clean install jacoco:prepare-agent jacoco:report 

Sen

mvn clean jacoco:prepare-agent install jacoco:report 

çağırmak gerekir ana nedeni: ajan için katılmayacak yapı ömrü, test fazı zaten install fazının bir parçası olarak yürütülür, daha sonra Maven komut satırına göre ajanı yürütür, ancak çok geç olacaktır.


Muhtemelen de yukarıdaki eklenti yapılandırmasını değiştirmek gerekir:

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

Not: aslında varsayılan değerlere işaret ediyordu çünkü yapılandırma bölümüne kaldırıldı. Ayrıca, XML öğeleri burada büyük/küçük harfe duyarlıdır, bu yüzden datafile öğeniz basitçe yoksayıldı, bunun yerine dataFile olmalıdır. Aynı şey destFile için geçerlidir.

prepare-agent gol zaten varsayılan destFile değeri, report gol dataFile değerine uygulanan aynı şekilde ${project.build.directory}/jacoco.exec kullanıyor. Bu değişikliğin ana nedeni, artifactId'a proje adı olarak (varsayılan, ancak zorunlu değil) dayanarak ve target numaralı bağlantı noktasında doğrudan belirtmek yerine daha genel ${project.build.directory} özelliğini kullanarak daha esnek ve standart bir yapı olacaktır.


Son Not: build/plugins bölümünde Jacoco Eklenti infaz yapılandırmak için emin olun ve build/pluginManagement/plugins bölümü. pluginManagement bölümü, sürümlerin veya yapılandırmaların yönetişimi ve ortak uyumlaştırması içindir, ancak ilgili eklentinin build/plugins altında bildirilmemesi durumunda ihmal olacaktır.pluginManagementofficial Maven POM reference

uyarınca
: Yan eklentileri boyunca görülen bir elementtir. Eklenti Yönetimi, bu proje için eklenti bilgilerini yapılandırmak yerine eklenti öğelerini aynı şekilde içerir, bunun dışında kalan proje yapılarını yapılandırması amaçlanır. Bununla birlikte, bu, yalnızca çocuklarda eklenti öğesi içinde başvurulan eklentileri yapılandırır. Çocukların pluginManagement tanımlarını geçersiz kılma hakkı vardır.

(not: koyu benimdir)

+0

Sadece 'mvn install' çağrıldığında bu işi yapmak için ne yapmam gerekiyor? Açıkça jacoco hedeflerini çağırmazsam, idam edilmeyecekler. – dasLort

+0

@dasLort Maven'in hangi sürümünü kullanıyorsunuz? Örnek bir çoklu modül projesi ile sorununuzu yeniden oluşturamadım, herhangi bir atlama uyarısı almadım ve düzgün bir şekilde jacoco raporlarını aldım. –

+0

Maven 3.3.9 ve (Jenkins) Maven Entegrasyonu Eklentisi 2.12.1. Yani 'mvn install' diyebiliyorsunuz ve yukarıdaki konfigürasyon jacoco ile mi çalışacaksınız? – dasLort

2

Ben, belki de çalışacağız "destfile" ve "veri dosyası" vaka "destFile" ve "Datafile" bunların yerine deneyin böylece duyarlı olduğunu düşünüyorum: