Programmering

Automatiser din byggeproces ved hjælp af Java og Ant

En defineret proces er et af de mest nødvendige, men ofte mindst anvendte værktøjer til softwareudvikling. Det er af natur en overordnet opgave, der ledsager en udviklingsindsats. En defineret byggeproces sikrer, at softwaren i dit udviklingsprojekt bygges på nøjagtig samme måde hver gang en build udføres. Da byggeprocessen bliver mere kompleks - for eksempel med EJB-builds eller yderligere opgaver - bliver det mere nødvendigt at opnå en sådan standardisering. Du bør etablere, dokumentere og automatisere den nøjagtige række trin så meget som muligt.

Hvorfor har jeg brug for en defineret byggeproces?

En defineret byggeproces er en væsentlig del af enhver udviklingscyklus, fordi den hjælper med at lukke kløften mellem udviklings-, integrations-, test- og produktionsmiljøer. En byggeproces alene vil fremskynde migrationen af ​​software fra et miljø til et andet. Det fjerner også mange problemer relateret til kompilering, klassesti eller ejendomme, der koster mange projekter tid og penge.

Hvad er myre?

Ant er et platformuafhængigt script-værktøj, der lader dig konstruere dine build-scripts på samme måde som "make" -værktøjet i C eller C ++. Du kan bruge et stort antal indbyggede opgaver i Ant uden nogen tilpasning. Nogle af de vigtigste opgaver vises i nedenstående tabel, men forklares mere detaljeret i det følgende eksempel.

Her er nogle nyttige kommandoer, der er bygget i Ant-distributionen.

KommandoBeskrivelse
MyreBruges til at udføre en anden myreproces fra den nuværende.
CopydirBruges til at kopiere en hel mappe.
KopifilBruges til at kopiere en enkelt fil.
CvsHåndterer pakker / moduler hentet fra et CVS-lager.
SletSletter enten en enkelt fil eller alle filer i en bestemt mappe og dens underkataloger.
DeltreeSletter en mappe med alle dens filer og underkataloger.
ExecUdfører en systemkommando. Når os-attributten er angivet, udføres kommandoen kun, når Ant køres på et af de angivne operativsystemer.
Henter en fil fra en URL.
KrukkeJars et sæt filer.
JavaUdfører en Java-klasse inden for den kørende (Ant) VM eller gafler en anden VM, hvis det er specificeret.
JavacKompilerer et kildetræ i den kørende (Ant) VM.
Javadoc / Javadoc2Genererer kodedokumentation ved hjælp af javadoc-værktøjet.
MkdirOpretter et bibliotek.
EjendomIndstiller en egenskab (efter navn og værdi) eller et sæt egenskaber (fra fil eller ressource) i projektet.
RmicKører rmic-kompilatoren til en bestemt klasse.
T-frimærkeIndstiller egenskaberne DSTAMP, TSTAMP og TODAY i det aktuelle projekt.
StilBehandler et sæt dokumenter via XSLT.

Mens andre værktøjer er tilgængelige til softwareudvikling, er Ant let at bruge og kan mestres inden for få minutter. Derudover lader Ant dig oprette udvidet funktionalitet ved at udvide nogle af sine klasser. Jeg vil vise denne udvidelse i et følgende eksempel.

Hvad skal jeg bruge for at bruge Ant?

Du skal installere tre komponenter på din maskine for at køre Ant: JDK, XML parser og Ant (se Ressourcer for links).

I mange tilfælde er XML-parseren en del af lib-filerne distribueret med Servlet runner eller webserveren. Hvis ikke, er den gratis XML-parser fra java.sun.com tilstrækkelig.

Antinstallation består af at downloade filerne, tilføje klassebibliotekerne til klassestien og tilføje Ant-binære filer til stien.

Eksempel på scenarie

Dette eksempelscenario skal hjælpe dig med at vise værdien af ​​Ant og give indsigt i fordelene, og hvordan du kan bruge den.

Fordi en stor del af den aktuelle Java-udvikling er fokuseret på serversiden Java, har jeg valgt en serverside-applikation til eksemplet. Udviklere, der arbejder på Java-applikationer på serversiden, er typisk interesserede i kompilering af servlets, implementering af JSP-filer og implementering af HTML-filer, konfigurationsfiler eller billeder.

