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", возможно, это сработает :)