Ebben a kis leírásban azt mutatom be, hogy hogyan oldom meg azt, hogy ne igazán kelljen ripityára kattintgatni magam.
Az alapfeállás: programozgatok JEE -ben, mert szeretem és meg akarom tanulni. NetBeans a fejlesztési környezet. Egy ilyen projekten belül nekem van három kisebb projekt. Egy projekt a kliensnek, egy projekt az Enterprise cuccnak és egy az ejb -nek. Az ejb projekt eleve részét képezi az Enterprise projektnek, de külön van kezelve, mint projekt. Emiatt külön fordítani kell. Az ejb fordításában van még egy "client" atrget, mert bizonyos osztályokat meg kell adni jar formájában a kliensnek.
A projektek szerkezete így néz ki:
- Kliens
- Enterprise project
- ejb project
Nekem külön igényem, hogy minden egyes deploykor az adatbázistáblák alapértelmezett adatokkal legyenek inicializálva. Ez a "drop-create" a persistence.xml -ben.
A probléma: van 3 projektem és van olyan eset, amikor mindhárom projektet fordítani kell. Ez azt jelenti, hogy projektenként jobb katt -> "Clean and Build" minimum. Az ejb projekt esetében emellett meg kell még adni, hogy a "client" target is kerüljön végrahajtásra. Ez külön jobb klikk -> target kiválasztása -> lefut...
Ahhoz, hogy ear fájlt kapjak le kell fordítani az ejb projektet és ezt követően az Enterprise projectet, hogy legyen egy ear fájlom, amit oda tudok adni az appszervernek, hogy használja.
Példák a problémára:
- Mi a teendő, akkor ha az ejb -ben - szerver oldal, hajtok végre módosítást?
- ejb project fordítása
- ejb project client target futtatása
- enterprise project fordítása az ear fájlért
- deploy
- ha kell, akkor a kliens fordítása
- Mi a teendő, akkor ha mind szerver, mind kliens oldalon vannak változások?
- lásd a fentieket és
- kliens fordítása
A fentiekből látszik, hogy sokat kell kattintgatni. Én az az ember vagyok, aki utál kattintgatni fölöslegesen.
A vágyam: mivel utálok kattintgatni fölöslegesen elkezdtem csinálni egy .bat fájlt, hogy Windows konzolon egy parancs kiadására pördüljön minden. Aztán kedves kollegám - akinek linkelni fogom a blogját, ha végre csinál egyet - kérdezte, hogy miért nem csinálom meg anttal és a NetBeansben lévő free-form projecttel? Beszélgettünk erről egy kellemes 20-30 percet, majd miután átadta a tapasztalatait szépen összeraktam én is az általa elmondottak alapján a projectjeimet.
Az eszközök:
- NetBeans Free-form project
- Ant
- Projektjeid
Hogyan érdemes?
Először magát a projektek felépítését fogom elmondani. Ezt követően a fájlrendszernek a struktúráját. Utolsó lépésként pedig az ant fájlokból fogok példákat mutatni.
Projektek felépítése:
Itt első lépésként kell csinálni egy Free-form projektet. Nem kell megadni semmi source és test package dolgokat, illetve csak egy alap ant fájlt kell neki megadni. Magát az ant fájlt én kézzel szerkesztettem.
A következő lépés, hogy azokat a projekteket, amelyekben ténylegesen dolgozunk szépen ezen projekt alá betoljuk. Igazából ez a "betolás" fájlrendszer szinten történik meg. Maga a Free-form projekt nem fog tudni arról, hogy alája tartoznak más projektek. Neki ez nem dolga.
Nálam a projektek hierarchiája az alábbiak szerint épül fel:
- NetBeans Free-form projekt
- Kliens
- Enterprise projekt
- EJB projekt
Fájlrendszer:
Én a fájlrendszert is úgy építettem fel, hogy legyen benne egy hierarchia. Nekem biztonságot ad ha ezen a részen is látok valamilyen struktúrát. Ezen a szinten nem kötelező a fájlrendszerben kialakítani ezt, de ajánlott.
Fájlrendszer struktúra:
- NetBeans Free-form projekt/
- NetBeans Free-form projekt/nbproject/ --> a NetBeans saját fájljai
- NetBeans Free-form projekt/projectFiles/ --> ide jönnek a projektek
- NetBeans Free-form projekt/build.xml --> ant file
- NetBeans Free-form projekt/projectFiles/Kliens
- NetBeans Free-form projekt/projectFiles/Kliens/nbproject
- NetBeans Free-form projekt/projectFiles/Kliens/nbproject/build-impl.xml --> a kliens ant fájlja, amit a build.xml húz be
- NetBeans Free-form projekt/projectFiles/Kliens/src --> java osztályok
- NetBeans Free-form projekt/projectFiles/Kliens/lib --> a kliens lib fájljai
- NetBeans Free-form projekt/projectFiles/Kliens/build.xml --> a kliens projekt ant fájlja
- NetBeans Free-form projekt/projectFiles/Enterprise
- NetBeans Free-form projekt/projectFiles/Enterprise/nbproject
- NetBeans Free-form projekt/projectFiles/Enterprise/nbproject/build-impl.xml --> az Enterprise ant fájlja, amit a build.xml húz be
- NetBeans Free-form projekt/projectFiles/Enterprise/src --> java osztályok
- NetBeans Free-form projekt/projectFiles/Enterprise/lib --> az Enterprise lib fájljai
- NetBeans Free-form projekt/projectFiles/Enterprise/build.xml --> az Enterprise projekt ant fájlja
- NetBeans Free-form projekt/projectFiles/Enterprise/Enterprise-ejb --> ejb projekt
- NetBeans Free-form projekt/projectFiles/Enterprise/Enterprise-ejb/build.xml --> az Enterprise-ejb ant fájlja
- NetBeans Free-form projekt/projectFiles/Enterprise/Enterprise-ejb/nbproject --> a NetBeans saját fájljai
- NetBeans Free-form projekt/projectFiles/Enterprise/Enterprise-ejb/nbproject/build-impl.xml -> az Enterprise-ejb ant fájlja, amit a build.xml húz be
- NetBeans Free-form projekt/projectFiles/Enterprise/Enterprise-ejb/lib --> az Enterprise-ejb saját libjei
- NetBeans Free-form projekt/projectFiles/Enterprise/Enterprise-ejb/src --> java osztályok
Egyértelműen nem jelenthető ki, hogy ez így szép. De az sem, hogy randa. Maradjunk annyiban, hogy kezelhető. Maga a NetBeans kezelőfelülete sok segítséget ad arra, hogy kellemesen eligazodjunk a fenti katyvaszban.
Az ant fájlok:
Az ant fájlok esetében az a poén, hogy az egyes projektek saját ant fájljai is használhatóak maradnak. Például, ha én belépek a NetBeans Free-form projekt/projectFiles/Enterprise könyvtárba és kiadom az "ant" parancsot, akkor az helyesen le fog futni.
A Free-form projectben összefűztem - most ez a kifejezés jut eszembe, akinek nem tetszik találjon ki valami mást és helyettesítse be - és egy helyről hívható mindegyik projektnek külön-külön a buildelése. Sőt, azt is meg tudom csinálni, hogy mindegyik projekt buildelése, clean, deploy fusson le egy paranccsal. Ehhez a következőeket kell tenni:
- NetBeans Free-form projekt/build.xml -ba be kell húzni a többi projekt ant fájljait és megadni a targeteket
-
<property name="build.project.files" value="projectFiles"/>
-
<property name="project.client.name" value="Client" />
-
<property name="project.client.path" value="${build.project.files}/${project.client.name}"/>
-
<property name="project.server.ejb.name" value="ejb" />
-
-
<property name="project.server.ear.name" value="Enterprise" />
-
<property name="project.server.ear.path" value="${build.project.files}/${project.server.ear.name}"/>
-
<property name="project.server.ejb.path" value="${build.project.files}/${project.server.ear.name}/${project.server.ejb.name}"/>
-
-
<!-- E J B -->
-
<target name="ejb-clean" >
-
<echo message="Clean ${project.server.ejb.name}!" />
-
<ant antfile="${project.server.ejb.path}/build.xml" target="clean" inheritall="false" />
-
</target>
-
<target name="ejb-build" >
-
<echo message="Build ${project.server.ejb.name}!" />
-
<ant antfile="${project.server.ejb.path}/build.xml" target="default" inheritall="false" />
-
</target>
-
<target name="ejb-client" >
-
<echo message="Build to client ${project.server.ejb.name}!" />
-
<ant antfile="${project.server.ejb.path}/build.xml" target="client" inheritall="false" />
-
</target>
-
<!-- E J B E N D -->
- Az egyes különálló ant fájlokra vonatkozó targeteket össze kell fűzni egy targetté
-
<target name="build-all-ejb" >
-
<antcall target="ejb-clean" />
-
<antcall target="ejb-build" />
-
<antcall target="ejb-client" />
-
</target>
A fenti kódoknak az a haszna, hogy kiadom az ant build-all-ejb parancsot és első lépésként lefut az ejb-clean, majd az ejb-build és harmadikként az ejb-client. Így nem kell nekem külön-külön futtatni ezeket, hanem megcsinálja az ant.
A következő lépés: A kérdés, hogy mi van abban az esetben, amikor olyan részei vannak az egyik projektemnek, amit több projektben akarok használni? Ebben az esetben a fenti okosság használható-e? Ha használható, akkor kényelmes-e? Ha nem kényelmes, akkor megéri-e használni? Ha nem, akkor mit tudok tenni?
Akkor itt is vannak a válaszok:
- A fenti okosság abban az esetben is használható, ha az egyes projektjeimnek vannak azonos részei.
- Abban biztos vagyok valamilyen szinten, hogy egy fejlesztő esetében még kényelmesnek is mondható. De ha több fejlesztőről beszélünk, akkor már nem kényelmes.
- Ahogy írtam fentebb egy fejlesztő esetében lehet használni. Több esetében a szopás végtelen birodalmába váltunk belépőt.
- Mit használhatunk helyette? Mavent...






