webentwicklung-frage-antwort-db.com.de

JaCoCo mit Maven - fehlende Ausführungsdaten-Datei

Wir haben ein Maven Multi-Modul-Projekt, bestehend aus einem Elternteil (Hello World) und verschiedene Kinder (HelloWorldServices und HelloWorldPresentation) und verwenden Jenkins zu bauen.

Der Fehler nach dem erfolgreichen Test läuft

[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

Die Linien, bevor er sagt

[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

So habe ich das übergeordnete JaCoCo-Plugin definiert:

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

In keinem pom hat ausdrücklich todsichere ich erwähnt. Ich habe auch versucht, was Sie überall finden die argLine in der Konfiguration zu bringen, aber alle mit dem gleichen Ergebnis. Die JaCoCo .exec Datei erstellt nie, egal, was ich tue. Was die Ziele, ich benutze

mvn clean install jacoco:prepare-agent jacoco:report

Da, wenn ich die jacoco Ziele auslassen, ist es nicht einmal die INFO-Nachricht angezeigt werden soll.

18
dasLort

Sie sollten nicht den Agenten aufrufen, nachdem die Phase installieren, aber vor, so dass anstelle von Aufrufen:

mvn clean install jacoco:prepare-agent jacoco:report

Sie sollten aufrufen

mvn clean jacoco:prepare-agent install jacoco:report

Der Hauptgrund ist: Der Agent nimmt nicht am Build-Lebenszyklus teil, die test-Phase wird bereits als Teil der install-Phase ausgeführt, dann führt Maven den Agenten gemäß dem Befehlszeilenaufruf aus, aber es ist zu spät.


Sie sollten wahrscheinlich auch die Plug-in-Konfiguration wie folgt ändern:

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

Hinweis: Ich habe den Konfigurationsabschnitt entfernt, da er tatsächlich auf Standardwerte verweist. Da bei XML-Elementen die Groß- und Kleinschreibung beachtet wird, wurde Ihr datafile-Element einfach ignoriert. Stattdessen sollte es dataFile lauten. Gleiches gilt für destFile.

Das Ziel prepare-agent verwendet bereits ${project.build.directory}/jacoco.exec als Standardwert für destFile. Dies gilt auch für den Wert dataFile für das Ziel report . Der Hauptgrund für diese Änderung wäre ein flexiblerer und standardmäßiger Build, der sich nicht auf artifactId als Projektnamen stützt (der Standardwert, aber immer noch nicht obligatorisch) und stattdessen die allgemeinere Eigenschaft ${project.build.directory} verwendet, um direkt auf target zu verweisen.


Letzter Hinweis: Stellen Sie sicher, dass Sie die Jacoco Plugin-Ausführungen im Abschnitt build/plugins und nicht im Abschnitt build/pluginManagement/plugins konfigurieren. Der Abschnitt pluginManagement ist für die Steuerung und gemeinsame Harmonisierung von Versionen oder Konfigurationen gedacht. Er wird jedoch ignoriert , wenn das entsprechende Plugin nicht unter build/plugins deklariert wird.
Gemäß offizielle Maven POM-Referenz

pluginManagement : ist ein Element, das an der Seite von Plug-in zu sehen ist. Die Plug-in-Verwaltung enthält Plug-in-Elemente auf die gleiche Weise, mit der Ausnahme, dass die Plug-in-Informationen für diesen bestimmten Projektbuild nicht konfiguriert werden, sondern Projektbuilds konfiguriert werden sollen, die von diesem Build erben. Hiermit werden jedoch nur Plugins konfiguriert, auf die im plugins-Element in den untergeordneten Elementen tatsächlich verwiesen wird. Die Kinder haben das Recht, pluginManagement Definitionen zu überschreiben.

(Anmerkung: fett ist meins)

30
A_Di-Matteo

Ich denke, dass "destfile" und "datafile" zwischen Groß- und Kleinschreibung unterscheiden. Versuchen Sie daher, sie durch "destFile" und "dataFile" zu ersetzen. Vielleicht funktioniert es :)

3
Bogdan Halmaghi
  • JaCoCo-Berichte werden aus der Ausführungsdatendatei erstellt.
  • Wenn diese Datei nicht vorhanden ist, überspringt das JaCoCo-Berichtsziel die Berichtserstellung.
  • Es ist daher obligatorisch, eine Ausführungsdatendatei zu erstellen.

Folgende Gründe können dafür verantwortlich sein, dass keine Ausführungsdatendatei erstellt wird.
- Tests sind nicht vorhanden.
- Alle Tests werden ignoriert.
- Das Surefire-Plugin fehlt.
- JaCoCos Prepare-Agent-Ziel wird nicht ausgeführt, wodurch argLine festgelegt wird, das konfiguriert werden muss, um einen sicheren Betrieb zu gewährleisten.
- Das Surefire-Plugin ist nicht mit JaCoCos Agent konfiguriert.

1