En fælles ordning til at udføre denne opbygning vil involvere udvikling af små scripts på platformsspecifikke sprog baseret på serverens operativsystem. For eksempel kan en udvikler, der arbejder på en NT-maskine, oprette en batchfil, der udfører kompileringsopgaverne og derefter kører implementeringen. Men hvis produktionsmiljøet havde Unix eller Linux, ville udvikleren skulle omskrive scriptet og sikre, at scripts var synkroniseret.

OK, vis mig hvordan dette fungerer

Så jeg har forhåbentlig overbevist dig om behovet for at bruge Ant og vist, hvor enkelt det er at installere. Nu viser jeg dig, hvor simpelt Ant skal bruges ved at gå gennem et eksempel, der udfører enkel kompilering og implementering.

Enkel byggeproces med Ant (simple.xml)

Der er meget at forklare i ovenstående eksempel. Først skal du forstå strukturen i simple.xml-filen. Det er en velformateret XML-fil, der indeholder en projektenhed, der består af flere målenheder.

Den første linje indeholder oplysninger om det samlede projekt, der skal bygges.

De vigtigste elementer i projektlinjen er Standard og basedir.

Det Standard attribut refererer til det standardmål, der skal udføres. Da Ant er et kommandolinjeværktøj, er det kun muligt at udføre en delmængde af måltrinene i Ant-filen. For eksempel kunne jeg udføre følgende kommando:

% ant -buildfile simple.xml init 

Det vil udføre myre kommando og kør gennem simple.xml-filen indtil i det målet nås. Så i dette eksempel er standardværdien indsætte. Ant-processen, der påberåbes i den følgende linje, løber gennem simple.xml fil indtil indsætte kommandoen er nået:

% ant-buildfil simple.xml 

Det basedir attribut er ret selvforklarende, da det er basismappen, hvorfra de relative referencer indeholdt i build-filen hentes. Hvert projekt kan kun have et basedir attribut, så du kan vælge enten at inkludere den fuldt kvalificerede biblioteksplacering eller opdele den store projektfil i mindre projektfiler med forskellige basedir egenskaber.

Den næste linje af interesse er mållinjen. To forskellige versioner vises her:

Det mål element indeholder fire attributter: navn, hvis, med mindreog afhænger. Ant kræver den navn attribut, men de andre tre attributter er valgfri.

Ved brug af afhænger, kan du stable Ant-opgaverne, så en afhængig opgave ikke startes, før den opgave, den afhænger af, er afsluttet. I ovenstående eksempel starter den rene opgave ikke før i det opgaven er afsluttet. Det afhænger attribut kan også indeholde en liste med komma-adskilte værdier, der angiver flere opgaver, som opgaven i diskussionen afhænger af.

Det hvis og med mindre kommandoer giver dig mulighed for at angive kommandoer, der skal udføres enten hvis en bestemt ejendom er indstillet eller med mindre denne ejendom er indstillet. Det hvis udføres, når ejendomsværdien er indstillet, og med mindre udføres, hvis værdien ikke er indstillet. Du kan bruge ledig kommando for at indstille disse egenskaber som vist i et følgende eksempel, eller du kan indstille dem via kommandolinjen.

Det i det mål fra det enkle eksempel indeholder fire linjer af ejendom kommandoer som vist her:

Disse ejendom linjer giver dig mulighed for at angive almindeligt anvendte mapper eller filer. En egenskab er et simpelt navneværdipar, der giver dig mulighed for at henvise til biblioteket eller filen som en logisk enhed snarere end en fysisk.

Hvis du vil henvise til sourceDir variabel senere i Ant-filen, kan du blot bruge følgende syntaks til at advare Ant om at opnå værdien for dette tag: $ {sourceDir}.

To andre kommandoer til stede i ovenstående buildfil er:

Disse kommandoer bruges til at sikre, at der ikke er nogen fremmede filer i outputDir (eller klasser katalog, når der refereres til som nævnt ovenfor). Den første kommando fjerner hele træet indeholdt i outputDir. Den anden kommando opretter biblioteket igen.

Den sidste linje af stor interesse for udvikleren er følgende kompileringslinje:

