Gradle自定义插件‘show-date-plugin’找不到问题求助
我之前也碰到过一模一样的问题,结合你的配置和截图来看,大概率是这几个环节没处理到位,咱们一步步排查:
1. 插件ID的声明缺失或错误
Gradle不会自动把你的插件类和show-date-plugin这个ID关联起来,你得手动配置:
方式一:用.properties文件(兼容所有Gradle版本)
在buildSrc/src/main/resources/META-INF/gradle-plugins/目录下,创建一个名为show-date-plugin.properties的文件,里面只需要一行:
implementation-class=com.example.ShowDatePlugin
这里的com.example.ShowDatePlugin要和你截图里的插件类全限定名完全一致(包名+类名),别写错了!
方式二:用注解(Gradle 4.0+推荐)
如果你的Gradle版本够新,也可以直接在插件类上加注解,省掉properties文件:
import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.annotation.PluginImplementation // 这里的id要和你引用的完全一致 @PluginImplementation(id = "show-date-plugin") class ShowDatePlugin implements Plugin<Project> { void apply(Project project) { // 你的插件逻辑,比如注册任务 project.tasks.register('showDate') { doLast { println "当前日期:${new Date()}" } } } }
2. buildSrc的构建配置没跟上
buildSrc是Gradle的特殊目录,但它本身也是一个独立的小项目,需要自己的build.gradle文件!你贴的是主项目的构建配置,得在buildSrc目录下新建一个build.gradle,内容至少要有:
plugins { id 'groovy' // 因为你的插件是Groovy写的 } repositories { mavenCentral() } dependencies { implementation gradleApi() // 必须依赖Gradle API implementation localGroovy() // 依赖本地Groovy环境 }
没有这个配置的话,Gradle根本不会编译你放在buildSrc里的Groovy类,自然找不到插件。
3. 确认目录结构合规
从你的截图看,插件类在com.example包下,对应的目录结构buildSrc/src/main/groovy/com/example/ShowDatePlugin.groovy是对的,这个没问题,但要确保buildSrc目录直接在项目根目录下,和主项目的build.gradle同级,不能放在子项目里。
最后一步:刷新Gradle
做完上面的配置后,别忘点击IDE里的“Sync Gradle Project”按钮,或者在终端执行gradle clean build,让Gradle重新编译buildSrc里的插件。
按这个流程走下来,应该就能解决插件找不到的问题了。
内容的提问来源于stack exchange,提问作者IKo

