我几乎可以肯定我忽略了什么。
我有一个带有build.gradle
文件的android gradle项目。在这里,我指定了任务:
task doSomething(type: Exec) {
println("okay clearly you have got to be getting in here")
commandLine 'sh /Users/dzt/Desktop/create_a_file_on_desktop.sh'
}
并且根本没有运行。 shell文件只是字面意思:
#!/bin/sh
echo "hi" > /Users/dzt/Desktop/i_am_a_byproduct.txt
我在它上面运行chmod u+x
所以它是可执行的(我在普通的bash shell上仔细检查过)。
我也尝试使用groovy命令:
"cd ../ && sh /Users/dzt/Desktop/create_a_file_on_desktop.sh".execute()
也不起作用。我有点难过。我没有看到输出文件。但是,我确实在gradle控制台中看到了我的print语句。
这里发生了什么?
**编辑**
好吧,我把它钻了更多 - > cd ../
根本不起作用。为什么是这样?我需要使用相对路径,至少相对于此目录
答案 0 :(得分:3)
电话必须是
commandLine 'sh', '/Users/dzt/Desktop/create_a_file_on_desktop.sh'
或者这被认为是一个命令。但是你想用脚本作为参数启动sh
。另一方面,由于您已设置了execute-bit,因此您也可以直接调用shell脚本。
请参阅http://gradle.org/docs/current/dsl/org.gradle.api.tasks.Exec.html
使用cd
运行cd ../ && sh script
也不会像这样工作,因为&&
是一个shell脚本命令。如果要像这样运行,则必须运行shell并使其作为命令运行。 E.g。
commandLine 'sh', '-c', 'cd ~/scripts && sh myscript.sh'
答案 1 :(得分:1)
由于某种原因,Gradle不允许cd
命令。一些命令只是不能使用groovy。
相反,我在shell脚本中使用了cd
。这似乎工作得很好。
答案 2 :(得分:0)
首先,您必须输入根级gradle.build
文件。你需要像这样写它,才能真正执行任务。
task doSomething << {
group 'yourGroupName'
description 'Runs your bash script'
exec {
workingDir "$projectDir/../pathto/"
commandLine 'bash', '-c', './bashscript.sh'
}
}
然后您可以执行:./gradlew -q doSomething
。在这种情况下,我使用了bash
,但您可以使用任何受支持的脚本shell,例如sh, perl, python
等。