如何在buildSrc自定义插件中应用Kotlin插件?
在buildSrc自定义插件中正确应用Kotlin插件
你在plugins块里用的kotlin("jvm")和kotlin("plugin.serialization")是Gradle提供的简写语法,实际对应完整的插件ID,或者可以用类型安全的方式直接引用插件类来应用。下面是两种可行的解决方案:
方案一:使用完整插件ID字符串
直接在pluginManager.apply中传入插件的完整ID即可,这是最直接的方式:
import org.gradle.api.Plugin import org.gradle.api.Project class MyPlugin : Plugin<Project> { override fun apply(project: Project) { project.pluginManager.apply("org.gradle.application") // 应用Kotlin JVM插件 project.pluginManager.apply("org.jetbrains.kotlin.jvm") // 应用Kotlin序列化插件 project.pluginManager.apply("org.jetbrains.kotlin.plugin.serialization") } }
方案二:类型安全的应用方式(推荐)
如果希望避免字符串硬编码带来的错误,可以直接引用Kotlin插件的类来应用。不过需要先在buildSrc的构建脚本中添加Kotlin Gradle插件的API依赖:
首先修改buildSrc目录下的build.gradle.kts:
repositories { mavenCentral() } dependencies { implementation(gradleApi()) // 替换为你项目使用的Kotlin版本 implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.20") }
然后更新自定义插件代码:
import org.gradle.api.Plugin import org.gradle.api.Project import org.jetbrains.kotlin.gradle.plugin.KotlinJvmPlugin import org.jetbrains.kotlin.gradle.plugin.KotlinSerializationPlugin class MyPlugin : Plugin<Project> { override fun apply(project: Project) { project.pluginManager.apply("org.gradle.application") // 类型安全地应用Kotlin JVM插件 project.pluginManager.apply(KotlinJvmPlugin::class.java) // 类型安全地应用Kotlin序列化插件 project.pluginManager.apply(KotlinSerializationPlugin::class.java) } }
两种方式都能正常生效,类型安全的方式更适合大型项目,IDE会提供代码提示,也能避免拼写错误。另外要注意,buildSrc中依赖的Kotlin插件版本最好和项目主构建脚本中使用的版本保持一致,避免出现兼容性问题。
内容的提问来源于stack exchange,提问作者Jordi
相关产品推荐
相关产品推荐

