Automatizirajte svoj postupak gradnje pomoću Java i Ant

Definirani proces jedan je od najneophodnijih, ali često najmanje korištenih alata u razvoju softvera. Po prirodi je to režijski zadatak koji prati razvojni napor. Definirani postupak izrade osigurava da se softver u vašem razvojnom projektu izrađuje na potpuno isti način svaki put kada se izvrši gradnja. Kako proces izrade postaje složeniji - na primjer, s EJB gradnjama ili dodatnim zadacima - postaje sve potrebnije postići takvu standardizaciju. Trebali biste uspostaviti, dokumentirati i automatizirati točne nizove koraka što je više moguće.

Zašto trebam definirani postupak gradnje?

Definirani postupak izrade važan je dio svakog razvojnog ciklusa jer pomaže u smanjivanju jaza između razvojnog, integracijskog, testnog i proizvodnog okruženja. Sam postupak gradnje ubrzat će migraciju softvera iz jednog okruženja u drugo. Također uklanja mnoga pitanja vezana uz kompilaciju, put predavanja ili svojstva koja mnoge projekte koštaju vremena i novca.

Što je mrav?

Ant je alat za skriptiranje neovisan o platformi koji vam omogućuje da konstruirate svoje skripte za izgradnju na sličan način kao i alat "make" u C ili C ++. U Antu možete koristiti velik broj ugrađenih zadataka bez ikakvih prilagodbi. Neki od najvažnijih zadataka prikazani su u sljedećoj tablici, ali su detaljnije objašnjeni u primjeru koji slijedi.

Evo nekoliko korisnih naredbi koje su ugrađene u Ant distribuciju.

Naredba Opis
Mrav Koristi se za izvršavanje drugog mravljeg procesa unutar trenutnog.
Copydir Koristi se za kopiranje cijelog direktorija.
Datoteka za kopiranje Koristi se za kopiranje jedne datoteke.
Cvs Obrađuje pakete / module preuzete iz CVS spremišta.
Izbrisati Briše jednu datoteku ili sve datoteke u navedenom direktoriju i njegovim poddirektorijima.
Deltree Briše direktorij sa svim datotekama i poddirektorijima.
Izv Izvršava naredbu sustava. Kada se navede atribut os, tada se naredba izvršava samo kada se Ant pokrene na jednom od navedenih operativnih sustava.
Dobiti Dohvaća datoteku s URL-a.
Jar Spremi skup datoteka.
Java Izvršava Java klasu unutar pokrenutog (Ant) VM-a ili račva drugi VM ako je naveden.
Javac Sastavlja izvorno stablo unutar pokrenute (Ant) VM.
Javadoc / Javadoc2 Generira dokumentaciju koda pomoću javadoc alata.
Mkdir Izrađuje direktorij.
Vlasništvo Postavlja svojstvo (po imenu i vrijednosti) ili skup svojstava (iz datoteke ili resursa) u projektu.
Rmić Pokreće rmic prevodilac za određenu klasu.
Tstamp Postavlja svojstva DSTAMP, TSTAMP i DANAS u trenutnom projektu.
Stil Obrađuje skup dokumenata putem XSLT-a.

Iako su dostupni drugi alati za izradu softvera, Ant je jednostavan za upotrebu i njime se može svladati u roku od nekoliko minuta. Osim toga, Ant vam omogućuje stvaranje proširene funkcionalnosti proširivanjem nekih njegovih klasa. Pokazat ću ovo proširenje u sljedećem primjeru.

Što trebam da bih koristio Ant?

Na svoj stroj morate instalirati tri komponente da biste pokrenuli Ant: JDK, XML parser i Ant (veze potražite u Resursima).

U mnogim je slučajevima XML parser dio datoteka lib distribuiranih s pokretačkim programom Servlet ili web poslužiteljem. Ako nije, dovoljan je besplatni XML parser sa stranice java.sun.com.

Instalacija mrava sastoji se od preuzimanja datoteka, dodavanja knjižnica klasa u put predavanja i dodavanja binarnih datoteka Ant u stazu.

Primjer scenarija

Ovaj primjer scenarija trebao bi vam pokazati vrijednost mrava i pružiti uvid u njegove prednosti i kako ga možete koristiti.

Budući da je velik dio trenutnog razvoja Java usmjeren na Javu na poslužitelju, za primjer sam odabrao aplikaciju na poslužitelju. Programeri koji rade na Java aplikacijama na poslužitelju obično su zainteresirani za sastavljanje servleta, postavljanje JSP datoteka i postavljanje HTML datoteka, konfiguracijskih datoteka ili slika.

