ot Petar Tahchiev(26-08-2005)

reiting (40)   [ dobre ]  [ zle ]

Printer Friendly Variant za otpechatvane

Vuvedenie Zashto da se zanimavame s razuchavaneto na ANT ?

Predstavete si, che vuv vashata firma razrabotvate opredelen softuer. Vseki shte se suglasi, che tova ne e vnezapen protses, a staratelno planirane i poetapno vnedriavane na nova funktsionalnost. Vednuzh napisan daden fragment ot kod pochti nikoga ne ostava sushtiiat dokraia na proekta. Eto zashto e neobhodimo da razpolagame sus sredstvo za avtomatizirane na vsichki stranichni protsesi osven osven samoto pisane na kod. Apache Ant e proekt na Jakarta s otvoren kod, i e beztsenen pomoshtnik na programista v tazi nasoka. Za da vi opisha napulno kolko polezen e toi neka da razigraem primeren stsenarii. Imame niakakuv softueren proekt(ueb-usluga), koito se namira niakude vuv Source Control sistemata. Pisheiki edin prost skriptov fail nie bihme mogli vseki put kogato Ant go izpulni da svalim proekta ot Source Control sistemata v niakoia papka na lokalniia si kompyutur, da kompilirame proekta, da startirame testovete, koito ima i da poblikuvame rezultatite ot tiah na ueb-survara si(ili da populnim SQL tablitsa s rezultatite), da paketirame otdelnite moduli(kato EJB-tata i drugi) v Jar failove, da paketirame ueb modulite v War fail, tsialoto sudarzhanie da paketirame v edin Ear fail, da kopirame Ear faila na edin otdalechen, prezokeanski(naprimer) survur, i nakraia da izpratim rezultatite po elektronnata poshta do sebe si za da se uverim, che vsichko e proteklo normalno. I ne samo tova - postaviaiki .xml faila v Source Control sistemata vie pomagate na vashite kolegi ot ekipa, zashtoto vseki ot tiah bi mogul da napravi goreopisanata protsedura na sobstveniiat si kompyutur. Dokato chakame Ant da se pogrizhi za vsichko prez tova vreme mozhem da vurshim dopulnitelno druga rabota, kato pri tova sus sigurnost shte spestim vreme, ako izvurshvahme vsichki operatsii pootdelno sami.


Malko poveche za tova kakvo vsushtnost e Ant.

Ant e bild tuul spetsialno prigoden za Java, no mozhe da bude izpolzvan i v drugi ezitsi. V momenta mozhe da bude izpolzvan bukvalno za vsiaka zadacha. Predimstvata mu sa, che e napisan iztsialo na Java, koeto vednaga go pravi platformeno nezavisim, priema istruktsiite si pod formata na xml fail (build.xml), koeto puk ulesniava boraveneto i podruzhkata izklyuchitelno mnogo. Osven tova razpolaga s bogata dokumentatsiia i meil lista za potrebitelite, kudeto mozhete da zadavate vashite vuprosi. Ant prilicha mnogo na edno sredstvo za avtomatizirane - Make, no za razlika ot Make, Ant e znachitelno po-lesen za izpolzvane.
Protsesa po instaliraneto e maksimalno oprosten: edinstvenoto, koeto triabva da napravite e da svalite ot saita na Jakarta arhiva i da go razarhivirate v podhodiashtata direktoriia. Preporuchvam vi da si napravite sistemna promenliva $ANT_HOME koiato da sochi kum miastoto kudeto ste razarhivirali arhiva i da ia dobavite kum sistemnata promenliva $PATH, za da mozhe da izvikvate Ant ot vsiaka direktoriia, v koiato se namirate. Osven tova triabva da ste definirali promenilvata $JAVA_HOME do miastoto kudeto e instalirana vashata Java.


Da zapochvame!

