En tilpasset oppgave i Gradle

1. Oversikt

I denne artikkelen vil vi dekke hvordan du gjør det lage en tilpasset oppgave i Gradle. Vi viser en ny oppgavedefinisjon ved hjelp av et build-skript eller en tilpasset oppgavetype.

For introduksjonen til Gradle, se denne artikkelen. Den inneholder det grunnleggende om Gradle og - hva er det viktigste for denne artikkelen - introduksjonen til Gradle-oppgaver.

2. Egendefinert oppgavedefinisjon inne build.gradle

For å lage en rettferdig Gradle-oppgave, må vi legge definisjonen til den build.gradle fil:

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

Hovedmålet med ovennevnte oppgave er bare å skrive ut teksten "Velkommen i Baeldung!". Vi kan sjekke om dette oppgaven er tilgjengelig ved å løpe gradere oppgaver –all kommando:

gradere oppgaver - alt 

Oppgaven er på listen under gruppen Andre oppgaver:

Andre oppgaver ----------- velkommen

Den kan utføres akkurat som alle andre Gradle-oppgaver:

gradering velkommen 

Produksjonen er som forventet - "Velkommen i Baeldung!" beskjed.

Merknad: hvis alternativet -alle ikke er angitt, så er ikke oppgaver som tilhører kategorien "Annet" synlig. Egendefinert Gradle-oppgave kan tilhøre en annen gruppe enn “Annet” og kan inneholde en beskrivelse.

3. Angi gruppe og beskrivelse

Noen ganger er det praktisk å gruppere oppgaver etter funksjon, slik at de er synlige under en kategori. Vi kan raskt settgruppe for våre tilpassede oppgaver, bare ved å definere en gruppeegenskap:

oppgave velkommen {group 'Sample category' doLast {println 'Welcome on the Baeldung!' }}

Nå når vi kjører Gradle-kommandoen for å liste opp alle tilgjengelige oppgaver (-alle alternativet ikke er nødvendig lenger), ser vi oppgaven vår under ny gruppe:

Eksempel på kategorioppgaver --------------------- velkommen 

Imidlertid er det også gunstig for andre å se hva en oppgave er ansvarlig for. Vi kan lage en beskrivelse som inneholder kort informasjon:

oppgave velkomst {gruppe 'Eksempelkategori' beskrivelse 'Oppgaver som viser velkomstmelding' doLast {println 'Velkommen i Baeldung!' }} 

Når vi skriver ut en liste over tilgjengelige oppgaver, blir utdataene som følger:

Eksempel på kategorioppgaver -------------------- velkomst - Oppgaver som viser en velkomstmelding 

Denne typen oppgavedefinisjon kalles ad-hoc definisjon.

Når du kommer videre, er det fordelaktig å lage en tilpassbar oppgave hvilken definisjon kan brukes på nytt. Vi vil dekke hvordan du oppretter en oppgave fra en type og hvordan du gjør noen tilpasninger tilgjengelige for brukerne av denne oppgaven.

4. Definer Gradle Task Type Inside build.gradle

Ovennevnte velkomstoppgave kan ikke tilpasses, og i de fleste tilfeller er den ikke veldig nyttig. Vi kan kjøre det, men hvis vi trenger det i et annet prosjekt (eller underprosjekt), må vi kopiere og lime inn definisjonen.

Vi kan raskt aktivere tilpasning av oppgaven ved å opprette en oppgavetype. Bare en oppgavetype er definert i build-skriptet:

klasse PrintToolVersionTask utvider DefaultTask {String tool @TaskAction void printToolVersion () {switch (tool) {case 'java': println System.getProperty ("java.version") break case 'groovy': println GroovySystem.version standard pause: kast nytt IllegalArgumentException ("Ukjent verktøy")}}}

EN tilpasset oppgavetype er en enkel Groovy-klasse som utvides Standardoppgave - klassen som definerer standard oppgaveimplementering. Det er andre oppgavetyper som vi kan utvide fra, men i de fleste tilfeller Standardoppgave klasse er det riktige valget.

PrintToolVersionTaskoppgave inneholder verktøyegenskap som kan tilpasses etter forekomster av denne oppgaven:

Strengverktøy 

Vi kan legge til så mange egenskaper som vi vil - husk at det bare er et enkelt Groovy-klassefelt.

I tillegg inneholder den metoden kommentert med @TaskAction. Den definerer hva denne oppgaven gjør. I dette enkle eksemplet skriver den ut versjonen av installert Java eller Groovy - avhenger av gitt parameterverdi.

For å kjøre en tilpasset oppgave basert på opprettet oppgavetype, må vi opprette en ny oppgaveforekomst av denne typen:

oppgaveutskriftJavaVersion (type: PrintToolVersionTask) {verktøy 'java'} 

De viktigste delene er:

  • vår oppgave er en PrintToolVersionTask type, så når den kjøres, vil den utløse handlingen som er definert i metoden kommentert med @TaskAction
  • vi la til en tilpasset verdi for verktøyegenskap (java) som skal brukes av PrintToolVersionTask

Når vi kjører oppgaven ovenfor, er utdataene som forventet (avhenger av Java-versjonen som er installert):

> Oppgave: printJavaVersion 9.0.1 

La oss nå lage en oppgave som skriver ut den installerte versjonen av Groovy:

oppgaveutskriftGroovyVersion (type: PrintToolVersionTask) {verktøy 'groovy'} 

Den bruker den samme oppgavetypen som vi definerte tidligere, men den har en annen verktøyegenskapsverdi. Når vi utfører denne oppgaven, skrives den ut Groovy-versjonen:

> Oppgave: printGroovyVersion 2.4.12 

Hvis vi ikke har for mange tilpassede oppgaver, kan vi definere dem direkte i build.gradle fil (som vi gjorde ovenfor). Imidlertid, hvis det er flere enn noen få, er vår bygge.gradle-fil blir vanskelig å lese og forstå.

Heldigvis gir Gradle noen løsninger for det.

5. Definer oppgavetype i buildSrc Mappe

Vi kan definere oppgavetyper i buildSrc mappe som ligger på rotprosjektnivået. Gradle samler alt som er inne og legger til typer i klassestien slik at build-skriptet vårt kan bruke det.

Vår oppgavetype som vi definerte før (PrintToolVersionTask) kan flyttes inn i buildSrc / src / main / groovy / com / baeldung / PrintToolVersionTask.groovy. Vi må bare legge til noen importerer fra Gradle API inn i en flyttet klasse.

Vi kan definere et ubegrenset antall oppgavetyper i buildSrc mappe. Det er lettere å vedlikeholde, lese, og oppgavetypedeklarasjonen er ikke på samme sted som oppgavens instantiering.

Vi kan bruke disse typene på samme måte som vi bruker typer som er definert direkte i build-skriptet. Vi må bare huske å legge til passende import.

6. Definer oppgavetype i programtillegget

Vi kan definere egendefinerte oppgavetyper i et tilpasset Gradle-plugin. Se denne artikkelen, som beskriver hvordan du definerer et tilpasset Gradle-plugin, definert i:

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

Disse egendefinerte oppgavene vil være tilgjengelige for byggingen vår når vi definerer en avhengighet av dette programtillegget. Vær oppmerksom på at ad-hoc-oppgaver også er tilgjengelige - ikke bare tilpassede oppgavetyper.

7. Konklusjon

I denne veiledningen dekket vi hvordan du lager en tilpasset oppgave i Gradle. Det er mange plugins tilgjengelig som du kan bruke i din build.gradle fil som vil gi mange tilpassede oppgavetyper du trenger.

Som alltid er kodebiter tilgjengelig på Github.


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