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 alapok | zeroToHero

Az élet nehéz, a projektek bonyolultak, de a Maven segít!

Egy alkalmazás készítése során nem célszerű minden programrészletet saját magunk elkészíteni, hiszen lehet, hogy egyes problémákra (pl. e-mail küldés smtp protokollon keresztül) már léteznek mások által kifejlesztett, elterjedt, jól bejáratott megoldások. Egy nagyobb szoftver projekt temérdek ilyen framework-öt, programcsomagot tartalmazhat, melyeket összefoglaló néven függőségeknek (dependency) szoktunk nevezni. Például egy Java projekt függőségei általában jar fájlok szoktak lenni.

 

Réges-régen, egy szomorúbb korban, amikor becsatlakoztunk egy projektbe, vagy elkezdtünk egy újat, saját maguknak kellett ezeket a függőségeket letölteni, beállítani az IDE-t, annak érdekében, hogy a projekt minden függőséget figyelembe véve, megfelelően forduljon, mely sok bosszúságot és álmatlan éjszakát okozhatott. Egykor az Apache Ant eszköz szolgált a konfigurációs problémák megoldására, de ez mára már elavulttá vált a script fájljainak bonyolult nyelvezete miatt, valamint ennek az eszköznek a használata esetén is magunknak kellett letölteni a függőségeket, így könnyen előfordulhatott, hogy a kollégáimmal különböző verziójú függőségekkel dolgoztunk, s ez beláthatatlan következményekkel járhatott.

Manapság az Apache Maven eszközt használjuk projektjeink építéséhez, menedzseléséhez. A Maven használatával egy egyszerű xml fájlban tudjuk megadni a projekt felépítéséhez szükséges összes információt. A különböző függőségek összevadászásával sem kell többet bajlódnunk, hiszen azokat a Maven tölti le egy repository-ból az xml fájlban megadott információk alapján. A Maven Central Repository rengeteg projektet tesz könnyen elérhetővé, de ezen felül léteznek más (pl. gyártók által készített) repository-k is, sőt saját magunk is létrehozhatunk ilyet.

Lássuk, hogyan is tudjuk telepíteni és használni a Mavent.

Telepítés

A Maven futtatásának előfeltétele, hogy gépünkre fel legyen telepítve a Java Development Toolkit (JDK). Ennek telepítése után ellenőrizzük le, hogy a rendszer JAVA_HOME környezeti változója a JDK mappájára mutat, valamint azt is, hogy a PATH környezeti változó tartalmazza-e a $JAVA_HOME/bin útvonalat.

Amint ez megvan, elkezdhetjük a Maven telepítését:

  • A “http://maven.apache.org/download.cgi” oldalról töltsük le az operációs rendszerünknek megfelelő Maven változatot.
  • A letöltött csomagot ki kell csomagolni egy általad kiválasztott mappába, s már majdnem kész is vagyunk :)
  • Hozzuk létre a M2_HOME környezeti változót, s értékéül adjuk meg annak a mappának az elérési útvonalát ahova a mavent kicsomagoltuk.
    • Linux: A konzolba, vagy .bashrc fájlba írjuk be a következőt: export M2_HOME=”<maven_mappa>”
    • Windows: Nyissuk meg a “Környezeti változók” ablakot, s készítsünk új környezeti változót, melynek neve M2_HOME, értéke pedig ’<maven_mappa>’ legyen (az aposztrófok fontosak)
  • Hozzuk létre a M2 környezeti változót, melynek értéke a Maven HOME könyvtárának bin alkönyvtára lesz.
    • Linux: a konzolba, vagy .bashrc fájlba írjuk be a következőt:export M2=$M2_HOME/bin
    • Windows: a “Környezeti változók” ablakban készítsünk egy új környezeti változót M2 névvel és %M2_HOME%\bin értékkel
  • Opcionálisan létrehozhatunk egy MAVEN_OPTS nevű környezeti változót is, melynek értékeként a Maven által használt JVM beállításokat tudunk megadni (pl. „-Xms512m -Xmx2048m”)
  • Végül a PATH környezeti változóhoz adjuk hozzá az M2 környezeti változót
    • Linux: a konzolba, vagy .bashrc fájlba írjuk be a következőt:export PATH=$M2:$PATH
    • Windows: a “Környezeti változók” ablakban szerkesszük a PATH változót, s az értékének végére illesszük be a következőt: %M2%

