Gradle - Tâches

Le script de construction Gradle décrit un ou plusieurs projets. Chaque projet est composé de différentes tâches. Une tâche est un travail effectué par une compilation. La tâche peut être la compilation de certaines classes, le stockage de fichiers de classe dans un dossier cible distinct, la création de JAR, la génération de Javadoc ou la publication de certaines réalisations dans un référentiel.

Ce chapitre explique ce qu'est une tâche et comment générer et exécuter une tâche.

Définition des tâches

La tâche est un mot-clé utilisé pour définir une tâche dans le script de construction. Jetez un œil à l'exemple suivant qui représente une tâche nomméehello qui imprime tutorialspoint. Copiez et enregistrez le script suivant dans un fichier nommébuild.gradle. Ce script de construction définit un nom de tâche bonjour qui est utilisé pour imprimer la chaîne tutorialspoint.

task hello {
   doLast {
      println 'tutorialspoint'
   }
}

Exécutez la commande suivante dans l'invite de commande. Il exécute le script ci-dessus. Vous devez l'exécuter là où le fichier build.gradle est stocké.

C:\> gradle –q hello

Production:

tutorialspoint

Vous pouvez simplifier cette tâche de bonjour en spécifiant un raccourci (représente un symbole <<) à la doLastdéclaration. Si vous ajoutez ce raccourci à la tâche ci-dessushello il ressemblera au script suivant.

task hello << {
   println 'tutorialspoint'
}

Vous pouvez exécuter le script ci-dessus en utilisant gradle –q hello commander.

Voici quelques variantes pour définir une tâche, jetez-y un œil. L'exemple suivant définit une tâchehello.

Copiez et enregistrez le code suivant dans build.gradle fichier.

task (hello) << {
   println "tutorialspoint"
}

Exécutez la commande suivante dans l'invite de commande. Il exécute le script ci-dessus. Vous devez l'exécuter, là où le fichier build.gradle est stocké.

C:\> gradle –q hello

Production:

tutorialspoint

Vous pouvez également utiliser des chaînes pour les noms de tâches. Jetez un œil au même exemple bonjour. Ici, nous utiliserons String comme tâche.

Copiez et enregistrez le code suivant dans build.gradle fichier.

task('hello') << {
   println "tutorialspoint"
}

Exécutez la commande suivante dans l'invite de commande. Il exécute le script ci-dessus. Vous devez l'exécuter, là où le fichier build.gradle est stocké.

C:\> gradle –q hello

Production:

tutorialspoint

Vous pouvez également utiliser une autre syntaxe pour définir une tâche. Cela utilise la méthode create () pour définir une tâche. Jetez un œil au même exemple bonjour donné ci-dessous.

Copiez et enregistrez le code ci-dessous dans build.gradle fichier.

tasks.create(name: 'hello') << {
   println "tutorialspoint"
}

Exécutez la commande suivante dans l'invite de commande. Il exécute le script ci-dessus. Vous devez l'exécuter, là où le fichier build.gradle est stocké.

C:\> gradle –q hello

Production:

tutorialspoint

Localisation des tâches

Si vous souhaitez localiser les tâches que vous avez définies dans le fichier de construction, vous devez utiliser les propriétés de projet standard respectives. Cela signifie que chaque tâche est disponible en tant que propriété du projet, en utilisant le nom de la tâche comme nom de propriété.

Jetez un œil au code suivant qui accède aux tâches en tant que propriétés.

Copiez et enregistrez le code ci-dessous dans build.gradle fichier.

task hello

println hello.name
println project.hello.name

Exécutez la commande suivante dans l'invite de commande. Il exécute le script ci-dessus. Vous devez l'exécuter, là où le fichier build.gradle est stocké.

C:\> gradle –q hello

Production:

hello
hello

Vous pouvez également utiliser toutes les propriétés via la collection de tâches.

Copiez et enregistrez le code suivant dans build.gradle fichier.

task hello

println tasks.hello.name
println tasks['hello'].name

Exécutez la commande suivante dans l'invite de commande. Il exécute le script ci-dessus. Vous devez l'exécuter, là où le fichier build.gradle est stocké.

C:\> gradle –q hello

Production:

hello
hello

Vous pouvez également accéder au chemin de la tâche à l'aide des tâches. Pour cela, vous pouvez appeler la méthode getByPath () avec un nom de tâche, ou un chemin relatif, ou un chemin absolu.

Copiez et enregistrez le code ci-dessous dans build.gradle fichier.

project(':projectA') {
   task hello
}
task hello

println tasks.getByPath('hello').path
println tasks.getByPath(':hello').path
println tasks.getByPath('projectA:hello').path
println tasks.getByPath(':projectA:hello').path

Exécutez la commande suivante dans l'invite de commande. Il exécute le script ci-dessus. Vous devez l'exécuter, là où le fichier build.gradle est stocké.

C:\> gradle –q hello

Production:

