Gradle转Kotlin DSL遇DepVersions未识别及Jacoco配置转换问题
Gradle 转 Kotlin DSL 问题解决方案
已解决的 buildSrc 配置问题
- 问题现象:在
buildSrc/src下放置build.gradle.kts配置文件后,根项目构建脚本引用DepVersions时提示「Could not get unknown property 'DepVersions'」,但IDE可正常跳转至类定义 - 解决方式:将
build.gradle.kts移动至 buildSrc 根目录,Gradle即可正确识别buildSrc模块内的版本常量类
Jacoco 配置转换(接收器类型不匹配/未解析引用)
原Groovy示例代码
test { jacoco { destinationFile = file("$buildDir/jacoco/test.exec") includes = ['com/example/**'] } }
Kotlin DSL 正确实现
Kotlin DSL需要明确绑定Jacoco任务扩展,避免接收器类型不匹配问题,写法如下:
// 确保已引入Jacoco插件 plugins { jacoco // 其他项目所需插件... } tasks.test { // 方式1:显式配置Jacoco扩展 extensions.configure<JacocoTaskExtension> { destinationFile = file("$buildDir/jacoco/test.exec") includes = listOf("com/example/**") } // 方式2:Gradle 7+支持的简洁写法 jacoco { destinationFile.set(file("$buildDir/jacoco/test.exec")) includes.set(listOf("com/example/**")) } }
注意:Kotlin DSL中属性赋值推荐使用.set()方法,保证跨Gradle版本的兼容性
自定义 Exec 任务 coverageCheck 转换
原Groovy示例代码
task coverageCheck(type: Exec) { commandLine 'bash', '-c', './gradlew jacocoTestReport --info' workingDir = rootProject.projectDir standardOutput = new ByteArrayOutputStream() ext.output = { return standardOutput.toString() } }
Kotlin DSL 正确实现
tasks.register<Exec>("coverageCheck") { commandLine("bash", "-c", "./gradlew jacocoTestReport --info") workingDir = rootProject.projectDir val outputStream = ByteArrayOutputStream() standardOutput = outputStream // 自定义扩展属性output extra["output"] = { outputStream.toString() } // 可选:设置任务每次都重新执行(不使用增量构建) outputs.upToDateWhen { false } }
若需在其他任务中获取该任务的输出,可通过tasks.named<Exec>("coverageCheck").get().extra["output"]调用。
环境信息
- Gradle 版本:7.5.1
- Kotlin 版本:1.6.21
- 操作系统:Mac OS X 13.2.1 aarch64
内容的提问来源于stack exchange,提问作者lannyf
相关产品推荐
相关产品推荐

