Prispevky MathAnu k Antu
===================
Do sveho buildovaciho souboru musite pridat nasledujici:
<taskdef resource="cz/mathan/ant/contrib/taskdef.properties">
<classpath>
<pathelement location="${globalToolsDir}/mathan-ant-contrib.jar"/>
</classpath>
</taskdef>
kde ${globalToolsDir} je cesta k adresari, kam jste ve svem projektu ulozili zkompilovany archiv.
Potom muzete tasky normalne pouzit, jak je popsano dale.
filesize
---------
Zjisti delku souboru v bajtech a ulozi ji do zadane vlastnosti.
file - absolutni nebo relativni cesta k souboru; povinne; soubor musi existovat a byt obycejny soubor
property - jmeno vlastnosti, do niz se ma ulozit delka souboru v bajtech; povinne
Priklad:
<filesize file="${warFile}" property="war.size"/>
filelastmodified
-------------------
Zjisti datum a cas posledni modifikace souboru, zformatuje ji zvolenym formatem a ulozi do zadane vlastnosti.
file - absolutni nebo relativni cesta k souboru; povinne; soubor musi existovat
format - formatovaci retezec pro java.text.SimpleDateFormat, kterym se datum a cas zformatuje; povinne
property - jmeno vlastnosti, do niz se ma ulozit zformatovane datum a cas posledni modifikace souboru
Priklad:
<filelastmodified file="${warFile}" property="war.time.lastmodified" format="yyyy-MM-dd HH:mm:ss zz"/>
chop
------
Odrizne dany zacatek nebo konec retezce.
from - z jakeho retezce se ma odrezavat; povinne
property - jmeno vlastnosti, co niz se ma ulozit vysledek; povinne
start - retezec, ktery se ma odriznout ze zacatku from
end - retezec, ktery se ma odriznout z konce from
Pokud retezec from nezacina podretezcem start (je-li uveden), ani nekonci podretezcem end (je-li uveden),
pak se do vystupni vlastnosti ulozi retezec from nezmeneny.
Priklad:
<chop from="/home/jdvorak/workspace/modis_src/application/joj2"
start="/home/jdvorak/workspace/modis_src/"
property="relativePath"/>
dbschemaupdate
--------------
Aktualizuje databazi (zejmena schema) podle konfiguracnich souboru.
patchesDir - adresar obsahujici databazove aktualizace (nekolik .sql souboru)
driver - nazev tridy ovladace databaze
url - URL databaze
tablename - tabulka v databazi, v niz se udrzuji zaznamy o uspesne provedenych aktualizacich
successesProperty - nazev antove vlastnosti, ktera se nastavi v pripade, ze byla uspesne provedena alespon jedna aktualizace
Tag dale musi obsahovat prave jeden fileset - jedna se o seznam konfiguracnich souboru.
Kazdy soubor obsahuje jednu aktualizaci databaze; tyto aktualizace se postupne
zpracovavaji v abecednim poradi dle nazvu souboru, dokud nedojde k chybe nebo
vycerpani filesetu. Loguji se pritom informace o aktualizacich, o jednotlivych
SQL prikazech v nich, a na zaver i jakesi celkem srozumitelne statistiky ("legacy patches"
jsou aktualizace, ktere byly v minulosti na databazi aplikovany, ale nyni jiz jejich
konfiguracni soubor neni ve filesetu).
Tabulka aktualizaci specifikovana pomoci "tablename" slouzi pro potreby tohoto tasku;
vzdy se ji pokousi vytvorit, pokud se mu to nepodari, ma radost, protoze si mysli, ze
uz tam asi je. Tabulka ma dva sloupecky - nazev souboru s aktualizaci a cas uspesne
aplikace. Pokud v ni nejaka aktualizace uz je, neprovadi se.
Kazda aktualizace smi sestavat z vice SQL prikazu, pokud jsou oddeleny prazdnou radkou
(dvojim odradkovanim, mezi nimz smi byt mezery, ale nikoli SQL komentar). Prazdna radka
se naopak nesmi objevit uprostred prikazu (napr. definice funkce). Mezery a tabelatory
na zacatku a konci radku se ignoruji. Pokud SQL prikaz sestava pouze z SQL komentare,
ignoruje se (nepocita se v pripadnych chybovych zpravach).
Neni povolen prikaz select, protoze vraci hodnotu, a to v davce nelze. Toto omezeni se da obejit
subselectem nebo volanim docasne funkce pohrbenym v necem takovemhle: "UPDATE table SET field=0 WHERE field=0 and ...;"
za podminky, ze tabulka "table" je spolehlive neprazdna, a ze volana funkce nemeni pole "field".
Kazda aktualizace tvori transakci (vcetne prislusneho vlozeni do tabulky aktualizaci).
Cele je to rychle jako drak.
Priklad:
<property name="deployDbUrl" value="jdbc:postgresql://${database.server}/${database.name}?charSet=UTF-8&user=tamtenchlap"/>
<dbschemaupdate
patchesDir="${some.dir}/src/sql/update"
tablename="sys_schema_patches"
driver="org.postgresql.Driver"
url="${deployDbUrl}"
successesProperty="successful.db.updates" />
dbsearch
--------------
v dane dabazi spusti zadany sql select a vysledek pripoji do souboru.
fileheading
-----------
Vlozi pozadovane komentare na zacatek souboru na misto komentaru a mezer, ktere tam uz jsou.
Tag musi obsahovat prave jeden fileset, a to seznam souboru, ktere se maji upravit.
dryRun proved vsechno krome skutecnych zmen
transactional proved vsechno 2x, napred s dryRun
keepTmp ponech docasny soubor pri chybach, nebo pri dryRun. Ignorovano pri transactional.
paranoid (implicitne zapnuto) casteji hazi BuildException
propertyIfRewritten nastavi uvedenou property na nazev prvniho souboru, ktery bylo nutno upravit
Docasny soubor se vytvari ve stejnem adresari a ma korespondujici jmeno souboru. Pri chybach
jeho obsah neni definovan, pri dryRun obsahuje to, co by se jinak ulozilo do ciloveho souboru.
Pokud soubor jiz presne v pozadovanem tvaru je, neprovadi se s nim zadne zapisovaci operace.
priklad:
<fileheading heading="test/fileheadingdata/heading" dryRun="true" keepTmp="false" propertyIfRewritten="random.property">
<fileset dir="../hyperion/src/java/cmsproject" includes="**/*.java"/>
</fileheading>
propertymerge
-----------
Spoji nekolik property souboru do jednoho
Tag musi obsahovat prave nekolik vnorenych filesetu, a to seznam souboru, ktere se maji spojit.
destfile vysledny soubor
failonconflict urcuje zda se ma skoncit chybou, kdyz je nejaky klic v nekolika vstupnich souborech
Priklad:
<propertymerge destfile="${buildDir}/testPropertyMerge.properties" failonconflict="true">
<fileset dir="test/" includes="propertymerge/*.properties"/>
</propertymerge>
resourcebundlemerge
-----------
Spoji nekolik resource bundelu do sebe. Takze vezme vsechny property soubory ze zdrojovych adresaru
a ve skupinach podle locale je spoji pomoci tasku <propertymerge>
Priklad:
<resourcebundlemerge destdir="${buildDir}/testresourcebundle" basename="file">
<dirset dir="test/" includes="resourcebundlemerge/*" />
</resourcebundlemerge>