在buildSrc的Kotlin DSL Gradle插件中修改任务失败求助
解决Gradle插件中修改任务的报错问题
错误原因
你直接在buildSrc的脚本顶层写任务配置,本质是在修改buildSrc自身的任务,而非应用插件的业务项目任务。同时buildSrc缺少操作测试、Kotlin编译任务所需的依赖,导致类引用和语法报错。
正确实现步骤
1. 配置buildSrc的依赖
在buildSrc/build.gradle.kts中添加必要的Gradle API和Kotlin插件依赖:
plugins { `kotlin-dsl` } repositories { mavenCentral() } dependencies { implementation(gradleApi()) // 使用和项目一致的Kotlin版本 implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.20") implementation(gradleTestKit()) }
2. 编写插件类
在buildSrc/src/main/kotlin/foo/bar/MyPlugin.kt(注意包结构)中创建插件类,通过apply方法操作目标项目的任务:
package foo.bar import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.tasks.testing.Test import org.jetbrains.kotlin.gradle.tasks.KotlinCompile class MyPlugin : Plugin<Project> { override fun apply(project: Project) { // 配置仓库 project.repositories { mavenCentral() } // 全局配置Test任务 project.tasks.withType<Test>().configureEach { useJUnitPlatform() } // 全局配置Kotlin编译任务 project.tasks.withType<KotlinCompile>().configureEach { kotlinOptions.jvmTarget = "11" } } }
3. 注册插件
在buildSrc/src/main/resources/META-INF/gradle-plugins/foo.bar.properties中添加插件注册信息(文件名对应插件ID):
implementation-class=foo.bar.MyPlugin
4. 应用插件
业务项目的build.gradle.kts中依然按原方式引入:
plugins { id("foo.bar") }
现在执行./gradlew clean build即可正常运行。
内容的提问来源于stack exchange,提问作者Juha Syrjälä
相关产品推荐
相关产品推荐