Ako ste ubedeni, che Ant(sukrashtenie ot angl. Another Neat Tool) shte ulesni znachitelno zhivota vi, mozhem da pristupim kum osnovnata chast na dneshnata statiia, a imenno kak da opishem stupkite, prez koito iskame da preminem. Za tselta triabva da suzdadem xml dokument, s imeto build.xml. Ne e zadulzhitelno da krushtavame faila si po tozi nachin, no tova sushto si ima predimstva. Rabotata e tam, che za da startirame Ant ot komandniia red obiknoveno pishem:

ant

Togava toi shte proveri tekushtata direktoriia za fail na ime build.xml i ako go nameri shte go izpulni, dokato ako krushtavame failovete si po drug nachin triabva izrichno da podchertaem s atributa -buildfile, koi fail iskame da se izpulni:

ant -buildfile myfile.xml


Kakto predpolagam znaete, vseki xml dokument triabva da ima edin obhvashtasht tag za vsichki tagove, koito sa v nego. Build.xml sushto ne pravi izklyuchenie. Tuk zaglavniia tag se naricha <project> i mozhe da priema razlichen broi parametri.

 <project name="MyProject" basedir="." default="all">
 ..........
 </project>
 

name parametura zadava imeto na proekta, a basedir posochva v koia direktoriia shte se razvivat deistviiata po-nadolu v proekta. basedir mozhe sushto da se razglezhda kato propurti, koeto sme definirali v project-a. default posochva ot koi target(za targeti i propurtita shte govorim po-nadolu) shte zapochne izpulnenieto na proekta. Tuk e umestno da spomena, che edinstveno atributa default e zadulzhitelen.
Vuv faila, koito suzdavame otdelnite zadachi, koito iskame da se izpulniat triabva da opishem v otdelni targeti, koito zavisiat v izpulnenieto si edin ot drug. Vednaga shte vi dam primer:


 <target name="compile" depends="init" description="Compiles the source code">
 ........
 </target>
 

Mozhe bi se doseshtate, che atributa depends ukazva ot koi target zavisi nashiia. V nashiia primer targeta compile zavisi ot targeta init, koeto shte reche che za da se izpulni targeta compile purvo triabva da se e izpulnil targeta init. Po tozi nachin mozhem da podredim targetite si po prioritet na izpulnenie: purvo svali sors koda ot Source Control sistemata, sled tova go kompilirai, i t.n. Vseki target priema razlichni parametri. description (ot nashiia primer) ne e parametur, a zadava kratko opisanie na tova kakva zadacha izpulniava otdelniia target. description-i ne samo, che mogat da se slagat na vseki target (i na vseki proekt), no e mnogo dobra praktika, koiato silno preporuchvam. Polzata e v tova, che ako triabva da razchitate chuzhd fail(kakto chesto se sluchva) mnogo po-burzo shte se orientirate. Otdelno vuv vseki target izpolzvaiki razlichni taskove zadavame kakvo tochno vklyuchva operatsiiata kompilirane(naprimer). Eto otnovo edin primer:


 <javac srcdir="/home/user/MySourceFolder/" destdir="/home/user/MyDestinationFolder"/>

S tozi task se okazva vsichki *.java failove, koito se namirat v direktoriiata srcdir da se kompilirat v direktoriiata destdir. Tuk e umestno da spomena edna osobenost za kompiliraneto s Ant, a imenno Ant ima task, s chiiato pomosht NE kompilira failove, koito ne sa promeniani ot poslednata kompilatsiia(oshte edno dokazatelstvo, che s Ant naistina pestim vreme).

Kogato putiat do edna direktoriia e dulug i tia se nalaga da se izpolzva chesto v nashiia fail e umestno da definirame taka narechenite propurtita. Propurtitata imat svoistvata doniakude na konstantni simvoli, koito nie definirame oshte v nachaloto na samiia fail. Eto edin edin primer, ot koito shte vi stane iasno za kakvo stava duma:

 <property name="src.dir" value="/Some/Realy/Long/URL/To/One/Of/Your/Folders"/>
 
 <property name="tomcat.home" value="/The/SPECIFIC/URL/TO/TOMCAT'S/HOME/DIRECTORY"/>
 