Det javac kommandoen kræver en kildekatalog (inputplaceringen for .java-filerne) og en destinationskatalog (outputplaceringen for .classes-filen). Det er vigtigt at bemærke, at alle mapper enten skal eksistere inden kørslen af myre kommando eller oprettes ved hjælp af mkdir kommando. Ant opretter ikke mapper baseret på intuition, så du skal oprette outputDir, bruger mkdir kommando inden kompileringstrinnet ovenfor.

Efter udarbejde opgaven er afsluttet, indsætte opgaven udfører kopieringsfunktionen for at flytte alle JSP-filer fra kildekataloget til en implementeringsmappe. Ved hjælp af copydir kommando, kopierer du hele JSP-biblioteket fra et sted til et andet. Jeg brugte kopifil kommando til at kopiere en enkelt egenskabsfil som en del af buildet.

Mens det tog flere linjer at forklare eksemplet, skulle det være tydeligt, at Ant er et brugervenligt værktøj. Brug af denne buildfil som udgangspunkt, skal du være i stand til at inkorporere Ant i din udviklingsindsats. Det myre kommandoer vist i ovenstående eksempel har yderligere funktionalitet, hvoraf nogle vil blive diskuteret i denne artikel, resten overlades til dig sammen med henvisninger til dokumentationen.

Vigtige opgaver

Det overlades til dig at læse gennem de indbyggede opgaver, der er inkluderet i Ant-distributionen. Se brugervejledningen i Ressourcer for information om hver kommando. Jeg har valgt to almindeligt anvendte kommandoer som eksempler på yderligere muligheder, der er tilgængelige for build manager uden nogen tilpasning.

Kompileringskode (inklusive EJB'er)

I det enkle eksempel, der blev diskuteret tidligere, så du en simpel form for javac kommando. Hvis du nu undersøger det mere detaljeret, kan du se, at du kan specificere kompileringsflagene, f.eks. Udfasning, fejlretning eller optimering samt de filer, der vil eller ikke vil blive inkluderet i kompileringen.

Du kan bruge inkludere / ekskludere enheder inde i javac opgave at inkludere / ekskludere filer, der matcher mønsteret i navn attribut fra samlingen. Fra ovenstående eksempel vil du medtage filer indeholdt i ethvert bibliotek, der ender på .java, men på samme tid vil du ekskludere filer ved navn Script.java, medmindre en egenskab bsf.præsent er sat til sandt.

Du indstiller bsf.præsent egenskab ved hjælp af følgende opgave, der søger i klassestien efter det angivne klassesnavn og sæt bsf.præsent ifølge søgeresultaterne:

Det javac kommandoen inkluderer ikke filer kaldet version.txt fra kompilering baseret på ekskluder-kommandoen ovenfor.

Genererer javadoc

En anden opgave, som Ant kan hjælpe med at automatisere, er genereringen af ​​javadoc. Du kan bruge følgende kommando til at generere javadoc:

Pakkerne angiver de overordnede pakker, som javadoc vil inkludere. Det sourcepath attributpunkter mod kildefilernes placering. Det javadoc kommandoen indeholder også attributter, der giver dig mulighed for at specificere titlen på vinduet og dokumentet. Du kan også medtage en meddelelse om ophavsret nederst på hver javadoc-side ved hjælp af bund attribut.

Kan Ant gøre XYZ?

På dette tidspunkt har du set nogle af de mulige opgaver i din byggeproces, som Ant kan automatisere. Disse opgaver er inkluderet uden for boksen i Ant. Du vil muligvis tilpasse Ant for at hjælpe dig med at udføre nogle mere vanskelige opgaver såsom at opbygge EJB'er og udføre fjernkonfigurationsstyring. Nogle af jer vil måske øge Ants rapporteringsfunktioner eller konstruere en brugergrænseflade, der kan køre Ant-processen.

Det enkle svar på spørgsmålet "Kan Ant gøre XYZ?" er "Ja, men du bliver muligvis nødt til at tilpasse det."

Udvide Ant

To Ant-udvidelser er interessante at diskutere på dette tidspunkt. De øger rapporteringen og evnen til at distribuere kode eksternt ved hjælp af Ant.

Forbedringer af rapportering