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
相关产品推荐
相关产品推荐