Na purviia red nie definirame edno propurti, pod imeto src.dir i zadavame za negova stoinost sudurzhanieto na poleto value. Vseki put kogato se nalozhi da izpolzvame direktoriiata posochena v atributa value, mozhem da ia dostupvame s pomoshtta na imeto na propurtito ogradeno v ${}. Naprimer:

 <copy file="${src.dir}/MYFile.java" todir="${tomcat.home}/webapps"/>,
 

koeto shte kopira faila MYFile.java ot /Some/Realy/Long/URL/To/One/Of/Your/Folders/ direktoriiata v direktoriiata webapps na Tomket instalatsiiata.
Druga prichina da izpolzvame propurtita e pokazana v po-predniia primer na vtoriia red. Tam definirame otnovo edno propurti, no tuk s druga tsel, a imenno kogato vseki edin chovek ot ekipa vi si svali build.xml faila, toi mozhe da promeni nastroikite na propurtitata si spored tova kak e konfigurirana mashinata, na koiato toi raboti(suglasete se, che ne vsichki instalirat Tomket v edna i sushta direktoriia). Po tozi nachin faila e preizpolzvaem. Kogato propurtitata stanat prekaleno mnogo e udobno da gi iznesem v otdelen fail(tova e fail s razshirenie .properties spored Java standartite) ili oshte po-dobre za da namalim broia im da vzemem direktno niakoi ot sistemnite promenlivi(propurtita). Tova mogat da budat naprimer $TOMCAT_HOME, $ANT_HOME, $USER, $JAVA_HOME, $PATH i vsichki drugi. Za poveche informatsiia vi preprashtam kum dokumentatsiiata na Ant.

Po-vazhni taskove v Ant

V tazi chast shte se spra na detailnoto raglezhdane na niakoi ot po-poleznite taskove v Ant.

mkdir. Tova e taskut s koito se suzdavat direktorii. Sus sigurnost shte vi se nalozhi da suzdavate direktorii, nai-malkoto za da ima kude da si durzhite kompiliranite failove, a i za preglednost. Sintaksisa mu e do bolka prost:

 <mkdir dir="theNameOfMyDir"/>.  
 

Kato rezultatut ot izpulnenieto shte e nova direktoriia s imeto theNameOfMyDir. Tuk mozhe osven ime na direktoriia da posochim i put do direktoriia.

delete. Obratno na mkdir iztriva otdelen fail, grupa ot failove, ili direktoriia. Parametrite, koito mozhe da priema sa
  • file - s nego ukazvame failut, koito zhelaem da iztriem
  • dir - ukazva direktoriiata, koiato iskame da premahnem.
  • verbose - v zavisimost ot tova dali e true ili false otpechatva/neotpechatva v konzolata koi failove triem.(po podrazbirane stoinostta mu e true)
  • includeEmptyDirs - ako mu zadadem stoinost true i izpolzvame fileset, shte iztrie i direktoriite bez failovo sudurzhanie.
  • fileset- definira grupa ot failove, koito da budat iztriti.
Primer:

 <delete>
 	<fileset dir="../temp">
 		<include name="*.*"/>
 		<exclude name="*.java"/>
 	</fileset>
 </delete>
 
 
SHTe iztrie vsichki failove ot direktoriiata ../temp, koito niamat razshirenie java.

jar. Suzdava jar arhiven fail, kato avtomatichno se grizhi da suzdade direktoriiata META-INF/ i faila MANIFEST.MF, koito triabva da e v neia. Parametrite, koito mozhe da prema sa:
  • jarfile - imeto na faila, koito iskame da suzdadem
  • basedir - imeto na direktoriiata, koiato da bude izpolzvana za document root
  • includes/excludes - v tezi dva modela zadavame, razdeleni sus zapetaiki, koi direktorii shte se /ne shte se vklyuchvat v basedir atributa.
  • manifest - imeto na manifest faila, koito zhelaem da izpolzvame(ako ima takuv).
