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

Gradle 8.5+Java21环境下JacocoMerge属性未知问题求助

解决Gradle根项目无法识别‘JacocoMerge’属性的问题

问题原因

Gradle 8.x 中,JacocoMerge 是Jacoco插件提供的任务类型,根项目未应用Jacoco插件时,Gradle无法识别该类型,因此抛出"无法获取类型为org.gradle.api.project的根项目的未知属性‘JacocoMerge’"错误。

解决方案

1. 根项目应用Jacoco插件

在根项目的build.gradle中添加Jacoco插件引用,Gradle 8.x推荐使用plugins块:

plugins {
    id 'jacoco'
}

2. 修正JacocoMerge任务配置

原代码中executionData的配置逻辑有误(用目标文件路径作为fileTree来源),应改为收集子项目的测试执行数据,同时规范文件路径使用:

// 定义合并后的Jacoco数据文件路径
def mergedJacocoFile = layout.buildDirectory.file('jacoco/merged.exec').get().asFile

task jacocoMerge(type: JacocoMerge) {
    destinationFile = mergedJacocoFile
    // 收集所有子项目Test任务生成的Jacoco执行数据
    executionData = subprojects.flatMap { subproj ->
        subproj.tasks.withType(Test).map { it.jacoco.executionData }
    }
}

3. 调整任务依赖

简化依赖写法,确保合并任务在所有子项目测试完成后执行:

jacocoMerge.dependsOn subprojects.test

完整修正代码

// 根项目build.gradle
plugins {
    id 'jacoco'
}

def mergedJacocoFile = layout.buildDirectory.file('jacoco/merged.exec').get().asFile

task jacocoMerge(type: JacocoMerge) {
    destinationFile = mergedJacocoFile
    executionData = subprojects.flatMap { subproj ->
        subproj.tasks.withType(Test).map { it.jacoco.executionData }
    }
}

jacocoMerge.dependsOn subprojects.test

注意事项

  • 确保所有子项目都已应用Jacoco插件,否则无法生成测试执行数据,合并任务会无数据可处理。
  • 当前环境(Java 21 + Gradle 8.5 + Jacoco 0.8.11)版本兼容,Jacoco 0.8.11已支持Java 21,无需调整依赖版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 05:48:12