En brugerdefineret opgave i Gradle

1. Oversigt

I denne artikel vil vi dække, hvordan man gør det Opret en brugerdefineret opgave i Gradle. Vi viser en ny opgavedefinition ved hjælp af et build-script eller en brugerdefineret opgavetype.

For introduktion til Gradle, se denne artikel. Den indeholder det grundlæggende i Gradle og - hvad er det vigtigste for denne artikel - introduktionen til Gradle-opgaver.

2. Definition af brugerdefineret opgave indeni build.gradle

For at skabe en ligetil Gradle-opgave skal vi tilføje dens definition til vores build.gradle fil:

opgave velkommen {doLast {println 'Velkommen i Baeldung!' }} 

Hovedmålet med ovenstående opgave er bare at udskrive teksten "Velkommen i Baeldung!". Vi kan kontrollere, om dette opgave er tilgængelig ved at løbe gradle opgaver - alt kommando:

gradle opgaver - alt 

Opgaven er på listen under gruppen Andre opgaver:

Andre opgaver ----------- velkommen

Det kan udføres ligesom enhver anden Gradle-opgave:

gradle velkommen 

Outputtet er som forventet - "Velkommen i Baeldung!" besked.

Bemærk: hvis mulighed -alle er ikke indstillet, så er opgaver, der hører til kategorien "Andet", ikke synlige. Custom Gradle-opgave kan tilhøre en anden gruppe end “Andet” og kan indeholde en beskrivelse.

3. Indstil gruppe og beskrivelse

Nogle gange er det praktisk at gruppere opgaver efter funktion, så de er synlige under en kategori. Vi kan hurtigt sætgruppe til vores brugerdefinerede opgaver, bare ved at definere en gruppeegenskab:

opgave velkommen {gruppe 'Eksempelkategori' doLast {println 'Velkommen til Baeldung!' }}

Når vi nu kører Gradle-kommandoen for at liste alle tilgængelige opgaver (-alle mulighed ikke længere er nødvendig), vi ser vores opgave under ny gruppe:

Eksempel på kategoriopgaver --------------------- velkommen 

Det er dog også gavnligt for andre at se, hvad en opgave er ansvarlig for. Vi kan oprette en beskrivelse som indeholder korte oplysninger:

opgave velkomst {gruppe 'Eksempelkategori' beskrivelse 'Opgaver, der viser en velkomstbesked' doLast {println 'Velkommen i Baeldung!' }} 

Når vi udskriver en liste over de tilgængelige opgaver, vil output være som følger:

Eksempel på kategoriopgaver -------------------- velkomst - Opgaver, der viser en velkomstbesked 

Denne form for opgavedefinition kaldes ad hoc-definition.

Når man kommer videre, er det fordelagtigt at oprette en tilpassbar opgave, hvilken definition kan genbruges. Vi dækker, hvordan man opretter en opgave fra en type, og hvordan man gør en tilpasning tilgængelig for brugerne af denne opgave.

4. Definer graderingstasketype indeni build.gradle

Ovenstående “velkomst” -opgave kan ikke tilpasses, og i de fleste tilfælde er den ikke særlig nyttig. Vi kan køre det, men hvis vi har brug for det i et andet projekt (eller underprojekt), er vi nødt til at kopiere og indsætte dets definition.

Vi kan hurtigt aktiver tilpasning af opgaven ved at oprette en opgavetype. Blot, en opgavetype er defineret inde i build-scriptet:

klasse PrintToolVersionTask udvider DefaultTask {String tool @TaskAction ugyldig printToolVersion () {switch (tool) {case 'java': println System.getProperty ("java.version") break case 'groovy': println GroovySystem.version standard pause: smid nyt IllegalArgumentException ("Ukendt værktøj")}}}

EN brugerdefineret opgavetype er en simpel Groovy-klasse, der udvides Standardopgave - den klasse, der definerer standardopgaveimplementering. Der er andre opgaver, som vi kan udvide fra, men i de fleste tilfælde Standardopgave klasse er det rigtige valg.

