Ответ 1
Вы не должны вызывать агента после фазы установки, но раньше, поэтому вместо вызова:
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
просто игнорировался, вместо этого он должен был быть datafile
. То же самое относится к destFile
.
Цель prepare-agent
уже использует ${project.build.directory}/jacoco.exec
как значение по умолчанию destFile
, то же самое относится к значению datafile
для report
. Основная причина этого изменения - более гибкая и стандартная сборка, не полагающаяся на artifactId
как имя проекта (по умолчанию, но все еще не обязательная) и используя более общее свойство ${project.build.directory}
вместо того, чтобы указывать непосредственно на target
.
Заключительное примечание: обязательно настройте выполнение плагинов Jacoco в разделе build/plugins
, а не build/pluginManagement/plugins
. Раздел pluginManagement
предназначен для управления и общей гармонизации версий или конфигураций, но он будет игнорироваться, если соответствующий плагин не будет объявлен в build/plugins
.
По официальной ссылке Maven POM
pluginManagement: это элемент, который отображается вдоль боковых плагинов. Плагин управления содержит элементы плагина почти таким же образом, за исключением того, что вместо того, чтобы настраивать информацию плагина для этой конкретной сборки проекта, он предназначен для настройки сборных проектов, которые наследуются от этого. Однако это только настраивает плагины, которые на самом деле ссылаются на элемент плагинов у детей. Дети имеют полное право переопределять определения
pluginManagement
.
(примечание: полужирный - мой)