Primer:

 <jar jarfile="${dest.dir}/myBrandNewJarFile.jar" basedir="."/>,
 
 
kato rezultatut sled izpulnenieto mu shte e faila myBrandNewJarFile.jar, koito shte se namira v direktoriiata ${dest.dir}(tova e definirano propurti kakto veche ste se dosetili). Failovata struktura v arhiva shte e sushtata kakto v tekushtata direktoriiata, zashtoto basedir atributa definira tochno tova - koia papka da bude document root za arhiva.

war. Suzdava war arhiv. Parametrite, koito priema sa:
  • warfile - imeto na(ili i putia na) war faila, koito iskame da suzdadem
  • webxml - imeto na web.xml faila, koito iskame da izpolzvame
  • basedir - direktoriiata, koto shte izpolzvame za document root
  • includes/excludes - definirat dadeni modeli, po koito shte vklyuchvame/izklyuchvame direktorii ot/v atributa basedir
  • manifest - putia do MANIFEST.MF faila, koito iskame da izpolzvame
  • classes - putia do classes direktoriiata, koiato iskame da izpolzvame
  • lib - putia do lib direktoriiata, koiato iskame da izpolzvame
  • webinf - putia do WEB-INF direktoriiata, koiato iskame da izpolzvame
Primer:

 <war warfile="myWarFile" basedir="." webinf="./WEB-INF" webxml="../web.xml">
 	<lib dir="../lib"/>
 	<classes dir="../classes"/>
 </war>
 

move. Ima podoben sintaksis na copy, koito veche razgledahme, no za razlika ot nego ne kopira, a premestva fail ot edna papka v druga.

 <move file="./myFile.myExt" todir="${my.dir}"/>
 

junit taska se izpolzva za da se startirat unit testove. Tozi task e mnogo chesto izpolzvan na praktika, i zatova shte go razgledam po-podrobno. Junit e framework, s koito se pishat unit testovete za Java. Po-vazhnite parametri, koito mozhe da priema taska sa:
  • printsummary - v zavisimost ot tova dali e on/off otpechatva/neotpechatva statistika za vseki TestCase, koito izpulnim.
  • fork - v zavisimost ot tova dali e on/off shte startira testovete v otdelna virtualna mashina ot tazi, v koiato vurvi Ant.
Taga junit mozhe da priema i vlozheni taskove(ako se chudite kakvi sa poglednete primera za tozi task). Po-vazhni vlozheni taskove:
  • formatter - zadava formata, v koito shte budat otpechatani rezultatite ot izpulnenieto na testovete.
    • type - zadava formata na failovete. Priema stoinosti xml ili plain(za tekstovi failove).
    • usefile - true/false ukazvat dali da izpolzva fail za rezultata ili ne.
  • test - startira otdelen junit test.
    • name - zadava imeto na klas-fail na testa, koito shte iskame da se izpulni.
    • fork - yes/no za tova dali da izpolzva nova virtualna mashina, v koiato da startirame testovete.
    • haltonfailure - ako tozi atribut e postaven na "on", Ant prekratiava izpulnenieto na build.xml-a pri proval na niakoi test.
    • todir - imeto na direktoriiata, v koiato shte pazim rezultatite ot testovete.
  • batchtest - startira grupa junit testove, koito sme ukazali s fileset.
    • fork - yes/no za tova dali da izpolzvame nova virtualna mashina, v koiato da startirame testovete.
    • haltonerror - kogato go postavim na "on" spirame izpulnenieto na build.xml-a pri proval na niakoi ot testovete
    • todir - direktoriiata, v koiato shte pazim rezultatite.
Primer:

 <target name="test" depends="compile">
 	<junit printsummary="true" fork="yes">
 		<formatter type="xml"/>
 		<test name="myFirstTest" todir="${reports}"/>
 		<classpath>
 			<fileset dir="${lib}">
 				<include name="**/*.class"/>
 			</fileset>
 		</classpath>
 	</junit>
 </target>
 