Uobičajena shema za ovu izradu uključivala bi razvoj malih skripti na jezicima specifičnim za platformu na temelju operacijskog sustava poslužitelja. Na primjer, programer koji radi na NT stroju mogao bi stvoriti batch datoteku koja izvršava zadatke kompilacije, a zatim pokreće implementaciju. Međutim, ako je proizvodno okruženje imalo Unix ili Linux, programer bi morao prepisati skriptu, osiguravajući da su skripte sinkronizirane.

OK, pokaži mi kako ovo funkcionira

Dakle, nadam se da sam vas uvjerio u potrebu korištenja Ant-a i pokazao koliko je jednostavno instalirati. Sada ću vam pokazati kako je Ant jednostavan za upotrebu, prolazeći kroz primjer koji izvodi jednostavnu kompilaciju i postavljanje.

Jednostavan postupak izrade s Antom (simple.xml)


  

U gornjem primjeru ima puno toga za objasniti. Prvo, trebali biste razumjeti strukturu datoteke simple.xml. To je dobro formatirana XML datoteka koja sadrži projektni entitet koji se sastoji od nekoliko ciljnih entiteta.

Prvi redak sadrži informacije o cjelokupnom projektu koji treba izraditi.


  

Najvažniji elementi projektne linije su defaulti basedir.

defaultAtribut upućuje na zadani cilj koji treba izvršiti. Budući da je Ant alat za izgradnju naredbenog retka, u datoteci Ant moguće je izvršiti samo podskup ciljnih koraka. Na primjer, mogao bih izvršiti sljedeću naredbu:

% ant -buildfile simple.xml init 

To će izvršiti antnaredbu i provoditi se kroz datoteku simple.xml dok se initne postigne cilj. Dakle, u ovom primjeru zadana vrijednost je deploy. Proces Ant pokrenut u slijedećem retku pokrenut će se kroz simple.xmldatoteku dok se deployne postigne naredba:

% ant -buildfile simple.xml 

basedirAtribut je prilično razumljiva sama po sebi, jer je baza katalog iz kojeg su preuzete su relativne reference sadržane u gradnji datoteku. Svaki projekt može imati samo jedan basediratribut, tako da možete uključiti potpuno kvalificirano mjesto direktorija ili razbiti veliku datoteku projekta na manje projektne datoteke s različitim basediratributima.

Sljedeća linija interesa je ciljna linija. Ovdje su prikazane dvije različite verzije:


  

targetElement sadrži četiri atribute: name, if, unless, i depends. Ant zahtijeva nameatribut, ali ostala tri atributa nisu obavezna.

Pomoću njega dependsmožete slagati zadatke Ant tako da se ovisni zadatak ne pokreće dok se zadatak o kojem ovisi ne dovrši. U gornjem primjeru, čisti zadatak neće započeti dok se initzadatak ne dovrši. dependsAtribut može sadržavati i popis vrijednosti odvojene zarezima ukazuju nekoliko zadataka da zadatak u raspravi o kojima ovisi.

ifI unlessnaredbe možete navesti naredbe koje se izvode bilo ako neki entitet postavljen ili ako nije da svojstvo postavljeno. Izvršit ifće se kada je postavljena vrijednost svojstva, a unlessizvršit će se ako vrijednost nije postavljena. Pomoću availablenaredbe možete postaviti ta svojstva kao što je prikazano u sljedećem primjeru ili ih možete postaviti putem naredbenog retka.

initMeta iz jednostavnog primjera sadrži četiri retka propertynaredbe kao što je prikazano ovdje:


  

Ovi propertyretci omogućuju vam određivanje najčešće korištenih direktorija ili datoteka. Svojstvo je jednostavan par vrijednosti vrijednosti koji omogućuje upućivanje na direktorij ili datoteku kao logički entitet, a ne kao fizički.

Ako ste htjeli referenca sourceDirvarijable kasnije u Ant datoteku, možete jednostavno koristiti sljedeću sintaksu upozoriti Ant za dobivanje vrijednosti za tu oznaku: ${sourceDir}.

Dvije druge naredbe prisutne u gornjoj datoteci gradnje su:


  

Te se naredbe koriste kako bi se osiguralo da u outputDir(ili classesdirektoriju kad se dereferencira kako je gore spomenuto) nema suvišnih datoteka . Prva naredba uklanja cijelo stablo sadržano pod outputDir. Druga naredba ponovno kreira direktorij.

