Bejelentkezés

Hibaüzenet

Notice: Undefined offset: 1 nice_menus_block_view() függvényben (/var/www/thot-soft.com/web/sites/all/modules/nice_menus/nice_menus.module 306 sor).

Projektkezelés Maven3 rendszerrel - II rész.

A projekt állomány - pom.xml felépítése

A pom.xml a központi szereplő ami a maven3 projekteket illeti. A legegyszerűbb felépítése a következő (ezt generáltuk le az előző blog bejegyzésben):

 

  <modelVersion>4.0.0</modelVersion>
 
  <groupId>com.thotsoft</groupId>
  <artifactId>rendezes</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>
 
  <name>rendezes</name>
 
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
 
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>
 
A zölddel jelölt rész magára az előállítandó termékre tartalmaz fontos információt. Később még erre visszatérünk. A kékkel jelölt rész, az magáról a projektről tartalmaz információkat. Pl. ha majd dokumentációt gyártunk ez a rész hasznos lesz. Itt fogunk tudni majd megadni egyéb infókat is, mint pl. a projektben részt vevő fejlesztők, stb. A narancssárgával jelölt rész különböző jellemzők beállítása. Itt például, egy a forrás kódolására adtunk meg beállítást: UTF-8 a források nyelvi kódolása. Ezt a részt is majd bővíteni fogjuk, később majd látni fogjuk.
A pirossal megadott rész a függőségekre vonatkozik. Itt soroljuk fel, hogy az alkalmazásunknak mire van szüksége, pontosabban mely osztály könyvtárakra (jar) van szükség. Erre még visszatérünk.
Nézzük először a zöld részt, ismét.
A zöld rész:
 
  <groupId>com.thotsoft</groupId>
  <artifactId>rendezes</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>
 
A termék beazonosítására vonatkozik, hogy később hivatkozni tudjunk rá. A groupId az a csoport azonosító. Ez azonosítja, hogy majd ezt a terméket (az eredmény jar állományt) mely csoport alá regisztrálja be a maven3. Egy csoportban természetesen több termék is lehet. A termék alatt nem csak jar-t értünk. Lehet war, ear de még egy másik pom.xml is. Az hogy a termék milyen csomagolású lesz, azt a packaging mondja meg. A mi esetünkben egy jar-ról van szó. Szóval, a csomag azonosító a com.thotsoft a termék azonosítója pedig a rendezés, amelyet a artifactId-val adunk meg. Még egy fontos információ, a verzió azonosító. Ezt a version elemmel adjuk meg. Jelenleg 1.0-SNAPSHOT. A SNAPSHOT-al jelöljük általában a fejlesztés alatt levőt, míg a RELEASE-el a végleges, ellenőrzés és kiadott terméket. Na most, azt nézzük meg, hogy ezt az infót hogyan használja fel maven3?
 
Az előző blog bejegyzésben a végén kiadtuk a rendezes könyvtárban a 
 
mvn clean install
 
parancsot. Ezáltal lefordultak a generált osztályok, lefutott a tesztelés, majd előállt a termék. A clean az a 'target' alkönyvtár törlését jelenti. Tehát minden ami ideiglenes termék. Az előállított termék a target alatt találhat rendezes-1.0-SNAPSHOT.jar néven. Ha megnézzük az elnevezést, akkor látni fogjuk, hogy mit mire használt fel a maven:
 
rendezes-1.0-SNAPSHOT.jar == ${artifactId}-${version}.${packaging}
 
És ez nem minden. Az install hatására a local repository-nkba is installálta a terméket. Ez mit is jelent? Nézzük meg! Navigáljunk el a maven3 repository alkönyvtárba és nézzük meg, hogy milyen könyvtárak vannak. Látni fogunk egy rakat könyvtárat. Pl. com, org, net, stb.
Menjünk bele a com alkönvytárba. Látni fogjuk, hogy a thotsoft is ott van. Menjünk bele ebbe is. Látni fogjuk, hogy benne van a rendezes alkönyvtar is. Menjünk bele ebbe is. Látni fogjuk, hogy ott a 1.0-SNAPHOT alkönyvtár. Lépjünk bele ebbe is, és megtaláljuk a termékünket, a rendezes-1.0-SNAPSHOT.jar állományt.
Tehát a teljes elérési útvonal: ${MAVEN_REPOSITORY}\com\thotsoft\rendezes\1.0-SNAPSHOT\rendezes-1.0-SNAPSHOT.jar 
 
Szóval, a maven3 a groupId-t a csomag elnevezés szerint ('.' az elválasztó) részekre bontotta, majd minden résznek megfelelően létrehozott egy könyvtárat, ha még nem volt. Létrehozott alatta egy könyvtárat a ${artifactId} és alatta a ${version}-ek is, majd a verzió alá betette a terméket. Nos, ez a lényeg. A maven3 központilag tárolja a különböző termékeket, egy könyvtár struktúrában, melyet a fentiekben szemléltettünk. Ez mindegyikre igaz. A maven3-nál nem kell lokálisan, projekten belül kézzel letölteni, és egy lib alkönyvtár alá (pl. ahogy ant-nál, vagy eclipse-nél szoktuk megadni) elhelyezni a szükséges osztálykönyvtárakat. A maven3-nál csak a hivatkozást kell megfelelően megadni, és ő megpróbálja azt megkeresni a local repository-ba, a lokális tárolóba. Ha megtalálja, akkor ezt az osztály könyvtárat elérhetővé teszi a fordításhoz, ha pedig majd csomagolni is kell  (pl. war-ba vagy ear-ba), akkor a megfelelő helyre át is másolja. Egyszerű, nem?
Ezek után már könnyű megérteni a pirossal írott részt. Ott ugyanis egy hivatkozás van, egy függőség. Jelenleg ezt a függőséget a teszteléskor használja a rendszer, a junit csomagot (járjunk utána, hogy ez a jar hol helyezkedik el a repository-ba). A függőség megadása ugyanolyan elven történik, mint ahogy a termékünk elnevezése is történt:
 
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
 