Tuk sme definirali edin target, chiiato zadacha e da izpulni testovete, posredstvom junit taska, koito e v nego. printsummary="true" pokazva, che shte otpechatvame statistika za vseki fail. fork sme ukazali da e yes, sledovatelno testovete ni shte se izpulniat v otdelna virtualna mashina. Osven tova formata na failovete, koito sa rezultat ot izpulnenieto na taska, shte e xml. Po-nadolu shte se izpulniat testovete ot testcase-a myFirstTest v direktoriiata ${reports}, i dobaviame kum klasputia na junit taska klasovete, koito sme kompilirali s taska compile. Ako zabravim da dobavim kompiliranite klasove, koito shte testvame kum klasputia, testovete shte vurnat greshka(no niama da se provaliat).

junitreport Kakto zabeliazahme s junit taska mozhem da poluchim rezultatite ot testovete v xml format ili v tekstov format. S <junitreport> taska obache mozhem da transformirame, poluchenite xml rezultati v spretnata html stranitsa, sled koeto mnogo lesno da proverim koi test e uspial i koi ne. Parametrite, koito priema sa slednite:
  • tofile - ukazvame ime na fail, v koito da durzhim spisuk na vsichki failove, generirani ot Junit(po podrazbirane tozi fail e TESTS-TestSuites.xml i obiknoveno niama nuzhda da ukazvame drug).
  • todir - s tozi parametur posochvame kude da zapishem faila ukazan s tofile parametura.
Vlozheni parametri:
  • fileset - s tozi vlozhen task definirame kolektsiiata ot failove, koito zhelaem da budat preobrazuvani.
  • report - tova e taska, koito generira html failovete. Toi ot svoia strana priema sushto vlozheni parametri.
    • format - priema stoinosti "frames"/"no frames" i s nego ukazvame dali brauzura ni poddurzha frames(po podrazbirane atributa e frames)
    • todir - tuk triabva da ukazhem direktoriiata, v koiato da budat zapisani izhodiashtite html failove
Primer:

 <junitreport todir="./xmlFiles">
 	<fileset dir="./xmlFiles">
 		<include name="TEST-*.xml"/>
 	</fileset>
 	<report format="frames" todir="../reports"/>
 </junitreport>	
 
 

Tuk sme definirali junitreport taska, koito prosto vzima failovete ot direktoriiata ./xmlFiles, koito otgovariat na shablona "TEST-*.xml", i gi prevrushta v html failove v direktoriiata "../reports"

ant. Kogato proekta stane goliam e smisleno da razdelim nashiia bild fail na po-malki failove, vseki ot koito otgovaria za pravilnoto kompilirane i deploivane na otdelen modul ot proekta. V tazi postanovka shte ni triabva i edin obsht bild fail koito da otgovaria za posledovatelnoto izvikvane na vseki edin ot otdelnite buildfailove. Tova izvikvane stava imenno s taska ant. Sintaksisa mu e sledniia:

<ant antfile="the name of the ant file" />

a parametrite koito priema sa:
  • antfile imeto na faila, koito shte izvikame
  • dir putia do faila, koito shte izvikame
  • target zadava spetsifichen target, ot faila koito shte izvikame
  • output zadavame ime na fail, v koito da zapishem rezultata ot izpulnenieto

