如何从任意工作目录执行Gradle子项目的指定任务
问题原因
Gradle默认以命令执行时的当前工作目录作为项目根目录,查找根目录下的settings.gradle文件加载项目配置。如果当前工作目录不存在该文件,Gradle会自动将当前目录初始化为空白根项目,因此无法识别原项目下的子模块。
解决方案
- 方案1:使用
-p参数指定项目根目录
这是最常用的方案,直接在命令中传入gradlew所在的项目根目录路径即可,无需切换工作目录。示例如下:
# 在上层目录执行原项目的projects命令 ./android/gradlew -p ./android projects # 执行app模块下的自定义任务 ./android/gradlew -p ./android app:publishTask
-p后支持相对路径和绝对路径,流水线场景下推荐使用绝对路径,避免相对路径计算错误。
- 方案2:先切换到项目根目录再执行命令
在脚本或流水线中先cd到gradlew所在的项目根目录,执行完命令后再返回原工作目录即可,示例如下:
# 先切换目录再执行 cd ./android && ./gradlew app:publishTask # 如果需要返回原目录可以加cd - cd ./android && ./gradlew app:publishTask && cd -
- 方案3:使用完整参数
--project-dir指定项目根
作用和-p完全一致,只是写法更明确,适合对可读性要求更高的场景:
./android/gradlew --project-dir ./android app:publishTask
内容的提问来源于stack exchange,提问作者ThomasW
相关产品推荐
相关产品推荐

