Warning: Creating default object from empty value in /chroot/home/zerotohe/zerotohero.hu/html/wp-content/themes/salient/nectar/redux-framework/ReduxCore/inc/class.redux_filesystem.php on line 29
Maven projektek hordozhatósága | zeroToHero

Maven projektek hordozhatósága

By 2015.01.05Maven

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)