当前位置: 首页 > 知识库问答 >
问题:

带有Maven的JaCoCo-缺少执行数据文件

雷曜灿
2023-03-14

我们有一个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
<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>
mvn clean install jacoco:prepare-agent jacoco:report

共有1个答案

萧建木
2023-03-14

您不应在安装阶段之后而是之前调用代理,因此不应调用:

mvn clean install jacoco:prepare-agent jacoco:report

您应该调用

mvn clean jacoco:prepare-agent install jacoco:report

主要原因是:代理将不参与构建生命周期,测试阶段将作为安装阶段的一部分执行,然后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>

prepare-agent目标已经使用${project.build.directory}/jacoco.exec作为默认destfile值,这与report目标的datafile值相同。这一更改的主要原因是一个更加灵活和标准的构建,不依赖Artifactid作为项目名称(默认值,但仍不是强制性的),而是使用更通用的${project.build.directory}属性直接指向target

最后注意:确保在build/plugins部分而不是build/pluginmanagement/plugins部分配置Jacoco插件的执行。pluginmanagement部分用于治理和版本或配置的公共协调,但是如果没有按照官方的Maven POM引用在build/plugins.
下声明相应的插件,则该部分将被忽略

PluginManagement:是一个可以在插件旁边看到的元素。插件管理以几乎相同的方式包含插件元素,只是它不是为这个特定的项目构建配置插件信息,而是要配置从这个项目构建继承的项目构建。但是,这只配置子级中的plugins元素中实际引用的插件。子级完全有权重写pluginmanagement定义。

(注:粗体是我的)

 类似资料:
  • 问题内容: 我们有一个Maven多模块项目,其中包含一个父级(HelloWorld)和不同的子级(HelloWorldServices和HelloWorldPresentation),并使用Jenkins进行构建。 运行成功的测试后的错误是 前面的线说 这是我定义父pom JaCoCo插件的方式: 我没有明确提到过surefire。我还尝试了到处都可以找到的将argLine放入配置中的结果,但是所

  • 我有一个小的Maven应用程序,它使用JaCoCo进行测试覆盖报告。我不断得到以下错误: 由于缺少执行数据文件,正在跳过JaCoCo执行 这是我的POM。xml文件。我自己删除了项目元素。 这是我的主类,它位于结构下: 这是带有单元测试的类,它位于结构下: 我该如何解决这个问题?

  • 我得到了 我错过了什么?

  • 我正在使用 Maven 3.8.3、JUnit 5.4.2 和 Jacoco 0.8.2,并且我正在尝试创建测试覆盖率报告。 我有一个只有单元测试的项目,但我无法运行报告,我反复收到错误:由于运行时缺少执行数据文件而跳过JaCoCo执行: 以下是我的pom的配置方式: 任何想法,我错过了什么配置?

  • 我将与NetBean IDE 8.1一起使用。 我是Maven和JavaFX打包的新手,所以我期待一些易于使用和理解的东西。

  • 我有一个页面来显示一个从PHPmyAdmin数据库中提取信息的表,但是最新的数据行似乎总是丢失的,尽管表中有一行数据(只是空的)。如果我添加另一行,它会使前面的缺失行出现,但最新的一个是空的-非常恼人,我只是不明白为什么会发生这种情况! 查询以拉取信息: 显示表: CSS(不确定这是否会影响它)