groupId a csoportot azonosítja, a kiadót azonosítja sok esetben, az artfictId pedig a termék azonosító, illetve a verzió. Egy új mező is van, ez a scope . A scope ebben az esetben azt jelenti (más értékeket is vehet fel), hogy csakis a tesztelési ciklusban kell felhasználni ezt a jar-t, a kiadáshoz, installáláshoz nem. Így majd adott esetben, ha majd war-t vagy ear-t adunk meg, akkor a junit osztály csomag, nem kerül bele, hisz kikötöttük, hogy csak a teszteléshez kell. A scope-ra még később visszatérünk.
 
No de mi van akkor, ha nincs meg a lokási repository-ba az a jar, amire szükségünk lenne? Ebben az esetben a maven3 megpróbálja letölteni azt egy távoli maven3 repository-ból. A maven3 repository nem más mint egy http szerver, melynél web oldalak helyett, strukturáltan a különböző csomagolású termékeket találjuk meg. Ha nem adunk meg semmilyen repository-t, akkor az úgy nevezett maven3 central repository-ból próbálja leszedni. Ez a: http://repo.maven.apache.org/ címen található és azon belül a maven2 oldal alatt:
 
 
Ez a cím nem alkalmas arra, hogy beletekintsünk. Ha a tartalmát szeretnénk megnézni, akkor a http://search.maven.org/#browse címre kell menni. Ha találomra kiválasztunk egyet, pl. az 'abbot' -ot. Akkor a következő hierarchiát kapjuk:
/abbot
    /abbot
       /0.12.3
          /abbot-0.12.3.jar
       /0.13
         /abbot-0.13.jar
     /abt
       /1.0
        /<üres>
 
Ez azt jelenti, hogy az abott mint csoport alatt van két termék - az abt az üres - és az abott-ból van két verzió. Így ha ezzel egészítenénk ki a függőségeket, akkor a következőket kellene írni:
 
 
 
    <dependency>
      <groupId>abbot</groupId>
      <artifactId>abbot</artifactId>
      <version>0.13</version>
    </dependency>
 
Abban az esetben, ha ebben a repository-ban (egyszerűbben: repo) nem találnánk meg ezt a komponenst, de mondjuk egy másikban igén, pl. a java.net Maven2-es repoban (url: http://download.java.net/maven/2/), akkor ezt a pom.xml-be felvehetjük további repo definícióként. Ezt a maven fordításkor figyelembe vesszi és ebben is keresni fog. A repo hivatkozást a következőképpen adjuk hozzá a pom.xml-hez:
A <dependencies> elem felett adjuk hozzá a következőket:
 
<repositories>
  <repository>
    <id>java.net-maven2</id>
    <name>Java Net Maven2 repo</name>
    <releases>
      <enabled>true</enabled>
    </releases>
    <snapshots>
     <enabled>true</enabled>
    </snapshots>
  </repository>
</repositories>
 
A releases és a snapshots elem arra való, hogy szabályozzuk, hogy az adott repot mire akarjuk használni? Engedélyezzük-e, hogy pl. a snapshot kiadásokat is letöltse arról a szerverről a maven, vagy csak a tényleges kiadásokat (releases). Nyílván, több repot is fel lehet sorolni. Lényegében ezennel meg lennénk az alap pom.xml beállítással. Ezt a pom.xml-t folyamatosan bővíteni fogjuk a további blog bejegyzések során,de a legalapvetőbb beállítások ismertetésre kerültek.
Nézzük, hogyan tudjuk azt elérni, hogy ne keljen folyton, minden projektnél felsorolni a repo-kat. Mi lenne, ha lenne egy központi hely, amelyen keresztül valamennyi repo elérhetővé válik? Jól hangzik, nem? Ez a Sonatype Nexus alkalmazás. Ez lesz a következő bejegyzésünk tárgya.
 
Ha a fentiekkel kérdések merülnek fel, kérem keressetek a magyar@mail.thot-soft.com e-mail címen.
 
Hasznos olvasni valók:
 
 
 
 
 
magyar

Blog szerzők

Felhasználói blog történet

Projektkezelés Maven3 rendszerrel - II rész. | blog.thot-soft.com

Hiba

A webhelyen nem várt hiba történt. Később érdemes újra megpróbálni.

Hibaüzenet

  • Warning: Cannot modify header information - headers already sent by (output started at /var/www/thot-soft.com/web/includes/common.inc:2786) drupal_send_headers() függvényben (/var/www/thot-soft.com/web/includes/bootstrap.inc 1486 sor).
  • Error: Class 'Gettext' not found l10n_update_batch_import() függvényben (/var/www/thot-soft.com/web/sites/all/modules/l10n_update/l10n_update.bulk.inc 460 sor).