如何从Gradle运行shell脚本并等待它完成

154*_*12s 7 gradle build.gradle

我正在从gradle运行shell脚本,问题是shell脚本正在运行一些先决条件,我需要在gradle继续之前运行.

我尝试了以下但似乎gradle正在为shell脚本打开另一个子进程

sleep.sh
echo 'hi1'
sleep 1
echo 'hi2'
sleep 10
echo 'bye'


Gradle:
task hello3(type: Exec) {
println 'start gradle....'
    commandLine 'sh','sleep.sh'
println 'end gradle....'
}



Result:
start gradle....
end gradle....
:hello3
hi1
hi2
bye
Run Code Online (Sandbox Code Playgroud)

And*_*gin 5

您的问题是您的 println 语句在 Gradle 解析 build.gradle 文件时执行,而不是在执行任务时执行。

您应该将 println 语句移动到 doFirst 和 doLast 如下,以使事情更清楚:

task hello3(type: Exec) {
  doFirst {
    println 'start gradle....'
  }
  commandLine 'sh','sleep.sh'
  doLast {
    println 'end gradle....'
  }
}
Run Code Online (Sandbox Code Playgroud)

我相信,Gradle 实际上在做任何其他事情之前等待脚本完成,所以你不需要做任何特殊的事情来让它等待。

Gradle 将始终在子进程中启动您的 shell 脚本。