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.
Kommando | Beskrivelse |
---|---|
Myre | Bruges til at udføre en anden myreproces fra den nuværende. |
Copydir | Bruges til at kopiere en hel mappe. |
Kopifil | Bruges til at kopiere en enkelt fil. |
Cvs | Håndterer pakker / moduler hentet fra et CVS-lager. |
Slet | Sletter enten en enkelt fil eller alle filer i en bestemt mappe og dens underkataloger. |
Deltree | Sletter en mappe med alle dens filer og underkataloger. |
Exec | Udfører en systemkommando. Når os-attributten er angivet, udføres kommandoen kun, når Ant køres på et af de angivne operativsystemer. |
Få | Henter en fil fra en URL. |
Krukke | Jars et sæt filer. |
Java | Udfører en Java-klasse inden for den kørende (Ant) VM eller gafler en anden VM, hvis det er specificeret. |
Javac | Kompilerer et kildetræ i den kørende (Ant) VM. |
Javadoc / Javadoc2 | Genererer kodedokumentation ved hjælp af javadoc-værktøjet. |
Mkdir | Opretter et bibliotek. |
Ejendom | Indstiller en egenskab (efter navn og værdi) eller et sæt egenskaber (fra fil eller ressource) i projektet. |
Rmic | Kører rmic-kompilatoren til en bestemt klasse. |
T-frimærke | Indstiller egenskaberne DSTAMP, TSTAMP og TODAY i det aktuelle projekt. |
Stil | Behandler 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 mindre
og 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.