Sled vsichki tezi prikazki e vreme da razgledame i komentirame edin tsialosten fail.

 <project name="MyFirstProject" basedir="." default="all">
 	<description>My First Ant File</description>
 
 	<target name="init" depends="" description="Initializes the needed properties">
 		<property name="src.dir" value="${basedir}/src"/>
 		<property name="dist.dir" value="${basedir}/classes"/>
 		<property name="tomcat.home" value="/home/peter/jakarta/tomcat"/>
 	</target>
 	<target name="prepare" depends="init" description="Makes some directories">
 		<mkdir dir="${dist.dir}"/>
 	</target>
 	<target name="compile" depends="prepare" description="Compiles the source code">
  		<javac srcdir="${src.dir}" destdir="${dist.dir}"/>
 	</target>
 	<target name="package" depends="compile" descriptoin="Makes a jar file from the compiled source">
 		<jar jarfile="${basedir}/myJar.jar" basedir="${dist.dir}"/>
 	</target>
 	<target name="clean" depends="compile" description="Deletes the output of Ant">
 		<delete dir="${dist.dir}" verbose="true"/>
 	</target>
 	<target name="deploy" depends="clean" description="Copies the already created jar to Tomcat's webapps dir">
 		<copy file="${basedir}" todir="${tomcat.home}"/>
 	</target>
 	<target name="all" depends="deploy" description="Created Just for calling the deploy target"/>
 </project>
 


Da go razgledame sega po-obstoino. Failut zapochva s globalen element <project>, koito pokazva, che imeto mu e MyFirstProject, a izpulnenieto mu triabva da zapochne ot all targeta(spored atributa default), i definira edno globalno propurti za tekushtata direktoriia. Purviia tag ot proekta e description. Toi pokazva kak da zadavame kratko opisanie na tseliia proekt. Da razgledame targetite edna po edna ot gore nadolu. Purviia definira tri promenlivi:srd.dir, dist.dir i tomcat.home. Obrushtam vnimanie na fakta, che tozi target ne zavisi ot nikoi, i ponezhe e izvikvan ot prepare toi shte se izpulni purvi. Sledvashtiiat target zavisi ot init i suzdava edna direktoriia, v koiato shte kompilirame sors koda si, kompiliraneto se izvurshva v sledvashtiia target. compile zavisi ot prepare i kompilira sors koda ot direktoriiata src.dir v direktoriiata dist.dir. Po-nadolu targeta package kakto podskazva opisanieto i imeto mu arhivira direktoriiata ${dist.dir} vuv fail myJar.jar, koito se namira v ${basedir}. Dobavili sme i edin target koito da iztrie vsichki suzdadeni ot Ant failove i direktorii. Predposledniia target prosto kopira toku-shto suzdadeniia war fail v direktoriiata webapps na Tomcat. Posledniia target all e interesen s tova, che toi pruv shte se izpulni(default="all"), zavisi ot drugi targeti i niama tialo. Toest toi sushtestvuva edinstveno za da "izvika" targeta deploy.

Nakraia mi se iska da pogovorim za edin mnogo chesto sreshtan problem v praktikata. Taka narechenite grupi ot failove/direktorii. CHesto nie iskame da grupirame daden broi failove po niakakuv priznak(naprimer iskame da kompilirame samo tezi failove koito sudurzhat v imeto si Test) v tozi sluchai se nalaga da se pribegne do fileset. Sintaksisa e sledniia:

 <fileset dir=".">
 	<include name="includeName"/>
 	<exclude name="excludeName"/>
 </fileset>
 
V tozi primer suzdavame grupa ot failove v tekushtata direktoriia. Grupata e s atributi include i exclude. V include zadavame niakakuv model(shablon), po koito iskame failovete, koito otgovariat na modela da se vklyuchat kum grupata. Obratno na tova v exclude zadavame modela, po koito shte razgranichim failovete koito ne triabva da vlizat v grupata. Po sushtiia nachin mozhem da grupirame i direktorii, no taga shte e <dirset>. Ima oshte mnogo nachini da grupirame failove. Tuk shte spomenem samo path taga. Toi ima sledniia sintaksiz:

 <path id="compile.cp">
 	<pathelement location="/home/user/jars/myJar.jar"/>
 	<pathelement path="${classpath}"/>
 </path>
 
