Gradle多项目结构下buildSrc自定义任务子项目无法访问如何解决?
Gradle多项目buildSrc自定义任务子项目调用失败解决方案
1. 确认buildSrc基础配置正确
根目录下的buildSrc本身是独立的Gradle项目,必须添加对应的构建配置才能正确编译Groovy代码。请在buildSrc根目录下创建build.gradle文件,写入如下内容:
plugins { id 'groovy' } dependencies { // 引入Gradle API,自定义任务必须依赖 implementation gradleApi() // 引入Groovy相关依赖 implementation localGroovy() }
配置完成后buildSrc编译生成的类会自动加入所有项目构建脚本的classpath中,全局可访问。
2. 确认settings.gradle子项目声明正确
检查根目录下的settings.gradle是否正确注册了所有子项目,你给出的目录结构中重复出现了两次subproj1属于笔误,参考配置如下:
rootProject.name = 'demo-root' include 'subproj1' include 'subproj2' // 按实际子项目名替换
3. 确认自定义任务类定义合规
检查buildSrc/src/main/groovy/com/CustomTask.groovy的类定义,必须正确声明包路径且类为public修饰,参考示例:
// 必须和目录结构对应,不能缺少包声明 package com import org.gradle.api.DefaultTask import org.gradle.api.tasks.TaskAction import java.io.File // 类必须是public修饰,Groovy默认无修饰符就是public,只要没手动加private/protected就没问题 class CustomTask extends DefaultTask { private File moduleRoot void setModuleRoot(File moduleRoot) { this.moduleRoot = moduleRoot } @TaskAction void exec() { // 你的任务逻辑 println "模块根路径:${moduleRoot.absolutePath}" } }
4. 清理缓存重试
如果以上配置都正确仍然报错,是Gradle缓存导致的异常,执行以下命令清理缓存后再运行任务即可:
# Linux/Mac环境 ./gradlew clean --no-build-cache # Windows环境 gradlew.bat clean --no-build-cache
小提示:如果不想在每个子项目的build.gradle中写import语句,可以直接使用全限定名声明任务,不需要导入包:task customTask(type: com.CustomTask) { setModuleRoot(project.projectDir) }
内容的提问来源于stack exchange,提问作者Xavier DSouza
相关产品推荐
相关产品推荐

