Ich verwende Maven 3.0.3, JUnit 4.8.1 und Jacoco 0.6.3.201306030806 und versuche, Testberichterstattungsberichte zu erstellen.
Ich habe ein Projekt mit Unit - Tests nur, aber ich kann keine Berichte erhalten zu laufen, ich bin immer wieder den Fehler bekommen: Skipping JaCoCo execution due to missing execution data file
wenn ich laufe:
mvn clean install -P test-coverage
So ist mein Pom konfiguriert:
<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>
Alle meine Tests laufen erfolgreich. Hier sind einige der Ausgaben von 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]
Irgendwelche Ideen, welche Konfiguration mir fehlt?
destFile
Datei entfernt und in die Standarddatei target / jacoco.exec schreiben lassen.Antworten:
Jacoco-Maven-Plugin: 0.7.10-SNAPSHOT
Aus Jacoco: Prepare-Agent , der sagt:
Beachten Sie das
@{argLine}
, was hinzugefügt wurde-your -extra -arguments
.Vielen Dank an Slava Semushin, dass sie die Änderung bemerkt und im Kommentar berichtet hat .
Jacoco-Maven-Plugin: 0.7.2-SNAPSHOT
Nach jacoco: Prepare-Agent , der sagt:
Sie sollten die folgende Zeile in der
maven-surefire-plugin
Plugin-Konfiguration von ändern (beachten Sie das${argLine}
Innere<argLine>
):zu
Nehmen Sie auch die erforderlichen Änderungen am anderen Plugin vor
maven-failsafe-plugin
und ersetzen Sie Folgendes (beachten Sie erneut das${argLine}
):zu
quelle
@{argLine}
.mvn clean package sonar:sonar -U -DargLine="-Dxxx=yyy"
. Ich deklariere das Maven-Surefire-Plugin nicht explizit und setze Konfigurationen. Ich füge einfach argLine Platzhalter in die maven Kommandozeile wie hinzumvn clean package sonar:sonar -U -DargLine="@{argLine} -Dxxx=yyy"
. Jetzt wird die Datei jacoco.exec generiert und ein Abdeckungsbericht im Sonar erstellt.Ich hatte ein etwas anderes Problem, das denselben Fehler zurückgab.
Die Wahrheit ist, dass dieser Fehler aus vielen, vielen Gründen zurückgegeben wird. Wir haben mit den verschiedenen Lösungen für den Stapelüberlauf experimentiert, fanden diese Ressource jedoch am besten. Es werden die vielen verschiedenen möglichen Gründe aufgezeigt, warum Jacoco denselben Fehler zurückgeben könnte.
Für uns bestand die Lösung darin, der Konfiguration einen Vorbereitungsagenten hinzuzufügen.
Ich würde mir vorstellen, dass die meisten Benutzer es aus verschiedenen Gründen erleben werden. Schauen Sie sich also die oben genannte Ressource an!
quelle
**/*Test.java
als meine Testklassen benannt wurden*Tests.java
*Test.java
Klasse und eine mit Anmerkungen versehene Testmethode,@Test
damit Jacoco etwas tun kann. 2. In Travis sollten Umgebungsvariablen für mein Projekt, die Tippfehler hattenSONART_TOKEN=*****
, benannt werdenSONAR_TOKEN=*****
. Siehe Travis-Dokumente hier , suchen Sie nachor define SONAR_TOKEN in your Repository Settings
. Nachdem ich das behoben hatte, lief Build erfolgreich. Sie können mein fragliches Gitbhub-Projekt anzeigen .Es kann vorkommen, dass ein anderes Argline-Setup oder Plugin in pom das Setup der Jacoco-Ausführungsreihenfolge überschreibt.
argLine gesetzt auf -
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
Eines der Beispiele
Nachdem argLine von diesen Plugins entfernt wurde, begann jacoco normal zu arbeiten.
quelle
Es kann auch der Fehler "Überspringen der JaCoCo-Ausführung aufgrund fehlender Ausführungsdatendatei" aufgrund fehlender Tests im Projekt angezeigt werden. Zum Beispiel, wenn Sie ein neues Projekt starten und überhaupt keine * Test.java-Dateien haben.
quelle
Was tdrury sagte:
Ändern Sie Ihre Plugin-Konfiguration wie folgt:
Bearbeiten: Ich habe gerade eine wichtige Sache bemerkt: destFile und dataFile scheinen zwischen Groß- und Kleinschreibung zu unterscheiden, daher sollte es destFile sein, nicht destfile.
quelle
Ich weiß, dass diese Frage ziemlich alt ist, aber wenn jemand wie ich hierher kommt, um eine Antwort zu suchen, könnte dies helfen. Damit konnte ich den oben genannten Fehler überwinden.
1) Entfernen Sie den folgenden Code aus dem Plugin Maven-Surefire-Plugin
2) Fügen Sie das folgende Ziel hinzu:
quelle
Kam gerade über das gleiche Problem.
Ich habe eine Klasse mit dem Namen
HelloWorld
und habe eine Testklasse mit dem Namen erstelltHelloWorldTests
. Dann habe ich die Ausgabe erhaltenSkipping JaCoCo execution due to missing execution data file.
Ich habe dann versucht, meine zu ändern
pom.xml
, damit es funktioniert, aber der Versuch ist fehlgeschlagen.Schließlich benenne ich einfach
HelloWorldTests
zuHelloWorldTest
, und es funktionierte!Ich denke also, dass jacoco standardmäßig nur Testklassen mit dem Namen like erkennt
XxxTest
, was darauf hinweist, dass es die Testklasse für istXxx
. Benennen Sie einfach Ihre Testklassen in dieses Format um, das sollte funktionieren!quelle
Ich habe alle Antworten ausprobiert, aber nur die folgende Kombination von Ratschlägen hat für mich funktioniert. Warum? Ich hatte sehr spezielle Anforderungen:
mvn clean verify
(Maven 3.6.0)javaagent
imsurefire
Plugin definierten PluginsLösung - Stellen Sie den
argLine
Wert in dersurefire
Konfiguration mit der Maven-Eigenschaft "Late Replacement" voran,@{...}
wie in densurefire
FAQ ( meine feste Konfiguration ) erläutert.Fehler beim ersten Versuch - Definieren der Eigenschaft jaCoCoArgLine in der Zielkonfiguration
prepare-agent
vonjacoco
- Das Szenario hat meine zweite Anforderung nicht erfüllt. IntelliJ IDEA konnte den Agenten für jmockit, den ich im Projekt für das Verspotten statischer Methoden verwende, nicht ermittelnquelle
Ich habe ein Maven / Java-Projekt mit 1 Domänenklasse mit den folgenden Funktionen hinzugefügt :
Wo sind die Jacoco-Ergebnisse? Nach dem Testen und Ausführen von 'mvn clean' finden Sie die Ergebnisse in 'target / site / jacoco / index.html'. Öffnen Sie diese Datei im Browser.
Genießen!
Ich habe versucht, das Projekt so einfach wie möglich zu halten. Das Projekt fasst viele Vorschläge aus diesen Beiträgen in einem Beispielprojekt zusammen. Vielen Dank, Mitwirkende!
quelle
Ich kämpfte tagelang. Ich habe alle in diesem Thread vorgeschlagenen Konfigurationen ausprobiert. Keiner von ihnen funktioniert. Schließlich finde ich nur die wichtige Konfiguration ist das Ziel des Vorbereitungsagenten . Aber Sie müssen es in die richtige Phase bringen. Ich habe so viele Beispiele im " Pre-Integration-Test " gesehen, das ist irreführend, da es erst nach dem Unit-Test ausgeführt wird. Der Unit-Test wird also nicht instrumentiert.
Die richtige Konfiguration sollte nur die Standardphase verwenden (geben Sie die Phase nicht explizit an). Und normalerweise müssen Sie sich nicht um das Maven-Surefire-Plugin kümmern .
quelle
Die Ausführung besagt, dass die Jacoco-Daten in /Users/davea/Dropbox/workspace/myproject/target/jacoco.exec abgelegt werden, aber Ihre Maven-Konfiguration sucht nach den Daten in $ {basedir} / target / Coverage-Reports / Jacoco-Unit. exec.
quelle
Meine Antwort ist sehr spät, aber für andere Benutzer. In Ihrem Fall müssen Sie das ausfallsichere Plug-in konfigurieren, um die in der Variablen itCoverageAgent gespeicherte Konfiguration des Befehlszeilenagenten zu verwenden. Zum Beispiel
In Ihrer Maven-Konfiguration bereitet jacoco die Befehlszeilenargumente in der Phase des Agentenvorbereitens vor, das ausfallsichere Plugin verwendet es jedoch nicht, sodass keine Ausführungsdatendatei vorhanden ist.
quelle
Versuchen zu benutzen:
um die Details zu Ihrem Berichtsprozess anzuzeigen.
Ich habe meinen Jacoco folgendermaßen konfiguriert:
Dann
mvn jacoco:report -debug
zeigt es die Standardkonfiguration verwenden, die Mitteljacoco.exec
nicht in~/jacoco.exec
. Der Fehler sagtmissing execution data file
.Verwenden Sie einfach die Standardkonfiguration:
Und alles funktioniert gut.
quelle
Manchmal wird die Ausführung zum ersten Mal ausgeführt, und wenn wir eine Maven-Neuinstallation durchführen, wird sie danach nicht generiert. Das Problem war die Verwendung von true für skipMain und die Eigenschaften skip unter dem Maven-Compiler-Plugin der Haupt-POM-Datei. Entfernen Sie sie, wenn sie als Teil eines Problems oder Vorschlags eingeführt wurden.
quelle
In meinem Fall hatte der Vorbereitungsagent eine andere
destFile
Konfiguration, aber dementsprechend musste der Bericht mit einem konfiguriert werdendataFile
, aber diese Konfiguration fehlte. Sobald dasdataFile
hinzugefügt wurde, fing es an, gut zu funktionieren.quelle