如何在Gradle自定义插件中调用Kover DependencyHandler扩展?
解决Gradle自定义插件中配置Kover多项目依赖的问题
核心思路
Kover的kover依赖属于插件创建的专属依赖配置项,并非普通扩展属性,所以不能通过扩展对象直接访问,需通过DependencyHandler操作,且要确保Kover插件已提前应用到项目中。
具体实现步骤
1. 先给项目应用Kover插件
在自定义插件的apply方法中,先为根项目及目标子项目应用Kover插件:
override fun apply(project: Project) { // 给根项目应用Kover插件 project.pluginManager.apply("org.jetbrains.kotlinx.kover") // 可选:批量给所有子项目应用Kover插件 project.subprojects { subProject -> subProject.pluginManager.apply("org.jetbrains.kotlinx.kover") } }
2. 配置根项目的Kover子项目依赖
通过DependencyHandler的add方法,直接指定kover配置名称并添加子项目依赖:
override fun apply(project: Project) { project.pluginManager.apply("org.jetbrains.kotlinx.kover") // 给根项目的kover配置添加子项目依赖 project.dependencies { add("kover", project.project(":another:project")) // 如需添加多个子项目,重复调用add即可 add("kover", project.project(":sub:project2")) } }
3. 类型安全的配置方式(可选)
若想避免硬编码配置名称,可导入Kover提供的配置常量,前提是在自定义插件的构建脚本中添加Kover API依赖:
在插件的build.gradle.kts中:
dependencies { implementation("org.jetbrains.kotlinx:kover-gradle-plugin:0.7.4") // 替换为你使用的版本 }
然后在插件代码中导入并使用:
import org.jetbrains.kotlinx.kover.gradle.plugin.dsl.KoverNames.KOVER_CONFIG_NAME override fun apply(project: Project) { project.pluginManager.apply("org.jetbrains.kotlinx.kover") project.dependencies { add(KOVER_CONFIG_NAME, project.project(":another:project")) } }
关键说明
kover是Kover插件为根项目创建的专属依赖配置,不是扩展属性,因此无法通过project.extensions.getByName("kover")获取,必须用DependencyHandler.add()方法添加依赖。- 务必保证配置依赖前,Kover插件已完成应用,否则会因
kover配置不存在抛出异常。
内容的提问来源于stack exchange,提问作者Victor
相关产品推荐
相关产品推荐

