如何在Gradle项目目录中执行命令?解决git命令路径问题
解决Gradle任务中执行Git命令工作目录错误的问题
问题原因
你使用Groovy的String.execute()方法执行Git命令时,默认会使用Gradle守护进程的工作目录(即${user.dir}/.gradle/daemon/6.8.3/),而非项目根目录,导致Git读取全局配置而非项目本地配置,因此git config remote.origin.url返回空字符串。
解决方案
有两种可靠方式让命令在$projectDir下执行:
方法1:使用Groovy execute()重载方法指定工作目录
Groovy的execute()支持传入工作目录参数,直接指定为Gradle内置的projectDir即可:
task runSomeTool(type: JavaExec, dependsOn: 'jar') { // ...其他任务配置 def gitOriginUrl = "git config remote.origin.url".execute(null, projectDir).text.trim() // ...后续使用gitOriginUrl的逻辑 }
projectDir是Gradle自带的项目根目录对象,会自动指向你的项目根路径。
方法2:使用Gradle官方推荐的exec方法
更符合Gradle规范的方式是使用内置exec方法,能更清晰地控制命令执行环境:
task runSomeTool(type: JavaExec, dependsOn: 'jar') { doFirst { def outputStream = new ByteArrayOutputStream() exec { commandLine 'git', 'config', 'remote.origin.url' workingDir projectDir standardOutput = outputStream } def gitOriginUrl = outputStream.toString().trim() // ...后续业务逻辑 } // ...JavaExec的其他配置(如mainClass、classpath等) }
这种方式不仅能指定工作目录,还能灵活处理命令的输入输出,适合复杂场景。
内容的提问来源于stack exchange,提问作者Dark Star1
相关产品推荐
相关产品推荐

