Windows-ra történő installálás után be kell állítani a JDK helyét a {mavenHome}\bin\mvn.bat fájlban, például:
A lokális repository helye unix-on:
A lokális repository helye windows-on:
Egy normál (nem maven-el kezelt) jar-fájl berakása a lokális repository-ba, például:
Egy másik megoldás hogy a maven-undefined projektbe rakjuk bele a jar-t, és ott definiáljuk a
maven-install-plugin részben,
hogy kerüljön be a lokális repository-ba.
Ilyen megoldásokra azért van szükség mert pl. az oracle driver nem publikus license-szel van ellátva,
így nem tölthető le a central repository-ból.
Ilyen esetekben mindig undefined.xxx legyen a groupId, jelezve hogy nem egy normális repository-ból kaptjuk,
hanem a jar-t egy speciális install-lal raktuk a lokális repository-ba.
Hogy a dependency-ben felsorolt külső library-hez legyen látható dokumentáció és forráskód,
be kell állítani ezt a Netbeans-ben:
A local repository-ból törölni manuálisan lehet, a könyvtár törlésével.
Ne használjunk a dependency-nél verzió intervallumot. Ugyanis ilyenkor lehet hogy egy SNAPSHOT verziót fog használni.
Megadható még a RELEASE vagy LATEST is, de ezekkel együtt nem adható meg intervallum.
build time
Szükség lehet arra, hogy a program kiírja mikor készült, és ezzel ne kelljen manuálisan foglalkozni.
A maven képes arra, hogy build-eléskor a rendszeridőt egy változóban formázottan tárolja,
és ezt az értéket a maven replacer plugin-nel a projektünk egy fájljába beleírjuk.
A pom.xml-be ez szükséges:
Ezután hivatkozni tudunk rá mint ${timestamp} jellemző a maven replacer plugin-ban.
copy-rename-maven-plugin
A plugin fájlok átnevezésére illetve másolására szolgál.
A "goal"-nál "copy" illteve "rename" szerepelhet, illetve a "phase" is állítható.
A példában 2 javascript fájlt nevez át az aktuális dátumnak megfelelően, de csak a war-ba csomagolás fázisban,
így a dátumos névvel ellátott fájlok csak a war-ban jönnek látre:
Beállítható a pom.xml-ben a properties részben mi legyen a maven.build.timestamp formátuma.
A java standard dátum formázó karakterei használatosak, például:
dependency
junit dependency:
itextpdf dependency:
jackson (json) dependency:
log4j dependency:
poi dependency:
redstone dependency:
slf4j-log4j12 dependency:
thumbnailator dependency:
exec-maven-plugin
Ezt a plugint nem a szokásos módon kell használni!
Ugyanis netbeans esetén hiába van a pom.xml-be ez a plugin beírva, nem ez fut, ez futáskor látható
a kiírás verziószámából.
A netbeans tartalmaz egy beépített exec-maven-plugin-t, és ezt fogja futtatni.
Ez a plugin felelős a JVM beállításáért (pl. file.encoding), illetve a programnak tud átadni paramétereket.
Ennek beállításához itt férhetünk hozzá:
A Set Properties résznél beállítható a file.encoding,
és a futáskori 2 darab (egy kettő) program paraméter, például:
<finalName>
Program build-elésnél beállítható, hogy az elkészítendő jar (war) milyen nevet kapjon.
Ha nem állítjuk be, akkor a névbe bekerül az artifactId, és a verzió is.
Mivel a verzió mindig más, így az elkészült jar neve is mindig más lesz, ami lehet hátrányos.
Ennek kiküszöbölése, ha mi adjuk meg a jar nevét.
Ehhez a pom.xml-ben a <build> részen belül el kell helyezni a <finalName> -et.
A példában a jar neve csak az artifactId-ből fog állni:
javadoc letöltés
Alapból a függőségekhez tartozó javadoc és source nem töltődik le a távoli repository-ból.
A letöltés egyik módja, hogy parancssorból az adott projekt főkönyvtárában állva ahol a pom.xml is van:
Netbeans esetén lehetőség van a felületen a projekthez tartozó Dependencies ikonra kattintva: Download javadoc és Download sources művelettel.
maven-compiler-plugin
Ennek a plugin-nak a használata nem kötelező.
Ha viszont használjuk, akkor be kell állítani az <encoding>-ot,
mivel nem vesz át a <project.build.sourceEncoding>-nál beállított értéket!
showDeprecation:
Ennek a "true"-ra való állításával részletesen kiírja milyen "deprecated" forráskód sorokat talált a fordításnál.
maven-install-plugin
A plugin segítségével egy nem maven-el kezelt jar-fájl lehet betelepíteni a lokális repository-ba.
Ha a jar mellett megvan a javadoc, és a source is, azt is lehet telepíteni.
Több <execution>-t is tartalmazhat.
Példa az ojdbc6.jar installálására:
Ha a betelepítés megtörtént a lokális repository-ba, akkor automatikusan létrejön egy "XXX.pom" fájl is,
így lehetőség van ezeket feltenni egy távoli (akár céges) repository-ba is,
ezért más is hozzá tud férni a fájlokhoz egy maven projektben.
maven-jar-plugin
Az elkészítendő jar-ban lévő MANIFEST.MF fájlba lehet bejegyzéseket beírni.
<index>true</index> esetén elkészíti az INDEX.LIST fájl is (jar-index).
A <manifestEntries> elemen belül tetszőleges kulcs-érték párokat lehet felsorolni !
A projekthez java api-dokumentáció hozzáadása, melyet a pom.xml-ben a <build><plugins>
után kell elhelyezni.
Az is benne van, hogy a dokumentációs kódban (/** ... */) lévő hibákat ne vegye figyelembe (doclint = none):
Ha azt szeretnénk, hogy a private tagok, és metódusok is megjelenjenek a dokumentációban,
akkor ez is kell a <configuration> részbe:
Ez a plugin akkor lép életbe amikor a projektet teszteljük. Itt állítható be hogy mi legyen a teszt
futtatásakor a kimenet karakterkódolása.
A pom.xml-ben a <build><plugins> után kell elhelyezni:
property
Ezek a jellemzők mindig szükségesek a <properties> részben:
Továbbá tetszőleges jellemzőkkel is bővíthetjük, például:
melyre ${jellemző} formában hivatkozhatunk, például egy dependency részen belül:
maven-replacer-plugin
Ennek a plugin-nak a segítségével fájlok tartalmában lehet kicserélni egyes szövegrészeket.
Több fájl is megadható, egy-egy <execution> részben.
Egy fájlon belül több szövegrész cserélhető, <token> cserélődik <value>-ra.
A <token> résznél regular expression-t kell megadni.
Első példa: az application.yml fájlban cserél ki 2 szöveget a pom.xml-ben lévő adatokra.
Azért kell a compile fázisban csinálni (a prepare-package fázis helyett), hogy ne csak a jar-ban
történjen meg a replace, hiszen legtöbbször nem a jar-t futtatjuk.
Második példa: a messages.properties fájlban cserél ki szöveget, tehát a forráskódban is cserélhetünk!
A <token> résznél regular expression van megadva:
repository hozzáadás
Lehetőség van a pom.xml-ben felvenni egyéb repository-kat is,
például egy céges belső nexus repository-t.
Így a projekt független lehet a settings.xml beállításától.
A bejegyzést a pom.xml gyökerébe kell felvenni:
Amennyiben az így felvett repository-hoz be is kell autentikálni,
akkor az autentikáció adatait biztonsági okokból csak a settings.xml-be lehet felvenni.
Lásd a settings.xml leírásnál, a <servers> résznél.
resource filtering
Lehetőség van arra, hogy a maven a statikus resource fájlokat módosítsa a build folyamat során.
Erre jó példa a xesj.core projektben a program verziószámának kiírása.
Mivel a verzió le van írva a pom.xml-ben, felesleges lenne egyéb helyre is leírni,
és folyamatosan ott is módosítani.
A megvalósításhoz a projektben belül készítünk egy resource-ot, például egy xml-t,
mely tartalmazza a ${project.version} stringet.
A pom.xml-ben erre a fájlra egy resource filtering-et definiálunk, emiatt a maven a build folyamat során kicseréli
ezt a stringet a konkrét program verzióra ami a pom.xml-ben a <version> tag-nél leírtunk.
A program pedig futása során ki tudja olvasni a konkrét értéket az xml-ből.
scope
compile:
Ez a default scope, ha nem definiáljuk. Érvényesül a tranzitivitás vagyis:
esetén az A.war-ba bekerül a C 3. verziója.
Ha az A is hivatkozik a C egy tetszőleges verziójára:
akkor az utóbbi kötés erősebb, így a projektbe a C 2. verziója kerül,
függetlenül attól hogy a C2 kisebb vagy nagyobb verziójú mint a C3!
provided:
Ennél a scope-nál nem érvényesül a tranzitivitás, vagyis:
esetén az A.war-ba nem kerül be a C 3. verziója.
test:
Jelzi hogy a függőség csak a teszteléshez kell.
settings.xml
A maven globális beállításait a settings.xml fájlban lehet leírni melynek két lehetséges helye is van:
Új repository felvétele a settings.xml-ben, ezzel a módszerrel nem kell a projektekhez tartozó
pom.xml-ben a repository-t definiálni:
Amennyiben az így felvett repository-hoz be is kell autentikálni, akkor ezt is fel kell venni a
settings.xml-be.
Figyeljünk az id-re, ugyanis ez köti össze őket: