Programmering

Automatiser byggeprosessen din ved hjelp av Java og Ant

En definert prosess er et av de mest nødvendige, men ofte minst brukte verktøyene i programvareutvikling. Det er av natur en overordnet oppgave som følger med en utviklingsinnsats. En definert byggeprosess sikrer at programvaren i utviklingsprosjektet ditt bygges på nøyaktig samme måte hver gang en build utføres. Etter hvert som byggeprosessen blir mer kompleks - for eksempel med EJB-bygg eller flere oppgaver - blir det mer nødvendig å oppnå en slik standardisering. Du bør etablere, dokumentere og automatisere den nøyaktige serien av trinn så mye som mulig.

Hvorfor trenger jeg en definert byggeprosess?

En definert byggeprosess er en viktig del av enhver utviklingssyklus fordi den hjelper til med å lukke gapet mellom utviklings-, integrasjons-, test- og produksjonsmiljøene. En byggeprosess alene vil øke overføringen av programvare fra et miljø til et annet. Det fjerner også mange problemer knyttet til kompilering, klassesti eller eiendommer som koster mange prosjekter tid og penger.

Hva er maur?

Ant er et plattformuavhengig skriptverktøy som lar deg konstruere byggeskriptene dine på samme måte som "make" -verktøyet i C eller C ++. Du kan bruke et stort antall innebygde oppgaver i Ant uten tilpasning. Noen av de viktigste oppgavene vises i følgende tabell, men forklart mer detaljert i eksemplet som følger.

Her er noen nyttige kommandoer som er bygd i Ant-distribusjonen.

KommandoBeskrivelse
MaurBrukes til å utføre en annen maurprosess fra den nåværende.
CopydirBrukes til å kopiere en hel katalog.
Kopier filBrukes til å kopiere en enkelt fil.
CvsHåndterer pakker / moduler hentet fra et CVS-depot.
SlettSletter enten en enkelt fil eller alle filene i en spesifisert katalog og underkatalogene.
DeltreeSletter en katalog med alle filene og underkatalogene.
UtførUtfører en systemkommando. Når os-attributtet er spesifisert, blir kommandoen bare utført når Ant kjøres på et av de angitte operativsystemene.
Henter en fil fra en URL.
KrukkeKrukker et sett med filer.
JavaUtfører en Java-klasse i den kjørende (Ant) VM eller gafler en annen VM hvis spesifisert.
JavacKompilerer et kildetre i den kjørende (Ant) VM.
Javadoc / Javadoc2Genererer kodedokumentasjon ved hjelp av javadoc-verktøyet.
MkdirLag en katalog.
EiendomAngir en eiendom (etter navn og verdi), eller sett med egenskaper (fra fil eller ressurs) i prosjektet.
RmicKjører rmic-kompilatoren for en bestemt klasse.
TstampAngir egenskapene DSTAMP, TSTAMP og TODAY i det aktuelle prosjektet.
StilBehandler et sett med dokumenter via XSLT.

Mens andre verktøy er tilgjengelige for å lage programvarebygging, er Ant enkelt å bruke og kan mestres i løpet av få minutter. I tillegg lar Ant deg lage utvidet funksjonalitet ved å utvide noen av klassene. Jeg vil vise denne utvidelsen i et følgende eksempel.

Hva trenger jeg for å bruke Ant?

Du må installere tre komponenter på maskinen din for å kjøre Ant: JDK, XML-parser og Ant (se Ressurser for lenker).

I mange tilfeller er XML-parseren en del av lib-filene distribuert med Servlet runner eller webserveren. Hvis ikke, er den gratis XML-parseren fra java.sun.com tilstrekkelig.

Antinstallasjon består av å laste ned filene, legge til klassebibliotekene på klassestien og legge til Ant-binærene i banen.

Eksempel på scenario

Dette eksempelsscenariet skal hjelpe deg med å vise verdien av Ant og gi innsikt i fordelene og hvordan du kan bruke den.

Fordi en stor del av den nåværende Java-utviklingen er fokusert på serversiden Java, har jeg valgt en server-side-applikasjon for eksemplet. Utviklere som jobber med Java-applikasjoner på serversiden, er vanligvis interessert i kompilering av servlets, distribusjon av JSP-filer og distribusjon av HTML-filer, konfigurasjonsfiler eller bilder.

En vanlig ordning for å gjøre denne bygningen vil innebære utvikling av små skript på plattformsspesifikke språk basert på serverens operativsystem. For eksempel kan en utvikler som arbeider på en NT-maskin lage en batchfil som utfører kompileringsoppgavene og deretter kjører distribusjonen. Imidlertid, hvis produksjonsmiljøet hadde Unix eller Linux, måtte utvikleren omskrive skriptet, og sørge for at skriptene var synkronisert.

OK, vis meg hvordan dette fungerer

Så jeg har forhåpentligvis overbevist deg om behovet for å bruke Ant og vist hvor enkelt det er å installere. Nå skal jeg vise deg hvor enkelt Ant er å bruke ved å gå gjennom et eksempel som utfører enkel kompilering og distribusjon.

Enkel byggeprosess med Ant (simple.xml)

Det er mye å forklare i eksemplet ovenfor. Først bør du forstå strukturen til simple.xml-filen. Det er en godt formatert XML-fil som inneholder en prosjektenhet som består av flere målenheter.

Første linje inneholder informasjon om det samlede prosjektet som skal bygges.

De viktigste elementene i prosjektlinjen er misligholde og basedir.

De misligholde attributt refererer til standardmålet som skal utføres. Fordi Ant er et kommandolinjeverktøy, er det mulig å utføre bare en delmengde av måltrinnene i Ant-filen. For eksempel kunne jeg utføre følgende kommando:

% ant -buildfile simple.xml init 

Det vil utføre maur kommandoen og kjør gjennom simple.xml-filen til i det målet er nådd. Så i dette eksemplet er standardverdien utplassere. Ant-prosessen påkalt i følgende linje vil løpe gjennom simple.xml filen til utplassere kommandoen er nådd:

% ant -buildfile simple.xml 

De basedir attributt er ganske selvforklarende, da det er basiskatalogen der de relative referansene i build-filen hentes fra. Hvert prosjekt kan bare ha ett basedir attributt slik at du kan velge å enten inkludere den fullstendige katalogplasseringen eller dele den store prosjektfilen inn i mindre prosjektfiler med forskjellige basedir attributter.

Den neste linjen av interesse er mållinjen. To forskjellige versjoner vises her:

De mål elementet inneholder fire attributter: Navn, hvis, med mindre, og avhenger. Maur krever Navn attributt, men de tre andre attributtene er valgfrie.

Ved hjelp av avhenger, kan du stable Ant-oppgavene slik at en avhengig oppgave ikke startes før oppgaven den er avhengig av er fullført. I eksemplet ovenfor starter den rene oppgaven ikke før i det oppgaven er fullført. De avhenger attributt kan også inneholde en liste med kommaadskilte verdier som indikerer flere oppgaver som oppgaven i diskusjonen er avhengig av.

De hvis og med mindre kommandoer lar deg spesifisere kommandoer som skal utføres enten hvis en bestemt eiendom er satt eller med mindre at eiendommen er satt. De hvis vil kjøre når eiendomsverdien er satt, og med mindre vil utføres hvis verdien ikke er satt. Du kan bruke tilgjengelig kommando for å angi disse egenskapene som vist i følgende eksempel, eller du kan angi dem via kommandolinjen.

De i det mål fra det enkle eksemplet inneholder fire linjer med eiendom kommandoer som vist her:

Disse eiendom linjer kan du spesifisere kataloger eller filer som ofte brukes. En eiendom er et enkelt navneparpar som lar deg referere til katalogen eller filen som en logisk enhet i stedet for en fysisk.

Hvis du vil referere til kildeDir variabel senere i Ant-filen, kan du bare bruke følgende syntaks for å varsle Ant for å oppnå verdien for denne taggen: $ {sourceDir}.

To andre kommandoer i ovennevnte buildfil er:

Disse kommandoene brukes til å sikre at det ikke er fremmede filer i outputDir (eller klasser katalog når dereferenser som nevnt ovenfor). Den første kommandoen fjerner hele treet som ligger under outputDir. Den andre kommandoen oppretter katalogen igjen.

Den siste linjen av stor interesse for utvikleren er følgende kompileringslinje:

De javac kommandoen krever en kildekatalog (inngangsplasseringen til .java-filene) og en destinasjonskatalog (utgangsplasseringen til .classes-filen). Det er viktig å merke seg at alle kataloger enten må eksistere før kjøringen av maur kommandoen eller opprettes ved hjelp av mkdir kommando. Ant lager ikke kataloger basert på intuisjon, så du må opprette outputDir, bruker mkdir kommandoen før kompileringstrinnet ovenfor.

Etter kompilere oppgaven er fullført, utplassere oppgaven vil utføre kopieringen for å flytte alle JSP-filer fra kildekatalogen til en distribusjonskatalog. Ved å bruke copydir kommandoen, kopierer du hele JSP-katalogen fra ett sted til et annet. Jeg brukte Kopier fil kommando for å kopiere en enkelt eiendomsfil som en del av build.

Selv om det tok flere linjer å forklare eksemplet, burde det være tydelig at Ant er et brukervennlig verktøy. Ved å bruke denne buildfilen som utgangspunkt, bør du kunne innlemme Ant i utviklingsarbeidet ditt. De maur kommandoer vist i eksemplet ovenfor har ytterligere funksjonalitet, hvorav noen vil bli diskutert i denne artikkelen, resten overlates til deg sammen med referanser til dokumentasjonen.

Viktige oppgaver

Det overlates til deg å lese gjennom de innebygde oppgavene som er inkludert i Ant-distribusjonen. Se brukerhåndboken i Ressurser for informasjon om hver kommando. Jeg har valgt to vanlige kommandoer som eksempler på tilleggsalternativer tilgjengelig for bygningsadministratoren uten tilpasning.

Kompileringskode (inkludert EJB)

I det enkle eksemplet som ble diskutert tidligere, så du en enkel form for javac kommando. Nå, hvis du undersøker det mer detaljert, ser du at du kan spesifisere kompilasjonsflaggene som avvikling, feilsøking eller optimalisering, samt filene som vil eller ikke vil bli inkludert i kompileringen.

Du kan bruke inkludere / ekskludere enheter inne i javac oppgave å inkludere / ekskludere filer som samsvarer med mønsteret i Navn attributt fra samlingen. Fra eksemplet ovenfor vil du inkludere filer som finnes i hvilken som helst katalog som slutter på .java, men samtidig vil du ekskludere filer som heter Script.java, med mindre en egenskap bsf.present er satt til sant.

Du setter inn bsf.present egenskap ved hjelp av følgende oppgave som søker i klassestien etter klassenavnet som er spesifisert og angir bsf.present i henhold til søkeresultatene:

De javac kommandoen inkluderer ikke filer kalt version.txt fra samlingen basert på ekskluder-kommandoen ovenfor.

Genererer javadoc

En annen oppgave som Ant kan hjelpe til med å automatisere er generering av javadoc. Du kan bruke følgende kommando til å generere javadoc:

Pakkene spesifiserer de samlede pakkene som javadoc vil inkludere. De sourcepath attributtpoeng mot plasseringen av kildefilene. De javadoc kommandoen inneholder også attributter som lar deg spesifisere tittelen på vinduet og dokumentet. Du kan også inkludere en copyright-melding nederst på hver javadoc-side ved hjelp av bunn Egenskap.

Kan maur gjøre XYZ?

På dette punktet har du sett noen av de mulige oppgavene i byggeprosessen din som Ant kan automatisere. Disse oppgavene er inkludert utenfor boksen i Ant. Det kan være lurt å tilpasse Ant for å hjelpe deg med å utføre vanskeligere oppgaver, for eksempel å bygge EJB og utføre ekstern konfigurasjonsadministrasjon. Noen av dere vil kanskje øke Ants rapporteringsmuligheter eller konstruere et brukergrensesnitt som kan kjøre Ant-prosessen.

Det enkle svaret på spørsmålet "Kan Ant gjøre XYZ?" er "Ja, men du må kanskje tilpasse det."

Utvide Ant

To maurforlengelser er interessante å diskutere på dette punktet. De har økt rapportering og muligheten til å distribuere kode eksternt ved hjelp av Ant.

Rapporteringsforbedringer

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