2007. április 9., hétfő

A war overlay és a jetty plugin nehézségei

Egyes esetekben (pl OpenLaszlo alapú hegesztések) kénytelen az ember egy másik project war filejába belegyömöszölni a saját cuccát. Erre a maven tök jó megoldást kínál, egyszerűen csak adjuk meg dependency-ként a külső war file-t és a scope legyen runtime, a típus pedig persze war. Ekkor a war plugin tudja majd a dolgát és jól összemergeli a kettőt, persze itt még van mit paraméterezni. Ezt hívják war overlay-nek.
A gegasz már ott elkezdődik amikor a mindenki kedvence 'mvn jetty6:run' parancsot kiadjuk, mert a jetty6 plugin figyelmen kívül hagyja ezt a dependency-t, futtathatunk viszont egy 'mvn jetty6:run-exploded' parancsot, ez összeállít egy war-t a war pluginnel, kicsomagolja és végül elindítja rajta a jetty-t. A dolog két fájó pontja:
  1. Nagyon lassan indul el, főleg ha a war file mérete nagy
  2. Nem updateli a tartalmat
Erre az elegáns megoldás az lenne, ha a jetty6 plugin tartalmazna egy background thread-et, ami szinkronban tartja a jetty kicsomagolt war fáját a forráskóddal. Ezt viszont egy bash parancsból is egyszerű megoldani. Ilyesmi:
while true; do cp -ru src/main/webapp/* target/${artifactId}; cp -ru target/classes target/${artifactId}/WEB-INF/classes; sleep 1; done
Kicsit sem elegáns, legkevésbé sem portolható (de hát a vindózerek élete amúgy se játék és mese), de a túlélésre elég. A második bajt workaroundolja, az elsőt meg túléljük mert innentől már csak egyszer kell elstartolni.
Ki lehetne pofozni ezt a jetty plugint, például még mindig 6.0-beta17 verzióval megy a legfirssebb kiadás, pedig a fejleszés lassan már 6.2-nél tart. Miért hagyhatják ilyen elhanyagolatan a webfejlesztéshez leghasznosabb plugint?