:hello
:hello
:projectA:hello
:projectA:hello

Ajout de dépendances aux tâches

Vous pouvez faire en sorte qu'une tâche dépende d'une autre tâche, ce qui signifie que lorsqu'une tâche est terminée, seule une autre tâche démarrera. Chaque tâche est différenciée par le nom de la tâche. La collection de noms de tâches est référencée par sa collection de tâches. Pour faire référence à une tâche dans un autre projet, vous devez utiliser le chemin du projet comme préfixe du nom de la tâche respective.

L'exemple suivant qui ajoute une dépendance de taskX à taskY.

Copiez et enregistrez le code ci-dessous dans build.gradlefichier. Jetez un œil au code suivant.

task taskX << {
   println 'taskX'
}
task taskY(dependsOn: 'taskX') << {
   println "taskY"
}

Exécutez la commande suivante dans l'invite de commande. Il exécute le script ci-dessus. Vous devez exécuter ceci, là où lebuild.gradle magasins de fichiers.

C:\> gradle –q taskY

Production:

taskX
taskY

L'exemple ci-dessus ajoute une dépendance à la tâche en utilisant ses noms. Il existe un autre moyen d'obtenir une dépendance de tâche qui consiste à définir la dépendance à l'aide d'un objet Task.

Prenons le même exemple de taskY dépendant de taskX mais nous utilisons des objets de tâche au lieu de noms de référence de tâche.

Copiez et enregistrez le code suivant dans build.gradle fichier.

task taskY << {
   println 'taskY'
}
task taskX << {
   println 'taskX'
}
taskY.dependsOn taskX

Exécutez la commande suivante dans l'invite de commande. Vous devez l'exécuter là où le fichier build.gradle est stocké.

C:\> gradle –q taskY

Production:

taskX
taskY

L'exemple ci-dessus ajoute une dépendance à la tâche en utilisant ses noms. Il existe un autre moyen d'obtenir une dépendance de tâche qui consiste à définir la dépendance à l'aide d'un objet Task.

Ici, nous prenons le même exemple que taskY dépend de taskX mais nous utilisons des objets de tâche au lieu de noms de références de tâches. Jetez-y un coup d'œil.

Copiez et enregistrez le code ci-dessous dans build.gradlefichier. Jetez un œil au code suivant.

task taskX << {
   println 'taskX'
}
taskX.dependsOn {
   tasks.findAll { 
      task → task.name.startsWith('lib') 
   }
}
task lib1 << {
   println 'lib1'
}
task lib2 << {
   println 'lib2'
}
task notALib << {
   println 'notALib'
}

Exécutez la commande suivante dans l'invite de commande. Il exécute le script ci-dessus. Vous devez exécuter ceci, là où lebuild.gradle magasins de fichiers.

C:\> gradle –q taskX

Production:

lib1
lib2
taskX

Ajout d'une description à une tâche

Vous pouvez ajouter une description à votre tâche. Cette description s'affiche lors de l'exécutionGradle tasks. Ceci est possible en utilisant le mot-clé description.

Copiez et enregistrez le code suivant dans build.gradlefichier. Jetez un œil au code suivant.

task copy(type: Copy) {
   description 'Copies the resource directory to the target directory.'
   from 'resources'
   into 'target'
   include('**/*.txt', '**/*.xml', '**/*.properties')
   println("description applied")
}

Exécutez la commande suivante dans l'invite de commande. Vous devez l'exécuter là où le fichier build.gradle est stocké.

C:\> gradle –q copy

Si la commande est exécutée avec succès, vous obtiendrez la sortie suivante.

description applied

Ignorer des tâches

Sauter des tâches peut être effectué en passant une fermeture de prédicat. Cela n'est possible que si la méthode d'une tâche ou une clôture lançant unStopExecutionException avant que le travail réel d'une tâche ne soit exécuté.

Copiez et enregistrez le code suivant dans build.gradle fichier.

task eclipse << {
   println 'Hello Eclipse'
}

// #1st approach - closure returning true, if the task should be executed, false if not.
eclipse.onlyIf {
   project.hasProperty('usingEclipse')
}

// #2nd approach - alternatively throw an StopExecutionException() like this
eclipse.doFirst {
   if(!usingEclipse) {
      throw new StopExecutionException()
   }
}

Exécutez la commande suivante dans l'invite de commande. Vous devez l'exécuter là où le fichier build.gradle est stocké.

C:\> gradle –q eclipse

Structure des tâches

Gradle a différentes phases, lorsqu'il travaille avec des tâches. Tout d'abord, il y a une phase de configuration, où le code, qui est spécifié directement dans la fermeture d'une tâche, est exécuté. Le bloc de configuration est exécuté pour chaque tâche disponible et pas seulement pour les tâches qui sont exécutées ultérieurement.

Après la phase de configuration, la phase d'exécution exécute le code dans le doFirst ou doLast fermetures de ces tâches, qui sont effectivement exécutées.