
本文旨在解决 Java Spring Boot 多模块项目中使用 Gradle 和 JaCoCo 生成代码覆盖率报告时遇到的“The value for this file collection is final and cannot be changed”错误。我们将深入分析问题原因,并提供详细的解决方案,帮助开发者成功生成 JaCoCo 报告。
在 Java Spring Boot 多模块项目中,尝试使用 JaCoCo 生成代码覆盖率报告时,可能会遇到以下错误:
The value for this file collection is final and cannot be changed
这个错误通常发生在配置 jacocoTestReport 任务时,试图在 doFirst 块中动态修改 executionData 集合。executionData 是一个文件集合,用于指定 JaCoCo 覆盖率数据的来源。Gradle 在配置阶段会确定这个集合,并且不允许在执行阶段修改它。
要解决这个问题,我们需要避免在 doFirst 块中直接修改 executionData 集合。一种常用的解决方案是使用 executionData(files(...)) 方法来配置 executionData,而不是使用 executionData.setFrom(...)。
立即学习“Java免费学习笔记(深入)”;
以下是一个可行的解决方案示例:
在根项目的 build.gradle 文件中配置 JaCoCo 插件:
plugins {
id 'jacoco'
}
jacoco {
toolVersion = "0.8.8" // 建议使用最新版本
}在每个子项目的 build.gradle 文件中配置 jacocoTestReport 任务:
tasks.register('jacocoTestReport', JacocoReport) {
dependsOn test // 依赖于测试任务
reports {
html.enabled = true
xml.enabled = true
csv.enabled = false
}
// 指定 JaCoCo 覆盖率数据的来源
executionData(files("${buildDir}/jacoco/test.exec"))
sourceSets sourceSets.main.allSource
classDirectories.setFrom(files(classDirectories.files.collect {
fileTree(dir: it, exclude: ['**/model/**', '**/config/**']) //根据需要排除特定目录
}))
}说明:
在根项目的 build.gradle 中创建聚合报告的任务:
task jacocoRootReport(type: JacocoReport) {
group = "Reporting"
description = "Generates an aggregate report from all the subprojects"
subprojects.each {
executionData fileTree(dir: it.buildDir, includes: ['jacoco/test.exec'])
sourceSets it.sourceSets.main.allSource
classDirectories.from = files(it.classDirectories.files.collect {
fileTree(dir: it, exclude: ['**/model/**', '**/config/**']) //根据需要排除特定目录
})
}
reports {
html.enabled = true
xml.enabled = true
csv.enabled = false
}
}说明:
运行任务:
在命令行中运行 gradle jacocoRootReport 命令,即可生成聚合的代码覆盖率报告。 报告将会在根项目的 build/reports/jacoco/jacocoRootReport/html 目录下生成。
通过上述步骤,我们可以成功地在 Java Spring Boot 多模块项目中使用 Gradle 和 JaCoCo 生成代码覆盖率报告,避免“The value for this file collection is final and cannot be changed”错误。 关键在于正确配置 executionData,避免在 doFirst 块中动态修改它。 使用 executionData(files(...)) 方法,并确保文件路径正确,即可解决问题。同时,合理配置 sourceSets 和 classDirectories 可以提高报告的准确性和可读性。
以上就是生成 Java 多模块项目中的 JaCoCo 报告的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号