Gradle tâche ne doit pas exécuter automatiquement
Je suis à la définition d'une tâche dans gradle:
task releaseCandidate(type: Exec) {
commandLine 'git', 'checkout', 'develop'
//Increment version code in Manifest
String manifest = new File('AndroidManifest.xml').getText('UTF-8')
Pattern pattern = Pattern.compile('android:versionCode="([0-9]+)"')
Matcher matcher = pattern.matcher(manifest)
matcher.find()
int newVersionCode = Integer.parseInt(matcher.group(1)) + 1
manifest = manifest.replaceAll(
"android:versionCode=\"([0-9]+)\"", "android:versionCode=\"$newVersionCode\""
)
new File('AndroidManifest.xml').write(manifest, 'UTF-8')
commandLine 'git', 'diff'
}
Qui je veux de n'exécuter que lorsque j'ai choisi de l'appeler comme gradle releaseCandidate
. Cependant, lorsque j'exécute toute autre tâche, comme gradle assembleDebug
, il dirige également la tâche releaseCandidate. Je ne veux pas que le comportement de se produire. Il n'y a pas de tâche en fonction releaseCandidate ou vice-versa.
Mon projet est une application Android, donc je suis en utilisant android
plugin gradle.
Vous devez vous connecter pour publier un commentaire.
Un piège courant. Ajouter une action à la tâche autrement code sera exécuté à la phase de configuration. Exemple de tâche avec de l'action:
Je vois que Vous avais plutôt besoin d'écrire une tâche personnalisée de l'aide
Exec
type. Je suppose qu'il n'est pas valide pour définircommandLine
deux fois.MODIFIER
Vous pouvez lire cette poste pour obtenir l'idée générale de comment tout cela fonctionne.
<<
raccourci, mais la documentation n'a pas fait que des comportements sur la configuration de la phase claire.On mélange les Tâches de configuration et groovy code. Tout ce qui fait partie du corps principal d'une définition de tâche sera exécutée dans la phase de configuration. Le
task task1 << { code }
est un raccourci pourcommandLine
fait partie de la Exec Tâche mais ton code n'est pas et doit être enveloppé dans undoLast
ceci exécutera la ligne de commande, d'abord, puis d'exécuter votre code supplémentaire. Si vous avez besoin d'un autre execcommandLine
alors vous aurez besoin d'une autre tâche.Juste pour compléter @Opale réponse pour les cas de Exec est réellement utilisé (par exemple ligne de commande de référence) :