自定义Gradle Kotlin独立插件在其他项目应用时提示ID未找到
解决「Plugin with id 'my.id.license-tools' not found」问题
结合你的插件项目结构,我来帮你一步步排查这个常见的Gradle插件引用问题:
1. 先检查最容易踩坑的路径问题
你项目里写的META-INF.gradle-plugins是个致命笔误!Gradle识别插件ID的核心配置文件,必须放在src/main/resources/META-INF/gradle-plugins目录下(注意是斜杠/,不是点.)。如果目录名写错,Gradle根本找不到你的插件ID对应的配置文件,直接就会报找不到插件的错误。
2. 确认properties文件的内容正确性
打开my.id.license-tools.properties,里面必须准确指定插件的实现类全限定名,格式如下:
implementation-class=my.id.LicenseTools
要保证这里的类名和包名,和你LicenseTools.kt里的代码完全匹配。另外,你的插件类必须正确实现Gradle的Plugin<Project>接口,比如:
package my.id import org.gradle.api.Plugin import org.gradle.api.Project class LicenseTools : Plugin<Project> { override fun apply(project: Project) { // 这里写你的插件逻辑 } }
3. 确保插件被正确发布到本地仓库
因为你是开发本地插件,必须先把它发布到本地Maven仓库,才能在其他项目里引用:
- 在插件项目的
build.gradle里添加发布配置(推荐用java-gradle-plugin简化流程):plugins { id 'java-gradle-plugin' id 'maven-publish' id 'org.jetbrains.kotlin.jvm' version '1.9.0' } // 用这个块声明插件,Gradle会自动帮你生成META-INF配置文件 gradlePlugin { plugins { licenseTools { id = 'my.id.license-tools' implementationClass = 'my.id.LicenseTools' } } } publishing { repositories { mavenLocal() // 发布到本地Maven仓库 } } version = '1.0.0' // 插件版本,后面引用要用到 - 执行命令
./gradlew publishToMavenLocal,把插件发布到本地仓库。
4. 消费项目正确引入插件
在要应用插件的项目中,需要做两步配置:
- 在
settings.gradle里添加本地仓库源,让Gradle能找到你的插件:pluginManagement { repositories { mavenLocal() gradlePluginPortal() } } - 在
build.gradle里应用插件,注意版本号要和插件项目的version一致:plugins { id 'my.id.license-tools' version '1.0.0' }
额外小技巧
使用java-gradle-plugin插件后,你甚至可以不用手动创建META-INF/gradle-plugins下的properties文件——Gradle会根据gradlePlugin块的配置自动生成,彻底避免路径和内容写错的问题。
内容的提问来源于stack exchange,提问作者Kajitsukai
相关产品推荐
相关产品推荐

