Build systems
Java programok fordítása
Már viszonylag kevés forrásfájllal is nehézkes lehet:
- Parancssoros fordítás könnyen bonyolultá válhat már kis alkalmazásoknál is.
- Nagyobb programoknál követhetetlenné válik, hogy mely fordítási egységeket kell újrafordítani.
- Az egész alkalmazást újra lefordítani nagyon időigényes lehet.
Build system elvárások
- A kód fordítása
- Dependenciák a fordítási target-ek kezelése
- Futtatható fájlok csomagolása
- Több release opció támogatása
- Automatikus tesztfuttatás
- Futtatható fájlok feltöltése teszt szerverre
- A kód átmásolása egyik helyről a másikra
- Csomag repo-k kezelése
ANT
-
Imperatív megközelítés
-
Java projektekhez gyakran használt
-
XML-alapú build fájl
- tartalmazza a project gyökér elemet amely megadja:
- a projekt nevét,
- az alapértelmezett target-et
- A projekt főkönyvtárát
- tartalmazza a project gyökér elemet amely megadja:
-
A
<property name="" value="">
elemmel projekttulajdonságokat tudunk definiálni.
Target
- Target-et a
<target>
elemmel lehet megadni, és azant compile
parancsal futtatni. - Egy target függhet egy másiktól, ezt a
<target depends="">
módon lehet megadni. - A
failonerror
attribútum megmondja, hogy hiba esetén félbe kell-e szakítani a folyamatot, ha az adott target hibát dob.
További példák
lsd.: diasor
Maven
- Szoftver projekt kezelő eszköz
- Build, teszt futtatás, dependencia kezelés, dokumentáció
- Csomagok: automatikus letölti a dependenciákat
- Deklaratív leírása a build folyamatnak
- Fix könyvtár struktúra és konvenciók
- Ezek átírhatók, de nem ajánlott
- Tipikusan Java-hoz, de pluginokkal használható más nyelvekkel is
- XML-alapú build fájl
Project
- POM - Project Object Model
- Egy projektet egyedien azonosít a csoport, artifact id, verzió. (GAV - Group, Artifact, Version)
- Egy projekt felosztható több modulra, amik külön-külön kezelhetőek.
POM
-
Részei:
- azonosítók:
groupId, artifactId, version
- a build folyamatának leírása
- a build eredménye
- tesztesetek
- dependenciák
- azonosítók:
-
A gyökérelem szintén egy project element.
-
A következő elemeknek meg kell lenniük a projektben:
modelVersion
: a POM specifikáció verziójagroupId
: egyedi csoport, vagy cégazanosító. Ajánlott a Java package elnevezési konvenciók követése.artifactId
: a projekt egyedi neveversion
: a projekt verziószámapackaging
: alkalmazott csomagolási módszer (alapértelmezett: jar, mások: pom, maven-plugin, ejb, war, ear, rar, par)
Életciklus fázisok
- Maven egy előre meghatározott életciklust követ, amely különböző fázisokból áll. A legfontosabbak:
- validate: validálja a projektet, és meggyőződik arról, hogy minden szükséges információ rendelkezésre áll.
- compile: lefordítja a projektet
- test: leteszteli a lefordított kódot (a forrásfájlok nélkül)
- package: a lefordított kód becsomagolása a megadott formátumban (pl.: JAR)
- integration-test: a csomag feldolgozása és megfelelő tesztelési környezetbe helyezése, ahol integrációs tesztek futtathatók.
- verify: a csomag ellenőrzése, hogy megfelel-e a minőségi kritériumoknak
- install: a csomag telepítése a lokális repo-ba, hogy dependenciaként használható legyen lokálisan
- deploy: integrációs vagy release környezetbe helyezés, távoli repo-ba feltöltés.
- clean: előzően létrehozott bináris fájlok törlése a projektből
Goal
- A fordítási fázisok egy vagy több goal-ból áll
- A goal egy olyan feladat, ami a projekt kezeléséhez vagy fordításához kapcsolódik.
- Ezek sorrendje a fázis kötésétől függ
- Sokfázis csak egy goal-t tartalmaz
- Nem csak fázisok, de goal-ok is futtathatóak a maven paranccsal.
Repositories
- Egy repo tartifact-okat és dependenciákat tárol.
- Ha egy artifact elérhető lokális repo-ban, Maven azt használja
- Különben letölti egy távoli repo-ból. (lassabb)
A build folyamat eredménye
- a
target
könyvtár létrehozásra kerül fordítás során, amely az újonnan generált fájlokat tartalmazza- kiement, pl.: my-app-1.0.jar
classes
könyvtár: class fájlok, amelyek a fordítás során jöttek létre (kivéve teszt osztályok)test-classes
: teszt osztályokmaven-archiver/pom.properties
fájl, ami definiálja a project GAV-játsurefire-reports
: a tesztek eredményei
Dependenciák
- Külső könyvtáral amit a projekt használ
- Automatikus letöltés, ha kell
- GAV egyedien definiálja a szükséges artifact-ot
- Egy scope megadja a felhasználás módját:
- compile: ez az alapértelmezett, a dependencia szükséges a fordításhoz
- runtime: a dependencia futásidőben szükséges, de fordításkor nem
- test: a dependencia nem kell csak tesztek fordításánál és végrehajtásánál.
Gradle
- Build automatizáló rendszer amely egyre elterjedtebb
- Azt ANT és a Maven-t legjobb tulajdonságait próbálja ötvözni.
- Inkrementális build támogatás
- XML helyett Groovy alapú nyelven (Domain Specific Language)