Au début de mon installation, je souhaite exécuter un script de shell dans un sous-répertoire qui prépare mon environnement.
task build << {
}
task preBuild << {
println 'do prebuild stuff:'
}
task myPrebuildTask(type: Exec) {
workingDir "$projectDir/mySubDir"
commandLine './myScript.sh'
}
build.dependsOn preBuild
preBuild.dependsOn myPrebuildTask
Cependant, lorsque j'exécute la tâche en appelant gradle myPrebuildTask
ou en générant simplement le projet, l'erreur suivante se produit:
> A problem occurred starting process 'command './myScript.sh''
Malheureusement, c'est tout ce que j'ai.
J'ai également essayé ce qui suit - même erreur.
commandLine 'sh mySubDir/myScript.sh'
J'utilise Gradle 1.10 (requis par Android) sous Windows, dans un shell Cygwin. Des idées?
utilisation
commandLine 'sh', './myScript.sh'
votre script lui-même n'est pas un programme, c'est pourquoi vous devez déclarer 'sh' comme programme et le chemin de votre script comme argument.
Une manière plus générique d'écrire la tâche exec, mais portable pour Windows/Linux, si vous appelez un fichier de commande sur le chemin PATH:
task myPrebuildTask(type: Exec) {
workingDir "$projectDir/mySubDir"
if (System.getProperty('os.name').toLowerCase(Locale.ROOT).contains('windows')) {
commandLine 'cmd', '/c', 'mycommand'
} else {
commandLine 'sh', '-c', 'mycommand'
}
}
Cela ne concerne pas directement le cas d'utilisation de l'OP (puisqu'il y a un fichier script dans le répertoire de travail), mais le titre de la question est plus générique (et m'a attiré ici), cela pourrait donc aider quelqu'un.
malheureusement, les options avec commandLine ne fonctionnent pas pour moi et mon ami trouve un autre moyen avec executable
executable "./myScript.sh"
et la tâche complète serait
task startScript() {
doLast {
exec {
executable "./myScript.sh"
}
}
}
Cela fonctionne pour moi dans mon projet Android
preBuild.doFirst {
println("Executing myScript")
def proc = "mySubDir/myScript.sh".execute()
proc.waitForProcessOutput(System.out, System.err)
}
Voir ici pour l'explication: Comment faire des appels de commande système en Java/Groovy?