如何从命令行配置JaCoCo maven插件

时间:2016-04-20 11:45:48

标签: java maven plugins jacoco

我试图从命令行使用pom.xml配置JaCoCo maven插件。到目前为止,我已使用命令

设法执行prepare-agent
mvn -X -Djacoco.destFile=./coverage/jacoco.exec clean org.jacoco:jacoco-maven-plugin:prepare-agent install

带输出:

[DEBUG] Configuring mojo org.jacoco:jacoco-maven-plugin:0.7.6.201602180812:prepare-agent from plugin realm ClassRealm[plugin>org.jacoco:jacoco-maven-plugin:0.7.6.201602180812, parent: sun.misc.Launcher$AppClassLoader@70dea4e]
[DEBUG] Configuring mojo 'org.jacoco:jacoco-maven-plugin:0.7.6.201602180812:prepare-agent' with basic configurator -->
[DEBUG]   (f) destFile = /src/coverage/jacoco.exec
...

创建./coverage/jacoco.exec文件,现在我尝试运行report阶段,但我无法为此阶段设置属性。我正在运行命令:

mvn -X -Djacoco.dataFile=./coverage/jacoco.exec -Djacoco.outputDirectory=./jacoco_ut org.jacoco:jacoco-maven-plugin:report

mvn -X -DdataFile=./coverage/jacoco.exec -DoutputDirectory=./jacoco_ut org.jacoco:jacoco-maven-plugin:report

jacoco:report中一样,jacoco:prepare-agent中没有user property

我的输出如下:

[DEBUG] Configuring mojo 'org.jacoco:jacoco-maven-plugin:0.7.6.201602180812:report' with basic configurator -->
[DEBUG]   (f) dataFile = /src/target/jacoco.exec
[DEBUG]   (f) outputDirectory = /src/target/site/jacoco
[DEBUG]   (f) outputEncoding = UTF-8
[DEBUG]   (f) project = MavenProject: project:3.2.0-SNAPSHOT @ /src/pom.xml
[DEBUG]   (f) skip = false
[DEBUG]   (f) sourceEncoding = UTF-8
[DEBUG] -- end configuration --

使用默认值。

3 个答案:

答案 0 :(得分:3)

更新至0.7.8

jacoco-maven-plugin的{​​{3}}起,GitHub issue 322已得到解决。从此版本开始,您可以使用用户属性jacoco.dataFile,因此问题中的命令可以按原样运行。

要在命令行强制使用该版本,您应该:

mvn -Djacoco.destFile=./coverage/jacoco.exec clean org.jacoco:jacoco-maven-plugin:0.7.8:prepare-agent install

您还可以在POM中配置jacoco-maven-plugin并明确指定此版本。

或保留默认值

在0.7.8版之前,dataFile属性没有version 0.7.8,因此您无法做到这一点。在调用

时,您正确覆盖了默认值
mvn -Djacoco.destFile=./coverage/jacoco.exec clean org.jacoco:jacoco-maven-plugin:prepare-agent install

因为user property是与destFile目标的prepare-agent属性相关联的用户属性的名称。

但是,report目标的相应jacoco.destFile属性没有用户属性。所以你最好的选择是保持默认值。

答案 1 :(得分:0)

当您不能使用属性时,可以使用环境变量。

当我获得Jacoco Diff Coverage时,jacoco:report includes无法使用属性。

所以我使用$ {inc_files}

Shell:

echo "+++git diff+++"
inc_files=`git diff --name-only master | grep -oP 'com/languoguang/xxclouds/quark.*.java' | xargs | sed 's/.java/.class/g' | xargs | sed -e 's/ /,/g'`;
echo ${inc_files};
echo "---git diff---";

echo "+++maven test jacoco+++";
mvn -B -f pom.xml -Dinc_files=${inc_files} clean test -Dmaven.test.failure.ignore=true;
echo "---maven test jacoco---";

pom.xml:

<execution>
    <configuration>
        <title>quark-frameworks-coverage-inc</title>
        <outputDirectory>${project.reporting.outputDirectory}/jacoco-aggregate/jacoco-aggregate-inc/</outputDirectory>
        <includes>${inc_files}</includes>
    </configuration>
    <id>report-aggregate-inc</id>
    <phase>test</phase>
    <goals>
        <goal>report-aggregate</goal>
    </goals>
</execution>

我希望这会有用。

答案 2 :(得分:0)

我们使用以下代码:

mvn clean devtestcov:atest -Dactive.devtest -Dmaven.test.failure.ignore=true -Djacoco-agent.destfile=target/jacoco.exec