Ponezhe v edin fail mozhem da imame mnogo grupi, atributa id zadava unikalen identifikator na vsiaka ot tiah. Vazhno e da zapomnim, che s pathelement ukazvame mestopolozhenieto na EDIN fail ili direktoriia, koito iskame da vklyuchim kum grupata, a s path i posochvaiki id-to na grupata sme v sustoianie da vklyuchim tsiala grupa, koiato veche e definirana, kum nashata grupa. Grupite ot failove se izpolzvat kogato izvurshvame operatsii nad failovete(kopirane, premestvane, iztrivane, smeniane na permission i dr.), kogato izpulniavame testove, kogato kompilirame:

<javac srcdir="mySourceDirectory" destdir="myDestinationDirectory" classpathref="compile.cp"/>


Kudeto compile.cp e niakakva grupa ot failove, koito triabva da se dobaviat kum klasputia za da e uspeshno kompiliraneto.

Polezni suveti

Nakraia iskam samo da podchertaia niakolko dobri praktiki, koito e dobre da spazvame. Pishete description-i. Tova e edna mnogo dobra praktika kakto veche otbeliazah i mozhe bi v nachaloto shte vi se struva izlishna zaguba na vreme(ot sobstven opit go kazvam), no vsichko se vuzvrushta s techenie na vremeto, osobeno kogato proekta stane mnogo goliam. Druga praktika, koiato silno vi preporuchvam e da spazvate niakakva konventsiia. Niakoi targeti se izpolzvat postoianno v edni sushti proekti i za imenuvaneto im ima utvurdeni shabloni, koito e dobre da zapomnim i prilagame. Po-dolu privezhdam spisuk s niakoi ot tiah.

 init - za purvonachalno definirane na propurtitata.		
 prepare - za pogotovka na failovata struktura(suzdavane na direktorii, kopirane, i t.n)
 fetch - za svaliane na failove ot Source Control sistemata.
 compile - za kompilirane na sors-koda
 test - za izpulnenieto na test-case-vete
 package - za paketirane na kompiliraniia kod
 deploy - za deploivane na niakoi survur
 publish - za publikuvane na rezultatite niakude
 clean - za izchistvane na mezhdinnite rezultati
 all - obiknoveno se izpolzva za default target, koito ne izpulniava nikakvi taskove.
 

Oshte edna preporuka, koiato mnogo hora chesto prenebregvat. Stava vupros za tova da se pishat komentarite(xml komentarite) i description-te na angliiski ezik. Az lichno niamam nishto protiv bulgarskiia, dori naprotiv, no e dobre da pomnim che, estestvoto na rabotata na programista e svurzano priako s angliiskiia ezik i edva li nie shte sme edinstvenite hora, koito shte chetem koda si.


Zaklyuchitelni dumi.

Ant e proekt s otvoren kod, koito se poddurzha ot goliama grupa programisti, i koito postoianno se obogatiava otkum taskove. V momenta pochti niama Java IDE, koeto da e bez vgradena podruzhka za Ant. Vuzmozhnostite mu dalech ne se izcherpvat samo s tova, koeto razgledahme, a zadachaite, koiato Ant mozhe da izpulni granichat edinstveno s .

Iskreno se nadiavam da sum uspial pone malko da vi ubedia v predimstvata na Ant i da sum vi pokazal chast ot krasotata na tozi proekt. Za tezi ot vas, koito sa zainteresuvani sum privel niakolko polezni vruzki. Na dobur chas!


Izkazvam iskrena blagodarnost na Hristina Tahchieva za mnogobroinite polezni suveti i preporuki pri oformianeto na statiiata.



Spisuk na poleznite vruzki v internet:
http://ant.apache.org Tova e ofitsialniia sait na Ant. Ima mnogo polezna informatsiia, detailno rukovodstvo i mail-list, kum koito mozhe da se abonirate.


---------------------------------
Petur Toshev Tahchiev - Sofiia, 24 Avgust 2005 godina


<< Kraina tsel: FreeBSD | T2 Project ima nuzhda ot pomosht >>