Posljednji redak koji je najvažniji za programera je sljedeći redak kompilacije:


  

javacNaredba zahtijeva izvorni direktorij (ulaz mjesto od .java datoteka) i odredišni direktorij (izlaz Lokacija .classes datoteke). Važno je napomenuti da svi direktoriji moraju ili postojati prije pokretanja antnaredbe ili biti stvoreni pomoću mkdirnaredbe. Ant ne stvara direktorije na temelju intuicije, pa morate stvoriti outputDir, koristeći mkdirnaredbu prije gornjeg koraka kompilacije.

Nakon završetka compilezadatka, deployizvršit će se operacija kopiranja za premještanje svih JSP datoteka iz izvornog direktorija u direktorij implementacije. Korištenjem copydirnaredbe kopirate cijeli JSP direktorij s jednog mjesta na drugo. Pomoću copyfilenaredbe kopirao sam jednu datoteku svojstava kao dio gradnje.

Iako je za objašnjenje primjera trebalo nekoliko redaka, trebalo bi biti očito da je Ant jednostavan alat. Koristeći ovu datoteku gradnje kao polaznu točku, trebali biste biti u mogućnosti uključiti Ant u svoj razvojni napor. U antnaredbe navedene u gornjem primjeru su daljnje funkcionalnosti, od kojih će se raspravljati u ovom članku, a ostatak je lijevo za vas, zajedno s referencama na dokumentaciji.

Važni zadaci

Na vama je da pročitate ugrađene zadatke uključene u distribuciju Ant. Informacije o svakoj naredbi potražite u korisničkom vodiču u Resursima. Odabrao sam dvije često korištene naredbe kao primjere dodatnih opcija dostupnih upravitelju gradnje bez ikakvih prilagodbi.

Sastavljanje koda (uključujući EJB-ove)

U ranije opisanom jednostavnom primjeru vidjeli ste jednostavan oblik javacnaredbe. Sada, ako ga detaljnije proučite, vidjet ćete da možete odrediti zastavice kompilacije kao što su zastarijevanje, ispravljanje pogrešaka ili optimizacija, kao i datoteke koje će biti ili neće biti uključene u kompilaciju.


  

include/excludeEntitete unutar javaczadatka možete koristiti za uključivanje / isključivanje datoteka koje odgovaraju uzorku u nameatributu iz kompilacije. Iz gornjeg primjera želite uključiti datoteke sadržane u bilo kojem direktoriju koji završava s .java, ali istodobno želite izuzeti datoteke s imenom Script.java, osim ako je svojstvo bsf.presentpostavljeno na true.

bsf.presentSvojstvo postavljate pomoću sljedećeg zadatka koji pretražuje put klase prema navedenom imenu klase i postavlja ga bsf.presentprema rezultatima pretraživanja:


  

javacNaredba neće uključivati datoteke koje se zovu version.txt od izrade temelji se na isključiti naredbu iznad.

Generiranje javadoca

Još jedan zadatak koji Ant može automatizirati je generacija javadoca. Za generiranje javadoca možete upotrijebiti sljedeću naredbu:


  

Paketi određuju ukupne pakete koje će javadoc sadržavati. sourcepathAtribut pokazuje prema mjestu gdje se nalaze izvorne datoteke. javadocNaredba također pruža atribute omogućujući vam da navedete naslov prozora i dokumenta. Također možete dodati obavijest o autorskim pravima na dnu svake javadoc stranice, koristeći bottomatribut.

Može li Ant raditi XYZ?

U ovom ste trenutku vidjeli neke od mogućih zadataka u vašem procesu gradnje koje Ant može automatizirati. Ti su zadaci izravno uključeni u Ant. Možda biste željeli prilagoditi Ant kako bi vam pomogao u izvođenju nekih težih zadataka, poput izgradnje EJB-ova i izvođenja daljinskog upravljanja konfiguracijom. Neki od vas možda žele povećati mogućnosti izvještavanja Antova ili konstruirati korisničko sučelje koje može pokrenuti postupak Ant.

Jednostavan odgovor na pitanje "Može li mrav učiniti XYZ?" je "Da, ali možda ćete ga morati prilagoditi."

Produžujući Ant

U ovom trenutku zanimljivo je razgovarati o dva produžetka mrava. Povećana su izvješćivanja i mogućnost daljinske distribucije koda pomoću Ant.

Izvješća o poboljšanjima