在BuildScr自定义Gradle插件中配置Ktlint依赖遇未解析引用问题
解决buildSrc自定义Gradle插件中Ktlint引用未解析的问题
核心问题原因
出现Unresolved reference: ktlint通常是两个原因:
- buildSrc项目未正确引入Ktlint相关依赖,导致插件代码无法找到Ktlint的API类
- 自定义插件中未先将Ktlint插件应用到目标模块,无法访问
ktlint扩展
分步解决方案
1. 配置buildSrc的依赖
在buildSrc/build.gradle.kts中添加Ktlint和Android Gradle插件的依赖,确保插件代码能获取到所需类:
plugins { `kotlin-dsl` } repositories { google() mavenCentral() } dependencies { // 引入Ktlint核心库和Gradle插件 implementation("com.pinterest:ktlint:1.0.1") implementation("com.pinterest.ktlint:ktlint-gradle:1.0.1") // 引入Android Gradle插件,用于操作Android模块配置 implementation("com.android.tools.build:gradle:8.1.0") // Kotlin Gradle插件依赖(按需添加) implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0") }
2. 修改自定义插件代码
在你的SharedSettings插件类中,先应用Ktlint插件到目标项目,再配置Ktlint规则,确保Android模块能正确关联Ktlint:
import com.android.build.api.dsl.CommonExtension import com.pinterest.ktlint.gradle.KtlintExtension import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.kotlin.dsl.apply import org.gradle.kotlin.dsl.configure class SharedSettingsPlugin : Plugin<Project> { override fun apply(project: Project) { // 先给目标模块应用Ktlint插件 project.plugins.apply("com.pinterest.ktlint") // 针对Android模块配置通用设置+Ktlint project.extensions.findByType(CommonExtension::class.java)?.run { // 这里可以添加你的通用Android配置,比如compileSdk、defaultConfig等 compileSdk = 34 defaultConfig { minSdk = 24 } // 配置Ktlint规则 project.configure<KtlintExtension> { // 自定义规则示例:禁用 wildcard imports 检查 disabledRules.set(setOf("no-wildcard-imports")) // 排除build目录下的文件 filter { exclude { it.file.path.contains("/build/") } } // 开启格式化功能 enableFormat.set(true) } } } }
3. 确保插件正确注册
在buildSrc/src/main/resources/META-INF/gradle-plugins下创建插件ID对应的properties文件(比如your.shared.settings.plugin.properties),内容为:
implementation-class=com.yourpackage.SharedSettingsPlugin
4. 模块中应用自定义插件
在各Android模块的build.gradle.kts中应用你的自定义插件即可,无需重复配置Ktlint:
plugins { id("com.android.application") // 或 com.android.library kotlin("android") id("your.shared.settings.plugin") }
这样所有应用了自定义插件的模块都会自动带上统一的Ktlint配置,完全避免重复代码。
内容的提问来源于stack exchange,提问作者Godlike
相关产品推荐
相关产品推荐

