Sziasztok!
Korábbi bejegyzéseinkben megismerkedhettél több Maven komponenssel is. Most szeretném bemutatni, hogy build profilok, valamint a settings.xml segítségével hogyan készíthetjük fel alkalmazásainkat arra, hogy több gépen is könnyen használhatóak legyenek.
Build profile
A projektek pom fájljain belül lehetőségünk van profilok létrehozására, melyek segítségével alkalmazásunk különféle módokon lehet majd fordítani vagy akár futtatni is (web-es alkalmazások esetén deploy-olni). Ezzel a módszerrel készíteni tudunk például egy Teszt, egy Development és egy Production profilt.
Egy egyszerű példa lehet a profil használatára, hogy ugyan alapvetően nem szeretnénk használni egy bizonyos plug-int, viszont bizonyos esetekben (pl. tesztelésnél) igen. Az alábbi példában elsősorban azt szeretnénk elérni, hogy a maven-surefire-plugin-t használjuk a testProfil használata során (viszont alapvetően nem szeretnénk használni).
<profiles>
<profile>
<id>testProfile</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<test.directory>src/test/resources</test.directory>
</properties>
<build>
<defaultGoal>clean install</defaultGoal>
<testResources>
<testResource>
<directory>${test.directory}</directory>
<filtering>true</filtering>
</testResource>
</testResources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.15</version>
<configuration>
<useSystemClassLoader>false</useSystemClassLoader>
<includes>
<include>**/*Test.java</include>
</includes>
</configuration>
</plugin>
</plugins>
.
.
.
</build>
</profile>
</profiles>
Amint láthatod a különböző profilokat a <profiles> tag-ek között kell felsorolni, míg a profilra vonatkozó beállításokat a <profile> tag-ek között.
Az <id> tag-ek közé lehet írni a profil azonosítóját, mely alapján használatba tudjuk majd venni. Jelen esetben ez azt jelenti, hogy az mvn -P testProfile parancs explicit kiadásával aktiválódik a profil.
Az <activation> tag-ek között határozhatunk meg olyan feltételeket, melyek teljesülése esetén a profil akkor is aktivizálódik, ha nem hívjuk meg explicite a -P kapcsolóval. Ilyen feltétel például a <activeByDefault> kapcsoló, melynek true értéket adva az adott profil válik az alapvető profillá, így használható lesz csupán az mvn parancs kiadásával.
A <properties> részben, csak az adott profilra érvényes property-ket adhatunk meg. Előfordulhat, hogy csak azért hozunk létre egy profilt, hogy egy-egy property-t felülírjunk, vagyis a profilok lehetőséget adnak arra, hogy ugyanazt a projektjektet más-más property-kkel használjuk (pl. más-más verziószámok használata).
A profilokban is lehetőség van <build>…</build> tag-ekkel határolt részt létrehozni, melyben megadhatunk mindenféle, a fordítási folyamattal kapcsolatos beállítást, mely csak az adott profil használatakor lesz érvényben. Itt kell megadni a <defaultGoal>clean install</defaultGoal> beállítást, melynek eredménye képpen mvn -P testProfile parancs lefuttatásakor clean és az install plugin-ek is felhasználásra kerülnek. Ugyancsak itt adhatunk meg resource-okat, illetve jelen esetben a csak teszteléshez használatos testResources-okat is.
Végül a profil build részének plugin-jei közt húztuk be a maven-surefire-plugin-t, ami JUnit tesztjeink eredményről készít egy riportot xml vagy txt formátumban, melyet átadhatunk akár különböző continuous integration eszközöknek (pl. Jenkins).
A settings.xml
Könnyen előfordulhat, hogy a projekt egyes paraméterei fejlesztőnként különbözőek lesznek. Például ha a projekt tesztelése céljából minden fejlesztő egy lokális adatbázist használ, akkor az adatbázis neve, címe, jelszava stb. eltérhet. Vagy ha a fejlesztők saját gépükön futtatnak egy-egy webkonténert (pl. Tomcat, Glassfish), akkor szinte biztos, hogy a felhasználónév és a jelszó fejlesztőnként más-más lesz.
A probléma megoldásának érdekében létrehozhatunk egy settings.xml nevű fájlt, melyen belül profilokat hozhatunk létre, melyekben a saját, lokális környezetünkben érvényes property-ket definiálhatunk. Több profilt is létrehozhatunk, s meghatározhatjuk, hogy ezek közül melyek legyenek aktívak. Az aktív profilokban definiált property-k pedig minden általunk használt projekt számára elérhetővé válnak.
Példaként a fent bemutatott ${test.directory} property-t áthelyezhetjük a settings.xml-be a következő módon:
<settings>
<profiles>
<profile>
<id>demo</id>
<properties>
<test.directory>src/test/resources</test.directory>
</properties>
</profile>
</profiles>
<activeProfiles>
<activeProfile>demo</activeProfile>
</activeProfiles>
</settings>
Mint láthatod a setting.xml tartalmát a <settings></settings> tag-ek közé kell írni, a profilokat a <profiles></profiles> tag-ek között kell felsorolni. Az egyes profilok számára meg kell adni egy azonosítót, majd jöhet a property-k felsorolása. Meghatározhatjuk, hogy az egyes profilok milyen feltételek mellett aktivizálódjanak (dinamikus aktiválás). Viszont az <activeProfiles></activeProfiles> tag-eken belül is megadhatjuk, hogy melyek az aktuálisan aktív profilok (statikus aktiválás). A bemutatottakon kívül lehetőség van egyéb dolgokat is beállítani a settings.xml-be (pl. repository-k), de ezekkel most nem foglalkozunk részletesen.
Még nem ejtettem szót arról, hogy hol is kell létrehozni a settings.xml-t. Két lehetőségünk is van:
- Amennyiben az operációs rendszer egy bizonyos felhasználója számára szeretnénk létrehozni a settings.xml-t, akkor azt a felhasználó home könyvtárának .m2 mappájában kell megtennünk (a home könyvtáron belül levő .m2/settings.xml fájl). A .m2 mappa automatikusan létrejön a Maven használata során.
- Ha a rendszer minden felhasználója számára, azaz globálisan elérhetővé szeretnénk tenni a settings.xml-t, akkor azt a Maven telepítési könytárának conf almappájában kell létrehozni (%M2_HOME%/conf/settings.xml)