Ellenőrzésképpen egy konzol ablakban futtassuk le az  mvn –version parancsot.

A Maven első futtatása után létrejön egy .m2 mappa, mely tartalmazni fogja a letöltött függőségeket, valamint az itt található settings.xml-ben különböző beállításokat adhatunk meg (ennek a fájlnak a felépítését és tartalmát egy későbbi bejegyzésben mutatjuk be).

Egyes IDE-khez lehetséges, hogy fel kell telepíteni egy Maven plugint annak érdekében, hogy könnyen lehessen Maven projekteket létrehozni.

Első használat – Egy egyszerű maven projekt

Minden maven projekt alapja a pom.xml fájl, mely gyakorlatilag minden fontos információt tartalmaz, mint pl. a projekt neve, verziója, csomagolási formátuma, a fordítási beállítások, s itt kell megadni azt is, hogy milyen függőségei vannak a projektnek (pl. miyen jar-okat töltsön le a maven fordítás során).

A Maven projektek forrás állományai egy előre definiált könyvtár struktúrában vannak. Egy Java projekt struktúrája alapvetően a következőképpen néz ki:

A példában látható main mappában projektünk forrásállományai, míg a test mappában az egyes osztályok tesztjeit tartalmazó fájlok találhatók. A resources almappákban úgynevezett erőforrás állományok (pl. property fájlok, xml leírók, stb.), míg a java könyvtárban java forrásállományok találhatók.

Egy Hello World alkalmazás az alábbi parancs lefuttatásával hozható létre konzolból:

mvn archetype:generate -DgroupId=hu.zerotohero -DartifactId=hello-world -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

Ahogy láthatjuk létrejött a projekt a fent bemutatott fájlszerkezettel, valamint a nélkülözhetetlen pom.xml-el, melynek tartalma:


<project xmlns=”http://maven.apache.org/POM/4.0.0″ xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
  xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd”>

  <modelVersion>4.0.0</modelVersion>
  <groupId>hu.zerotohero</groupId>
  <artifactId>hello-world</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>hello-world</name>

  <dependencies>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

  </dependencies>

</project>

 Az artifactId nem mást tartalmaz, mint a projektünk nevét, míg a groupId tag-ek között található a projektet készítő szervezet azonosítója, mely jelen esetben hu.zerotohero (mindig a szervezet dönti el, hogy mi lesz az azonosító). A packaging részben adhatjuk meg, hogy milyen típusú allományt készítsen a Maven a projektünkből. A name tag-ek között található a projekt neve, a version tag-ek közt pedig jelenlegi verziószáma. A dependencies részben tudjuk felsorolni a projekt függőségeit.

Ahogy láttuk, új Maven projekt létrehozható kézzel is, de ezt ajánlott az IDE-re bízni, amennyiben lehetséges.

A projekteket például le tudjuk fordítani konzolból az “mvn clean install” paranccsal, de az IDE-kből is lehetséges a fordítás és a futtatás is. Fordítás elött a Maven letölti a projekt függőségeit egy előre beállított mappába, majd a fordítás eredménye a projekt könyvtárában létrejött target mappában lesz megtalálható (pl. jar fájl, war fájl, attól függően, hogy mit állítottunk be). A Hello World “alkalmazást” futtatva:

java -cp target/hello-world-1.0-SNAPSHOT.jar hu.zerotohero.App

megkapjuk az eredményt :)

A Hello World példánk létrehozásához úgynevezett archetype-ot használtunk, melyekről a későbbiekben még lesz szó.