JaCoCo с Maven-отсутствует файл данных выполнения

у нас есть многомодульный проект Maven, состоящий из родителя (HelloWorld) и разных детей (HelloWorldServices и HelloWorldPresentation), и использовать Jenkins для сборки.

ошибка после запуска успешного теста -

[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

строк, прежде чем он говорит

[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

вот как я определил Родительский плагин Pom JaCoCo:

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

не пом я упоминала верный. Я также пробовал то, что вы найдете везде, чтобы положить argLine в конфигурации, но все с тем же результатом. В JaCoCo .файл exec никогда не создавался, что бы я ни делал. Что касается целей, я использую

mvn clean install jacoco:prepare-agent jacoco:report

С тех пор, когда я опускаю цели jacoco, он даже не отображает информационное сообщение.

2 ответов


вы не должны вызывать агент после фазы установки, но до, поэтому вместо вызова:

mvn clean install jacoco:prepare-agent jacoco:report

вы должны вызвать

mvn clean jacoco:prepare-agent install jacoco:report

основная причина: агент не будет участвовать в жизненном цикле сборки,test фаза уже будет выполнена как часть install фаза, затем Maven выполнит агент в соответствии с вызовом командной строки, но будет слишком поздно.


вы, вероятно, также должны изменить плагин конфигурация выше:

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

примечание: Я удалил раздел конфигурации, потому что он фактически указывал на значения по умолчанию. Кроме того, элементы XML являются чувствительными к регистру здесь, поэтому ваш datafile элемент был просто проигнорирован, он должен был быть . То же самое относится к destFile.

на prepare-agent цель-уже через ${project.build.directory}/jacoco.exec по умолчанию destFile значением, то же самое относится к dataFile значение report цель. Основной причиной этого изменения будет более гибкая и стандартная сборка, не полагаясь на artifactId как имя проекта (по умолчанию, но по-прежнему не обязательно) и использование более общего ${project.build.directory} свойство вместо того, чтобы указывать непосредственно на target.


заключительное примечание: не забудьте настроить выполнение плагинов Jacoco в build/plugins и . The pluginManagement раздел предназначен для управления и общего согласования версий или конфигураций, но это будет игнорировать если соответствующий плагин не будет объявлен в build/plugins.
Согласно официальный Maven POM ссылка

pluginManagement: это элемент, который виден вдоль боковых плагинов. Plugin Management содержит элементы плагина почти таким же образом, за исключением того, что вместо настройки информации о плагине для этой конкретной сборки проекта он предназначен для настройки сборок проекта, которые наследуются от вот этот. однако это только настраивает плагины, на которые фактически ссылаются в элементе plugins в детей. Дети имеют полное право отменить pluginManagement определений.

(Примечание: жирный мой)


Я думаю, что "destfile" и "datafile" чувствительны к регистру, поэтому попробуйте заменить их " destFile "и" dataFile", возможно, это сработает :)