You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gradle从3.5迁移至4.6后Jacoco插件无法生成exec文件

解决Gradle 4.6迁移后Jacoco报告任务被跳过的问题

我之前升级Gradle版本时也碰到过类似的Jacoco任务异常,结合你提供的日志和脚本信息,咱们来拆解解决:

问题根源

Gradle 4.x对Jacoco插件的任务触发逻辑做了优化,jacocoTestReport任务默认的onlyIf条件会检查测试任务是否生成了有效的Jacoco exec数据文件。如果exec文件不存在、或者测试任务根本没执行,这个报告任务就会被标记为跳过,也就是你日志里看到的Skipping task ':common:jacocoTestReport' as task onlyIf is false。

分步解决方案

1. 先确认测试任务是否真的执行并生成了exec文件

首先执行带详细日志的测试命令,确认测试任务的状态:

./gradlew clean test --info

重点看这几个点:

  • 有没有看到Task :common:test的执行日志,是否真的运行了测试类?
  • 日志里有没有类似Jacoco agent started的输出,以及exec文件的生成路径(默认是build/jacoco/test.exec)?
    如果测试任务被标记为UP-TO-DATE或者SKIPPED,那自然不会生成exec文件,报告任务也会跟着跳过。

2. 修正Jacoco报告任务的配置

Gradle 4.6对jacocoTestReport的默认配置有调整,你需要显式指定exec文件路径,并确保任务依赖测试任务:
修改你的subprojects里的Jacoco配置:

subprojects {
    apply plugin: 'java'
    apply plugin: 'jacoco'
    apply plugin: 'idea'

    // ...其他配置

    jacocoTestReport {
        // 确保报告任务在测试任务完成后执行
        dependsOn test
        // 显式指定exec文件的查找路径,避免版本差异导致的路径问题
        executionData fileTree(dir: project.buildDir, includes: ['jacoco/test.exec'])
        reports {
            xml.enabled true
            html.enabled true // 建议开启html报告,方便查看
        }
    }
}

3. 临时强制执行报告任务(排查用)

如果想快速验证是不是onlyIf条件的问题,可以临时强制关闭这个判断:

jacocoTestReport {
    onlyIf { true } // 强制执行任务,忽略默认条件
    // 其他配置...
}

执行./gradlew jacocoTestReport后,如果build/jacoco文件夹生成了,说明问题确实是找不到exec文件,回到步骤1和2排查测试任务和路径配置。

4. 检查子项目的自定义配置冲突

如果是多模块项目,要确认子项目有没有重写测试任务的Jacoco配置,比如修改了jacoco.destinationFile:

test {
    jacoco {
        destinationFile = file("$buildDir/custom-path/test.exec")
    }
}

这种情况下,jacocoTestReport的executionData也要对应修改成自定义路径,否则会找不到exec文件。

总结

核心就是Gradle 4.6强化了Jacoco任务的依赖校验,只要确保测试任务正常执行、exec文件路径配置正确,报告任务就能正常生成文件和文件夹了。

内容的提问来源于stack exchange,提问作者Hunar Letsko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:15:58