PrintToolVersionTaskopgave indeholder værktøjsejendom, som kan tilpasses efter forekomster af denne opgave:

Strengeværktøj 

Vi kan tilføje så mange egenskaber, som vi vil - husk, det er bare et simpelt Groovy-klassefelt.

Derudover indeholder den metode kommenteret med @TaskAction. Den definerer, hvad denne opgave gør. I dette enkle eksempel udskriver den version af installeret Java eller Groovy - afhænger af den givne parameterværdi.

For at køre en brugerdefineret opgave baseret på den oprettede opgavetype, skal vi Opret en ny opgaveforekomst af denne type:

opgave printJavaVersion (type: PrintToolVersionTask) {værktøj 'java'} 

De vigtigste dele er:

  • vores opgave er en PrintToolVersionTask skriv, så når den udføres, udløser den den handling, der er defineret i metoden, der er kommenteret med @TaskAction
  • vi tilføjede en tilpasset værktøjsegenskabsværdi (java) som vil blive brugt af PrintToolVersionTask

Når vi kører ovenstående opgave, er output som forventet (afhænger af den installerede Java-version):

> Opgave: printJavaVersion 9.0.1 

Lad os nu oprette en opgave, der udskriver den installerede version af Groovy:

opgave printGroovyVersion (type: PrintToolVersionTask) {værktøj 'groovy'} 

Det bruger den samme opgavetype, som vi definerede tidligere, men det har en anden værdi for værktøjsejendomme. Når vi udfører denne opgave, udskrives den Groovy-versionen:

> Opgave: printGroovyVersion 2.4.12 

Hvis vi ikke har for mange brugerdefinerede opgaver, kan vi definere dem direkte i build.gradle fil (som vi gjorde ovenfor). Men hvis der er flere end nogle få, så er vores bygge.gradle-fil bliver svær at læse og forstå.

Heldigvis giver Gradle nogle løsninger til det.

5. Definer opgavetype i buildSrc Folder

Vi kan definere opgavetyper i buildSrc mappe, der er placeret på rodprojektniveauet. Gradle samler alt, hvad der er indeni, og tilføjer typer til klassestien, så vores build-script kan bruge det.

Vores opgavetype, som vi definerede før (PrintToolVersionTask) kan flyttes ind i buildSrc / src / main / groovy / com / baeldung / PrintToolVersionTask.groovy. Vi skal kun tilføje nogle importerer fra Gradle API ind i en flyttet klasse.

Vi kan definere et ubegrænset antal typer opgaver i buildSrc folder. Det er nemmere at vedligeholde, læse, og opgavetypedeklarationen er ikke på samme sted som opgavens instantiering.

Vi kan bruge disse typer på samme måde, som vi bruger typer, der er defineret direkte i build-scriptet. Vi skal kun huske at tilføje passende import.

6. Definer opgavetype i pluginet

Vi kan definere en brugerdefineret opgavetyper i et brugerdefineret Gradle-plugin. Se denne artikel, der beskriver, hvordan du definerer et brugerdefineret Gradle-plugin, defineret i:

  • build.gradle fil
  • buildSrc mappe som andre Groovy-klasser

Disse brugerdefinerede opgaver vil være tilgængelige for vores build, når vi definerer en afhængighed af dette plugin. Bemærk, at ad-hoc-opgaver også er tilgængelige - ikke kun tilpassede opgavetyper.

7. Konklusion

I denne vejledning dækkede vi, hvordan du opretter en brugerdefineret opgave i Gradle. Der er mange plugins tilgængelige, som du kan bruge i din build.gradle fil, der giver mange tilpassede opgavetyper, du har brug for.

Som altid er kodeuddrag tilgængelige på Github.


$config[zx-auto] not found$config[zx-overlay] not found