You are on page 1of 33

Apache Maven Lehetőségek


A főbb lehetőségek közé tartoznak a
következők:
Jeszenszky Péter – Egységes rendszer projektek összeállításához
Debreceni Egyetem, Informatikai Kar – Függőségkezelés
jeszenszky.peter@inf.unideb.hu – Disztribúció közzététel
– Jelentéskészítés és webhely létrehozás
Utolsó módosítás: 2021. február 23.

Lásd: Feature Summary
https://maven.apache.org/maven-features.html

Apache Maven Jellemzők (1)



Egy projektkezelő eszköz (software project management ●
Konvenciók előtérbe helyezése az egyedi
and comprehension tool) a következő célkitűzésekkel: beállításokkal szemben (convention over
– Az összeállítási folyamat megkönnyítése. configuration)
– Egységes rendszer biztosítása az összeállításhoz. – Például szabványos könyvtárszerkezet meghatározása.
– Minőségi projekt információk szolgáltatása. ●
Projekt életciklusok és életciklus fázisok
– Irányelvek és legjobb gyakorlatok szolgáltatása a meghatározása
fejlesztéshez.
– Az új lehetőségekre való transzparens migrálás lehetővé

Jellegét tekintve deklaratív
tétele. ●
Moduláris és kiterjeszthető felépítés

Lásd: https://maven.apache.org/what-is-maven.html – Minden funkció megvalósítása bővítményekkel történik.

2 4
Jellemzők (2) Telepítés

Noha a gyakorlatban főleg Java projektekhez használják, más ●
Az Apache Maven használatához JDK szükséges,
programozási nyelvek esetén is használható, például: JRE nem elegendő!
– C/C++:

nar-maven-plugin https://maven-nar.github.io/
– A JDK 7-es vagy későbbi kiadása szükséges.
https://github.com/maven-nar/nar-maven-plugin – Fontos, hogy megfelelően be legyen állítva a
Native Maven Plugin
JAVA_HOME környezeti változó is!

https://www.mojohaus.org/maven-native/native-maven-plugin/
https://github.com/mojohaus/maven-native

Letöltés: https://maven.apache.org/download.html
– Kotlin:

kotlin-maven-plugin https://kotlinlang.org/docs/reference/using-maven.html ●
A használatba vételhez a szoftvert tartalmazó
– Scala: archív állomány kibontása után csupán a PATH
scala-maven-plugin http://davidb.github.io/scala-maven-plugin/
környezeti változót kell beállítani.

https://github.com/davidB/scala-maven-plugin

5 7

Fejlesztés Telepítés (Linux) (1)



Programozási nyelv: Java ● Ha például az /opt/apache-maven-3.6.3

Szabad és nyílt forrású: az Apache License 2.0 könyvtár alá bontottuk ki a szoftvert tartalmazó
hatálya alatt terjesztik állományt, akkor az alábbi környezeti változó

A jelenleg aktuális stabil verzió a 3.6.3 számú (kiadás beállítás szükséges:
dátuma: 2019. november 25.) – export
– Lásd: Maven Releases History PATH=/opt/apache-maven-3.6.3/bin:$PATH
https://maven.apache.org/docs/history.html ●
Tipp: a beállítások elvégzéséhez hozzuk létre az

A következő verzió a 3.7 lesz /etc/profile.d/maven.sh állományt a fenti

Tároló: https://github.com/apache/maven tartalommal.

6 8
Telepítés sikerességének
Telepítés (Linux) (2)
ellenőrzése

Az Apache Maven az SDKMAN! eszközzel is ●
Hajtsuk végre a parancsértelmezőben az alábbi
telepíthető, melyhez az alábbi parancsot kell ekvivalens parancsok valamelyikét:
végrehajtani: – mvn --version
sdk install maven – mvn -v

Az SDKMAN! telepítéséről lásd: ●
Sikeres telepítés esetén a program az alábbit
https://sdkman.io/install írja a kimenetre:
Apache
Apache Maven
Maven 3.6.3
3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
(cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven
Maven home:
home: /home/jeszy/.sdkman/candidates/maven/current
/home/jeszy/.sdkman/candidates/maven/current
Java
Java version:
version: 15.0.2,
15.0.2, vendor:
vendor: Oracle
Oracle Corporation,
Corporation,
runtime:
runtime: /home/jeszy/.sdkman/candidates/java/15.0.2-open
/home/jeszy/.sdkman/candidates/java/15.0.2-open
Default
Default locale:
locale: hu_HU,
hu_HU, platform
platform encoding:
encoding: UTF-8
UTF-8
OS
OS name:
name: "linux",
"linux", version:
version: "5.1.5-050105-generic",
"5.1.5-050105-generic", arch:
arch: "amd64",
"amd64", family:
family: "unix"
"unix"

9 11

Telepítés (Windows) IDE integráció (1)


● Ha például a C:\Program Files\apache- ●
Eclipse: m2eclipse https://www.eclipse.org/m2e/
maven-3.6.3 könyvtár alá bontottuk ki a – Update site:
https://download.eclipse.org/technology/m2e/releases/latest/
szoftvert tartalmazó állományt, akkor az alábbi – Az Eclipse IDE for Java Developers Indigo kiadása már tartalmazza
beállítás szükséges: a m2eclipse bővítményt, így külön telepítése nem szükséges.
– Adjuk hozzá a PATH környezeti változó értékéhez a ●
IntelliJ IDEA: beépített Apache Maven támogatás.
C:\Program Files\apache-maven-3.6.3\ – Lásd: https://www.jetbrains.com/help/idea/maven.html
bin könyvtárat. ●
Netbeans: a 6.7 verziótól kezdve beépített Apache Maven
támogatás.
– Lásd: http://wiki.netbeans.org/Maven

10 12
IDE integráció (2) Projekt könyvtárszerkezet (1)

Visual Studio Code: a Maven for Java ●
Szabványos könyvtárszerkezet meghatározása
kiterjesztés nyújt Maven támogatást. a projektek számára.
– Lásd: – Lásd: Introduction to the Standard Directory Layout

Maven for Java https://maven.apache.org/guides/introduction/introd
https://marketplace.visualstudio.com/items?itemName=vs uction-to-the-standard-directory-layout.html
cjava.vscode-maven

Java Project Management in VS Code – Maven
https://code.visualstudio.com/docs/java/java-project#_ma
ven

13 15

További információk Projekt könyvtárszerkezet (2)


project/

Hivatalos dokumentáció: https://maven.apache.org/guides/
src/

Ingyenes elektronikus könyvek (licenc: Creative Commons BY-
NC-ND): https://www.sonatype.com/resources/ebooks main/
– Maven by Example https://github.com/sonatype/maven-example-en
java/
– Maven: The Complete Reference
https://github.com/sonatype/maven-reference-en resources/
– Repository Management with Nexus
test/
https://github.com/sonatype/nexus-book

Levelezési listák: https://maven.apache.org/mailing-lists.html java/

resources/

site/

pom.xml
14 16
Használat (1) settings.xml (1)

A használat módjáról és a megadható parancssori ●
Projekt-független beállításokat tartalmazó
opciókról az mvn --help vagy mvn -h parancsok konfigurációs állomány.
végrehajtásával kaphatunk leírást. – Az összes felhasználó számára globális beállításokat

Parancssori argumentumként megadható életciklus szolgáltat az $M2_HOME/conf/settings.xml
fázis (például mvn package) és előtag:cél formában állomány.
bővítmény-cél (például mvn site:run). – A globális beállítások felülírásához a felhasználók
– Tetszőleges sok ilyen argumentum adható. elhelyezhetnek egy saját settings.xml állományt
– A végrehajtáshoz paramétereket rendszertulajdonságokkal a HOME könyvtáruk .m2 alkönyvtárában.
adhatunk meg -Dnév=érték formában. ● Linux rendszerekben tehát ~/.m2/settings.xml az
állomány elérési útvonala.

17 19

Használat (2) settings.xml (2)



Bővítmény-cél megadható ●
Referencia:
groupId:artifactId:verzió:cél formában is. https://maven.apache.org/ref/current/maven-set
tings/settings.html
– Akkor lehet szükséges így hivatkozni egy
bővítmény-célt, ha a bővítmény adott számú ●
XML séma:
verzióját kell használni, vagy a Maven nem tudja, http://maven.apache.org/xsd/settings-1.1.0.xsd
hogy az előtag melyik bővítményhez tartozik.
– Példa:
mvn org.codehaus.mojo:versions-maven-
plugin:2.8.1:help

18 20
settings.xml (3) Termék (artifact)

A beállítások megjelenítésére szolgál a Maven Help ●
Egy projekt által előállított állomány, mely annak
Plugin effective-settings célja. végső termékének tekinthető.
– Az mvn help:effective-settings parancs a – Egy projektben általában egy termék készül (például
globális és a felhasználói beállítások összefésülésének egy jar csomagolású projektben egyetlen JAR
eredményét írja a kimenetre. állomány).
● Tipp: saját settings.xml állomány létrehozásához ● A classifier POM elem szolgál az egy projekt által
létrehozott termékek megkülönböztetésére.
használjuk sablonként a globálisat.
– Linux környezetben az alábbi módon másolhatjuk az

Tárolókban kerülnek közzétételre, mely lehetővé
állományt a megfelelő könyvtárba: teszi a más projektekhez függőségként történő
cp $M2_HOME/conf/settings.xml ~/.m2 felhasználásukat.

21 23

Alapfogalmak Projekt objektum modell (POM) (1)



Termék (artifact) ●
Egy projekt deklaratív leírását tartalmazó XML dokumentum
(pom.xml).

Projekt objektum modell (POM – Project Object Model)
– Metaadatokat és konfigurációs beállításokat tartalmaz.

Szuper-POM (super POM) ●
Egy életciklus fázis vagy bővítmény-cél végrehajtásakor a

Effektív POM (effective POM) Maven alapértelmezésben az aktuális könyvtárban keresi a

Maven koordináták (Maven coordinates) POM-ot.
– A POM elérési útvonala -f vagy --file opcióval adható meg.

Bővítmény (plugin), bővítmény-cél (plugin goal)

A projektek között szülő-gyerek kapcsolatok definiálhatóak.

Távoli és lokális tároló (remote/local repository) – A gyerek projekt megörökli a szülőhöz tartozó POM beállításait,

Életciklus (lifecycle), életciklus fázis (lifecycle phase) melyeket felülírhat.

22 24
Projekt objektum modell (POM) (2) Minimális POM (2)

XML séma: ●
A JDK 9-től kezdve további információkat is
http://maven.apache.org/xsd/maven-4.0.0.xsd meg kell adni a fordításhoz, amint alább látható:

Dokumentáció:
– POM Reference <project
<project xmlns="http://maven.apache.org/POM/4.0.0">
xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<modelVersion>4.0.0</modelVersion>
https://maven.apache.org/pom.html <groupId>hu.unideb.inf</groupId>
<groupId>hu.unideb.inf</groupId>
– https://maven.apache.org/ref/current/maven-model/ <artifactId>maven-hello</artifactId>
<artifactId>maven-hello</artifactId>
maven.html <version>1.0</version>
<version>1.0</version>
<properties>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.target>11</maven.compiler.target>
</properties>
</properties>
</project>
</project>
25 27

Minimális POM (1) Szuper-POM



A szuper-POM a Maven által alapértelmezésben
<project
<project xmlns="http://maven.apache.org/POM/4.0.0">
xmlns="http://maven.apache.org/POM/4.0.0"> használt POM.
<modelVersion>4.0.0</modelVersion>
<modelVersion>4.0.0</modelVersion>
<groupId>hu.unideb.inf</groupId>
<groupId>hu.unideb.inf</groupId> ●
Ha egy projektnek nincs explicit módon megadott
<artifactId>maven-hello</artifactId>
<artifactId>maven-hello</artifactId>
<version>1.0</version>
<version>1.0</version>
szülője, akkor az úgynevezett szuper-POM
</project>
</project> beállításait örökli.
● A 3.x.y verziók esetén az installáció lib/
alkönyvtára alatt található maven-model-
builder-3.x.y.jar állomány tartalmazza pom-
4.0.0.xml néven.

26 28
Effektív POM Maven koordináták (2)

A projekthez tartozó POM, a felmenő ági ● A projekt POM-jában megadott groupId,
projektekhez tartozó POM-ok és a szuper-POM artifactId és version elemek határozzák meg a
kombinációja. kimenetként előállított állományok koordinátáit.
– A futás során a projekthez ténylegesen
– Explicit módon megadott szülő esetén a gyerek projekt a
koordinátákat is örökli.
felhasználásra kerülő beállításokat szolgáltatja.
● Ilyenkor tipikus a groupId és version átvétele, valamint az
● Az mvn help:effective-pom parancs artifactId felülírása.
jeleníti meg. ●
A Maven koordinátákat gyakran
groupId:artifactId:version formában írják
(példa: org.jsoup:jsoup:1.13.1).

29 31

Maven koordináták (1) Maven koordináták (3)



Minden projektet a Maven koordinátái azonosítanak, ●
Lehetővé teszik a függőségként történő
mely a következő 3 komponensből áll: hivatkozást, mint például:
– groupId: csoportazonosító, melynél gyakori a fordított
domain-nevek használata (például <dependency>
<dependency>
<groupId>org.jsoup</groupId>
<groupId>org.jsoup</groupId>
org.apache.maven.plugins), de nem kizárólagos
<artifactId>jsoup</artifactId>
<artifactId>jsoup</artifactId>
(például commons-io, junit) <version>1.13.1</version>
<version>1.13.1</version>
– artifactId: projektnév (például maven-shade- <scope>compile</scope>
<scope>compile</scope>
plugin, guava) </dependency>
</dependency>
– version: a projekt verziószáma (például 1.0, 1.0-
SNAPSHOT)

30 32
Csomagolás Bővítmények (2)
● A packaging elemben adható meg a projekt ●
Névkonvenció:
csomagolása, jelenleg támogatott: – A hivatalos, azaz az Apache Maven projektben fejlesztett
– pom bővítmények neve maven-xyz-plugin formájú, ahol xyz
az előtag.
– jar (alapértelmezés) ●
Más bővítményeknél tilos ezt a mintát követni.
– maven-plugin – Más bővítményeknél xyz-maven-plugin az ajánlott
– ejb forma, ahol xyz az előtag.
– war ●
Az előtagot a bővítmények határozhatják meg a róluk
– ear metaadatokat szolgáltató plugin.xml
– rar állományukban.

33 35

Bővítmények (1) Bővítmények (3)



Szinte minden funkciót bővítmények nyújtanak. ●
A Maven alapértelmezésben csak az
– A bővítmények egy-egy funkciót megvalósító úgynevezett célokat szolgáltatnak. org.apache.maven.plugins és az

A bővítmények is termékek, melyekre a Maven koordinátákkal lehet org.codehaus.mojo csoportokba tartozó bővítmények
hivatkozni.
– Példa a POM-ban történő hivatkozásra:
céljaira való hivatkozásokat teszi lehetővé előtagok révén.
● <plugin> – Lásd a maven-metadata-central.xml állományokat a
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId> $HOME/.m2/repository/org/apache/maven/plugins és
<version>3.9.1</version>
</plugin> a $HOME/.m2/repository/org/codehaus/mojo

A rendelkezésre álló bővítmények listája: Available Plugins
könyvtárakban.
https://maven.apache.org/plugins/ ●
Lásd: Introduction to Plugin Prefix Resolution

Minden bővítményhez tartozik egy olyan előtag, mely lehetővé teszi az egyes https://maven.apache.org/guides/introduction/introduction-
célokra előtag:cél formában történő hivatkozást, mint például site:deploy. to-plugin-prefix-mapping.html

34 36
Tárolók (1) Tárolók (3)

A termékek, köztük a bővítmények elérése tárolókból történik, amelyeknek ●
Szoftverek tárolók üzemeltetéséhez (repository
két fajtája van:
managemenet software):
– Távoli tárolók tipikusan a weben érhetők el, például HTTP vagy HTTPS protokollon
keresztül. – Szabad és nyílt forrású szoftverek:

Központi tároló (Central Repository) https://repo.maven.apache.org/maven2 ●
Apache Archiva (licenc: Apache License v2) https://archiva.apache.org/
– A lokális tároló a távoli tárolókból a felhasználó számára lokális használatra letöltött ●
Artifactory Open Source (licenc: GNU GPL v3)
termékeket tartalmazza az állományrendszerben, valamint az mvn install
https://jfrog.com/open-source/#artifactory
paranccsal lokálisan telepített termékeket.

Gyorsítótár szerepét tölti be.

Nexus Repository OSS (licenc: Eclipse Public License v1.0)
● A felhasználó HOME könyvtárában található a .m2 alkönyvtárban (Linux rendszerekben a https://www.sonatype.com/nexus/repository-oss-download
~/.m2/repository/ alkönyvtárban). – Nem szabad szoftverek:

A távoli és lokális tárolók azonos felépítésűek. ●
Artifactory https://jfrog.com/artifactory/

Lásd: Introduction to Repositories ●
Nexus Repository Pro https://www.sonatype.com/nexus/repository-pro
https://maven.apache.org/guides/introduction/introduction-to-repositories.ht
ml

37 39

Tárolók (2) Maven központi tároló



A tárolókban a csoportazonosító leképezése egy ●
Webhely:
könyvtárszerkezetre. https://repo.maven.apache.org/maven2/
– Példa: org.apache.maven.plugins → ●
Keresés: https://search.maven.org/
/org/apache/maven/plugins/

A könyvtárszerkezetben további alkönyvtárak, melyek neve
– Alternatíva: https://javalibs.com/
az artifactId és version komponensek értékével ●
Statisztikák:
egyezik meg (példa: org.jsoup:jsoup:1.13.1 →
/org/jsoup/jsoup/1.13.1). – https://search.maven.org/stats

A Maven 3.x verziói külön tárolókat tudnak – How many artifacts are in Maven Central
használni a függőségekhez és a bővítményekhez. Repository? https://javalibs.com/charts/central

38 40
Életciklusok Életciklusok: a site életciklus

Egy életciklus jól meghatározott életciklus fázisok egy sorozatát jelenti. ● A site életciklus az alábbi négy életciklus fázist tartalmazza:
– Minden életciklus fázist egy egyedi név azonosít.
(1) pre-site
– A fázisokhoz bővítmény-célokat lehet hozzárendelni, a hozzárendelést kötésnek
nevezik. (2) site

Az életciklus fázisok végrehajtása a hozzájuk tartozó bővítmény-célok (3) post-site
végrehajtását jelenti. (4) site-deploy
– Adott fázis végrehajtása maga után vonja valamennyi, a sorrendben azt megelőző
fázis végrehajtását. ● A site életciklus fázishoz alapértelmezésben a site:site
● Három szabványos életciklus: clean, default, site cél, a site-deploy életciklus fázishoz pedig a
– A csomagolás módjától függően a fázisokhoz alapértelmezésben hozzárendeltek site:deploy cél van hozzákötve.
bizonyos célok.

Lásd: Lifecycles Reference

Lásd: Introduction to the Build Lifecycle
https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.ht https://maven.apache.org/ref/current/maven-core/lifecycles.ht
ml ml

41 43

Életciklusok: a clean életciklus Életciklusok: a default életciklus (1)


● A clean életciklus az alábbi három életciklus fázist tartalmazza: (1) validate (13) test-compile
(2) initialize (14) process-test-classes
(1) pre-clean
(3) generate-sources (15) test
(2) clean
(4) process-sources (16) prepare-package
(3) post-clean
(5) generate-resources
(17) package
● A clean életciklus fázishoz alapértelmezésben a clean:clean (6) process-resources
(18) pre-integration-test
cél van hozzákötve. (7) compile
(19) integration-test
– A cél végrehajtásának eredményeként törlésre kerülnek a projekt (8) process-classes
munkakönyvtárából az összeállítás során a Maven által létrehozott (20) post-integration-test
(9) generate-test-sources
állományok. (21) verify
(10) process-test-sources

Lásd: Lifecycles Reference (11) generate-test-resources (22) install
https://maven.apache.org/ref/current/maven-core/lifecycles.html (12) process-test-resources (23) deploy

42 44
Életciklusok: a default életciklus (2) Hivatkozás tulajdonságokra (2)
● Az alapértelmezett kötések ejb, jar, rar és ●
Ilyen módon hivatkozható bármely, a
war csomagolás esetén: properties elemben definiált tulajdonság.
– Lásd: Plugin Bindings for default Lifecycle – Példa:
Reference <properties>
<properties>
https://maven.apache.org/ref/current/maven-core/d <company.name>unideb</company.name>
<company.name>unideb</company.name>
efault-bindings.html </properties>
</properties>
process-resources resources:resources ...
...
compile compiler:compile ${company.name}
${company.name}
process-test-resources resources:testResources
test-compile compiler:testCompile
test surefire:test
package ejb:ejb / jar:jar /
rar:rar / war:war
install install:install
45 47
deploy deploy:deploy

Hivatkozás tulajdonságokra (1) Függőségek kezelése


● A ${x} formájú hivatkozások helyettesítése a POM-ban. ●
A Maven a Maven Artifact Resolver könyvtárat
– ${env.név} formájú hivatkozások helyettesítése a megfelelő nevű használja a függőségek kezeléséhez.
környezeti változó értékével.
● Például ${env.PATH} a PATH környezeti változó értékét szolgáltatja. – Lásd: https://maven.apache.org/resolver/
– A hivatkozásban megadható Java rendszertulajdonság neve.
● Példa: ${java.home}, ${line.separator}
– ${project.x} formájú hivatkozások helyettesítése a POM megfelelő
elemének értékével. Csak egyszerű típusú elemekhez használható!
● Példa: ${project.groupId}, ${project.artifactId}, $
{project.url}, ${project.build.outputDirectory}
– ${settings.x} formájú hivatkozások helyettesítése a
settings.xml állomány megfelelő elemének értékével.

46 48
Függőségek megadása (1) Függőségek megadása (3)
<dependencies>
<dependencies> ● scope: a függőség hatáskörét tartalmazza, lehetővé teszi a különböző összeállítási
<dependency>
<dependency> folyamatokhoz (például fordítás, tesztelés) szükséges classpath meghatározását és a
<groupId>groupId</groupId>
<groupId>groupId</groupId> tranzitivitás korlátozását, lehetséges értékei:
<artifactId>artifactId</artifactId>
<artifactId>artifactId</artifactId> – compile: minden classpath tartalmazza a függőséget, a függő projekteknek is függősége lesz (ez
<version>version</version>
<version>version</version> az alapértelmezés)
<classifier>classifier</classifier>
<classifier>classifier</classifier> – provided: a függőséget a futtató környezet (például a JDK) biztosítja, csak a fordításhoz használt
<type>type</type>
<type>type</type> classpath tartalmazza, nem tranzitív
<optional>false|true</optional>
<optional>false|true</optional> – runtime: a függőség csak a végrehajtáshoz szükséges (a programtesztek végrehajtásánál is
<scope>compile|provided|runtime|system|test</scope>
<scope>compile|provided|runtime|system|test</scope> rendelkezésre áll)
<systemPath>path</systemPath>
<systemPath>path</systemPath> – system: a függőséget nem egy tároló szolgáltatja, hanem a lokális állományrendszerben található
<exclusions>
<exclusions> – test: a függőség csak a programtesztek fordításához és végrehajtásához áll rendelkezésre, nem
<exclusion>
<exclusion> tranzitív
<groupId>groupId</groupId>
<groupId>groupId</groupId> – import: kizárólag pom típusú függőségekhez adható meg a dependencyManagement részben,
<artifactId>artifactId</artifactId>
<artifactId>artifactId</artifactId> egy ilyen függőség kicserélésére kerül a POM-ja dependencyManagement részének függőségeire
</exclusion>
</exclusion>
...

Lásd: Introduction to the Dependency Mechanism – Dependency Scope
...
</exclusions> https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html
</exclusions> #Dependency_Scope
</dependency>
</dependency>
...
...
</dependencies>
</dependencies> 49 51

Függőségek megadása (2) Függőségek megadása (4)


● groupId, artifactId, version: a függőség Maven ● systemPath: system hatáskörű függőséghez
koordinátáit tartalmazzák
megengedett és kötelező
● classifier: az egy projekt által létrehozott termékek
megkülönböztetésére szolgál – A függőség abszolút elérési útvonalát tartalmazza,
– Tipikus értéke például a javadoc és sources. mint például:
● type: a függőség típusát tartalmazza (alapértelmezés: jar)
● <systemPath>${java.home}/lib/jfxrt.jar
</systemPath>
– A típus meghatározza a termék állománynév kiterjesztését és
csomagolását, valamint (opcionálisan) az osztályozót is. ● exclusions: a kizárandó függőségek
– Lásd: Default Artifact Handlers Reference
https://maven.apache.org/ref/current/maven-core/artifact-handlers.html megadására szolgál
● optional: a függőség opcionális-e (alapértelmezés: false)

50 52
Függőségek megadása (5) Verziószámok (2)
● Példa system hatáskörű függőségre: JavaFX ●
Példa verziószámokra:
használata JDK7 esetén – 1.2
<dependency>
<dependency> – 4.8.2
<groupId>com.oracle</groupId>
<groupId>com.oracle</groupId>
<artifactId>javafx</artifactId>
<artifactId>javafx</artifactId> – 1.6.0-alpha2
<version>2.2</version>
<version>2.2</version>
<scope>system</scope>
<scope>system</scope> – 1.0-beta9
<systemPath>${java.home}/lib/jfxrt.jar</systemPath>
<systemPath>${java.home}/lib/jfxrt.jar</systemPath>
</dependency>
</dependency> ●
A verziószámok komponensekre történő
bontása a '.' és '-' karaktereknél, valamint
a számjegyek és betűk közötti átmeneteknél.

53 55

Verziószámok (1) Verziószámok (3)


● A verziószámok p.q.r-s alakúak, ahol ●
Rendezés értelmezése a verziószámokon
– p a főverzió (major version), (kiterjesztés a szabványos alaktól eltérő formájú
– q az alverzió (minor version), verziószámokra is).
– r inkrementális verzió (incremental version), – A rendezés komponensenként történik, balról jobbra
– s build szám (build number) vagy minősítő (qualifier). haladva.
● Minősítők: alpha/a, beta/b, milestone/m, rc/cr,

A csak számjegyekből áll komponensek rendezése numerikusan
történik.
snapshot, ‹üres sztring›/final/ga, sp
– Példa verziószámok rendezésére:
– Felsorolás a rendezésnek megfelelő sorrendben (növekvő sorrend).
● 1.0 < 1.5 < 1.10 < 1.10.1 < 2.0
– A 2019. szeptemberében kiadott 3.6.2 verziótól kezdve a release
minősítő is használható az ‹üres sztring›/final/ga megfelelőjeként.
● 1.0-alpha1 < 1.0-beta1 < 1.0-beta2 < 1.0-rc1 < 1.0 <
1.0-sp1

54 56
Verziószámok (4) Verzió követelmények (1)

Verziószámok összehasonlításához használjuk a ●
Függőségekben verziószám helyett megadható
következő parancsot: verziótartomány.
– Linux: java -jar $M2_HOME/lib/maven-artifact- – Az alábbi formák mindegyike támogatott: (a,b), (a,b],
*.jar [a,b), [a,b]
– Windows: java -jar %M2_HOME%\lib\maven- ●
A matematikában az intervallumoknál használt jelölés átvétele.
artifact-*.jar ●
Elhagyható az alsó és felső határ, előbbire az alapértelmezés

A programnak két verziószámot kell megadni „negatív végtelen”, utóbbira „pozitív végtelen”.
parancssor argumentumokként. – Megadható tartományok egy vessző karakterekkel
elválasztott listája is (a tartományok unióját jelent).

Lásd: POM Reference – Version Order Testing -
Példa: (,1.0),(1.0,)
https://maven.apache.org/pom.html#Version_Order_Te

sting
57 59

Verziószámok (5) Verzió követelmények (2)



Lásd még: ●
Például az alábbi függőség esetén a JUnit
– POM Reference – Version Order Specification bármely olyan verziója elfogadható, melynek v
https://maven.apache.org/pom.html#Version_Order verziószámára teljesül, hogy 3.8 ≤ v < 4.0.
_Specification
– org.apache.maven.artifact.versioning.C <dependency>
<dependency>
<groupId>junit</groupId>
<groupId>junit</groupId>
omparableVersion <artifactId>junit</artifactId>
<artifactId>junit</artifactId>
https://maven.apache.org/ref/current/maven-artifact/ <version>[3.8,4.0)</version>
<version>[3.8,4.0)</version>
apidocs/org/apache/maven/artifact/versioning/Com <scope>test</scope>
<scope>test</scope>
parableVersion.html </dependency>
</dependency>
https://github.com/apache/maven/blob/master/mave
n-artifact/src/main/java/org/apache/maven/artifact/v
ersioning/ComparableVersion.java
58 60
Verzió követelmények (3) Tranzitív függőségek (2)
● Ha egy függőséghez a version elemben ●
Az alábbi táblázat szemlélteti a függőségek
egyetlen verziószám szerepel, akkor a Maven tranzitív öröklődését.
azt csupán ajánlásnak tekinti, melyet szükség – Az A projekt egy a bal oldali oszlopban feltüntetett
esetén tetszőleges verzióval helyettesíthet. hatáskörű B függőségének egy a felső sorban
– Adott verzió kényszerítése az alábbi módon feltüntetett hatáskörű C függősége a sor és oszlop
lehetséges: metszéspontjában szereplő hatáskörű függősége
egyben A-nak is.
<dependency>
<dependency> compile provided runtime test
<groupId>junit</groupId>
<groupId>junit</groupId> compile compile - runtime -
<artifactId>junit</artifactId>
<artifactId>junit</artifactId> provided provided - provided -
<version>[4.12]</version>
<version>[4.12]</version> runtime runtime - runtime -
<scope>test</scope>
<scope>test</scope>
</dependency> test test - test -
</dependency>
61 63

Tranzitív függőségek (1) Tranzitív függőségek (3)



Ha B függősége A-nak, C pedig B-nek, akkor azt ● Az alábbi példában a hsqldb termék a
mondjuk, hogy C tranzitív függősége A-nak. project-A projektnek is implicit módon

A Maven automatikusan kezeli a tranzitív runtime hatáskörű függősége.
függőségeket. <project
<project xmlns=
xmlns= <project
<project xmlns=
xmlns=
"http://maven.apache.org/POM/4.0.0">
"http://maven.apache.org/POM/4.0.0"> "http://maven.apache.org/POM/4.0.0">
"http://maven.apache.org/POM/4.0.0">
– Képes a tranzitív függőségek kapcsán felmerülő <modelVersion>4.0.0</modelVersion>
<modelVersion>4.0.0</modelVersion>
<groupId>my</groupId>
<modelVersion>4.0.0</modelVersion>
<modelVersion>4.0.0</modelVersion>
<groupId>my</groupId>
<groupId>my</groupId> <groupId>my</groupId>
konfliktusok kezelésére. <artifactId>project-A</artifactId>
<artifactId>project-A</artifactId> <artifactId>project-B</artifactId>
<artifactId>project-B</artifactId>
<packaging>jar</packaging>
<packaging>jar</packaging> <packaging>jar</packaging>
<packaging>jar</packaging>

Lásd: Introduction to the Dependency <version>1.0</version>
<version>1.0</version>
<dependencies>
<dependencies>
<version>1.0</version>
<version>1.0</version>
<dependencies>
<dependencies>
Mechanism – Transitive Dependencies <dependency>
<dependency>
<groupId>my</groupId>
<groupId>my</groupId>
<dependency>
<dependency>
<groupId>org.hsqldb</groupId>
<groupId>org.hsqldb</groupId>
https://maven.apache.org/guides/introduction/intr <artifactId>project-B</artifactId>
<artifactId>project-B</artifactId>
<version>1.0</version>
<version>1.0</version>
<artifactId>hsqldb</artifactId>
<artifactId>hsqldb</artifactId>
<version>2.5.1</version>
<version>2.5.1</version>
oduction-to-dependency-mechanism.html#Transi <scope>compile</scope>
<scope>compile</scope> <scope>runtime</scope>
<scope>runtime</scope>
tive_Dependencies </dependency>
</dependency>
</dependencies>
</dependencies>
</dependency>
</dependency>
</dependencies>
</dependencies>
62 ...
... ...
... 64
</project>
</project> </project>
</project>
Tranzitív függőségek kizárása (1) Tranzitív függőségek kizárása (3)

Tranzitív függőségek kizárására szolgál az ●
Példa: (folytatás)
exclusions elem. – A httpclient függőség hozzáadása a commons-
– Konfliktus esetén szükséges lehet, de hasznos logging függősége kizárásával:
felesleges függőségek kizárásához is. <dependencies>
<dependencies>
<dependency>

Lásd: Optional Dependencies and Dependency <dependency>
<groupId>org.apache.httpcomponents</groupId>
<groupId>org.apache.httpcomponents</groupId>
Exclusions <artifactId>httpclient</artifactId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
<version>4.5.13</version>
https://maven.apache.org/guides/introduction/in <scope>compile</scope>
<scope>compile</scope>
troduction-to-optional-and-excludes-dependenci <exclusions>
<exclusions>
es.html <exclusion>
<exclusion>
<groupId>commons-logging</groupId>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusion>
</exclusions>
</exclusions>
65 67
</dependency>
</dependency>

Tranzitív függőségek kizárása (2) Tranzitív függőségek kizárása (4)



Példa: ●
Példa: (folytatás)
– Az Apache HttpClient programkönyvtár – A commons-logging-ot helyettesítő függőségek
alapértelmezésben az Apache Commons Logging hozzáadása:
programkönyvtárat használja naplózáshoz. A <dependency>
<dependency>
következő POM részlet azt szemlélteti, hogyan <groupId>org.slf4j</groupId>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<artifactId>jcl-over-slf4j</artifactId>
helyettesíthető a Commons Logging az SLF4J-vel. <version>1.7.30</version>
<version>1.7.30</version>

Lásd: <scope>runtime</scope>
<scope>runtime</scope>
</dependency>
</dependency>
https://hc.apache.org/httpcomponents-client-4.5.x/logging
.html <dependency>
<dependency>
<groupId>org.tinylog</groupId>
<groupId>org.tinylog</groupId>
<artifactId>slf4j-tinylog</artifactId>
<artifactId>slf4j-tinylog</artifactId>
<version>2.2.1</version>
<version>2.2.1</version>
<scope>runtime</scope>
<scope>runtime</scope>
</dependency>
</dependency>
66 ...
... 68
</dependencies>
</dependencies>
Alapértelmezések szolgáltatása
Tranzitív függőségek kizárása (5)
függőségekhez (2)

Függőség összes tranzitív függőségének ●
Példa:
kizárása:
<dependencyManagement>
<dependencyManagement>
<dependency>
<dependency> <dependencies>
<dependencies>
...
... <dependency>
<dependency>
<exclusions>
<exclusions> <groupId>org.jsoup</groupId>
<groupId>org.jsoup</groupId>
<exclusion>
<exclusion> <artifactId>jsoup</artifactId>
<artifactId>jsoup</artifactId>
<groupId>*</groupId>
<groupId>*</groupId> <version>1.13.1</version>
<version>1.13.1</version>
<artifactId>*</artifactId>
<artifactId>*</artifactId> <scope>test</scope>
<scope>test</scope>
<exclusion>
<exclusion> </dependency>
</dependency>
</exclusions>
</exclusions> ...
...
</dependency>
</dependency> </dependencies>
</dependencies>
</dependencyManagement>
</dependencyManagement>

69 71

Alapértelmezések szolgáltatása Alapértelmezések szolgáltatása


függőségekhez (1) függőségekhez (3)
● A felső szintű dependencyManagement elem egyetlen ●
Példa (folytatás):
dependencies elemet tartalmazhat.
– Ilyenkor a projektben és a gyerek projektekben a
– A benne hivatkozott termékek a felső szintű dependencies elemtől
eltérően nem lesznek automatikusan a projekt függőségei! termékre függőségként való hivatkozásnál
– A dependency elemek itt csupán alapértelmezéseket
elhagyható a verziószám és a hatáskör is,
(alapértelmezett verziószámokat és/vagy hatásköröket) szolgáltatnak mindkettőt a dependencyManagement elem
a megnevezett termékekhez, mely lehetővé teszi, hogy a projektben szolgáltatja:
és a gyermek projektekben ezen információk megadása nélkül
lehessen függőségként hivatkozni rájuk. <dependencies>
<dependencies>

Lásd: Introduction to the Dependency Mechanism – <dependency>
<dependency>
<groupId>org.jsoup</groupId>
<groupId>org.jsoup</groupId>
Dependency Management <artifactId>jsoup</artifactId>
https://maven.apache.org/guides/introduction/introduction-to-d <artifactId>jsoup</artifactId>
</dependency>
</dependency>
ependency-mechanism.html#Dependency_Management ...
...
</dependencies>
</dependencies>
70 72
Snapshot verziók Snapshot és release termékek (2)
● Verziószámok végén a SNAPSHOT utótaggal jelezhető, ●
Általában külön tárolókat használnak a
hogy a projekt aktív fejlesztés alatt áll. snapshot és a release termékek
– Példa: 1.0-SNAPSHOT, SNAPSHOT kihelyezéséhez.

A termék távoli tárolóba való kihelyezésekor a ●
De akár ugyanaz a tároló szolgáltathat
SNAPSHOT utótag kifejtése az aktuális rendszeridővel snapshot és release termékeket is.
(UTC idő használata).
– Lásd a repositories/repository és a
– Például közép-európai idő szerint 2019. január 28-án
21:58:34-kor a fenti verziószám esetén a helyettesítés pluginRepositories/pluginRepository
eredménye az 1.0-20190128.205834-N verziószám. elemekben rendelkezésre álló releases és

N értéke 1-ről indul, minden további kihelyezésnél eggyel nő. snapshots elemeket.

73 75

Snapshot és release termékek (1) Öröklés (1)



A snapshot verziószámokkal ellátott termékeket ●
Olyan projekt lehet szülő, melynél a
snapshot termékeknek nevezik. csomagolás módja pom:
– A fejlesztés adott pillanatbeli állapotát tükrözik. <project
<project xmlns="http://maven.apache.org/POM/4.0.0">
xmlns="http://maven.apache.org/POM/4.0.0">
– Csak fejlesztés közben használatosak. <modelVersion>4.0.0</modelVersion>
<modelVersion>4.0.0</modelVersion>
<groupId>hu.unideb.inf</groupId>
<groupId>hu.unideb.inf</groupId>
– Az újabb és újabb snapshot verziók hamar elavulttá <artifactId>parent</artifactId>
<artifactId>parent</artifactId>
teszik őket. <packaging>pom</packaging>
<packaging>pom</packaging>
<version>1.0</version>
<version>1.0</version>

A többi terméket release terméknek nevezik. ...
...
</project>
</project>
– Ezek stabilnak tekinthető termékek.
– Hosszabb időn keresztül használatosak.

74 76
Öröklés (2) Többmodulos projektek (1)

Szülő projekt megadása gyerek projektben: ●
A többmodulos projektek, más néven aggregátor
projektek moduloknak nevezett projektekből állnak.
<project
<project xmlns="http://maven.apache.org/POM/4.0.0">
xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<modelVersion>4.0.0</modelVersion>
– A többmodulos projektek esetén a csomagolás módja
<parent>
<parent> kötelezően pom.
<groupId>hu.unideb.inf</groupId>
<groupId>hu.unideb.inf</groupId> ●
A modulok csomagolása már tetszőleges lehet, ezek is lehetnek
<artifactId>parent</artifactId>
<artifactId>parent</artifactId> akár többmodulos projektek.
<version>1.0</version>
<version>1.0</version>
</parent>
</parent>
– A modulok felsorolása a modules elemben történik.
<artifactId>child</artifactId>
<artifactId>child</artifactId> ● Az egyes module elemek a modulok könyvtárainak relatív
<packaging>jar</packaging>
<packaging>jar</packaging> elérési útvonalát tartalmazzák.
...
... ●
Az aggregátor projekt általában alkönyvtárként tartalmazza a
</project>
</project> modulokat.

77 79

Öröklés (3) Többmodulos projektek (2)



A gyerek projekt a szülő projekthez tartozó POM-ból ●
Ha az aggregátor projekt főkönyvtárában
automatikusan örököl bizonyos beállításokat az effektív kezdeményezzük életciklus fázisok vagy
POM előállítása során.
bővítmény-célok végrehajtását, akkor a
– Bizonyos elemek csak akkor lesznek átvéve a szülő POM-ból,
ha azok a gyerek POM-ban nincsenek explicit módon megadva. végrehajtás minden egyes modulban
● Így történik például a ciManagement, contributors, developers, megtörténik.
groupId, issueManagement, licenses, mailingLists,
organization, scm, url és version elemek kezelése. – A Maven automatikusan meghatározza a modulok
– Bizonyos elemek esetén a tartalom kombinálása történik, ha a sorrendjét (a modulok függhetnek egymástól).
szülő és a gyerek POM-ban is szerepelnek.
● Így történik például a plugins és repositories elemek kezelése.

78 80
Többmodulos projekt létrehozása:
Többmodulos projektek (3)
m2eclipse

Az aggregátor projekt és a modulok szülő- ●
Hozzuk létre az aggregátor projektet: File → New → Project… →
Maven → Maven Project
gyerek kapcsolatban lehetnek egymással, – Legyen bekapcsolva a Create a simple project (skip archetype selection)
ilyenkor öröklés is történik. checkbox!
A csomagolás módjának pom-ot válasszunk a Packaging mezőben.
Ez azonban nem kötelező!


– Törölhető az aggregátor projektben felesleges, de automatikusan
– Egy többmodulos projekt tipikusan alapbeállításokat létrehozott src/ alkönyvtár.
szolgáltat a POM-ban a modulok számára. ●
Egy modul létrehozásához válasszuk ezt: File → New → Project…
→ Maven → Maven Module
– A Parent Project mezőben adható meg/választható ki, hogy melyik
projekt modulja legyen.
– A modul automatikusan gyermeke is lesz az aggregátor projektnek.

81 83

Többmodulos projekt létrehozása:


Többmodulos projekt szervezése
NetBeans
aggregator/ ●
Az aggregátor projekt ●
Hozzuk létre az aggregátor projektet: File → New
POM-ja: Project
module-a/
<project
<project xmlns=
xmlns= – Válasszuk a POM Project opciót a Maven kategóriából.
"http://maven.apache.org/POM/4.0.0">
"http://maven.apache.org/POM/4.0.0">
src/ <modelVersion>4.0.0</modelVersion>
<modelVersion>4.0.0</modelVersion>
<groupId>hu.unideb.inf</groupId>
<groupId>hu.unideb.inf</groupId>

Egy modul létrehozásához a teendők:
<artifactId>aggregator</artifactId>
<artifactId>aggregator</artifactId>
pom.xml <packaging>pom</packaging>
<packaging>pom</packaging> – A Projects panelen kattintsunk az egér jobb gombjával
<version>1.0</version>
<version>1.0</version>
<modules>
<modules> az aggregátor projekt neve alatt a Modules-ra és
module-b/ <module>module-a</module>
<module>module-a</module>
<module>module-b</module>
válasszuk a Create New Module… pontot.
<module>module-b</module>
</modules>
</modules>
...
...
– A modul automatikusan gyermeke is lesz az
src/
</project>
</project> aggregátor projektnek.
pom.xml

pom.xml 82 84
Többmodulos projekt létrehozása:
Profilok (2)
IntelliJ IDEA

Hozzuk létre az aggregátor projektet: File → New → ●
Megadásuk az alábbi módon történhet a POM-
Project… → Maven ban:

Egy modul létrehozásához a teendők: File → New → <profiles>
<profiles>
Module… <profile>
<profile>
– Válasszuk ki az aggregátor projektet az Add as a module to <id>azonosító</id>
<id>azonosító</id>
mező melletti gombra kattintva. <activation>aktiválási feltétel(ek)</activation>
<activation>aktiválási feltétel(ek)</activation>
profil-specifikus
profil-specifikus beállítások
beállítások
– Az aggregátor projekt kiválasztható a modul szülőjeként is a </profile>
</profile>
Parent mező melletti gombra kattintva. <profile>
<profile>
<id>azonosító</id>
<id>azonosító</id>

Lásd: Maven – Configuring a multi-module Maven project <activation>aktiválási feltétel(ek)</activation>
<activation>aktiválási feltétel(ek)</activation>
https://www.jetbrains.com/help/idea/maven-support.html# profil-specifikus
profil-specifikus beállítások
beállítások
maven_multi_module </profile>
</profile>
...
...
</profiles>
</profiles>
85 87

Profilok (1) Profilok (3)



A profilok a POM olyan opcionális beállításokat ●
Profilokban beállítások megadásához használható elemek:
tartalmazó részei, amelyek csak aktiválás – build
esetén kerülnek felhasználásra. – dependencies
– dependencyManagement
– Lehetővé teszik a POM futásidejű módosítását. – distributionManagement
– Hasznosak például a projekt eltérő környezetekben – modules
történő használata esetén. – pluginRepositories

Különböző környezetekhez szolgáltathatnak testreszabott – properties
beállításokat.
– reporting
– repositories

86 88
Profilok (4) Profil aktiválás: explicit

A Maven Help Plugin szolgáltat információkat a ● Profilok aktiválásához használjuk a -P vagy --
profilokról. activate-profiles parancssori opciót, amely után
profilok azonosítóit kell megadni (egynél több profil
– Az mvn help:all-profiles parancs az összes esetén ',' karakterekkel elválasztva).
rendelkezésre álló profilt, az mvn help:active- – Ha egy profil azonosítója elé a '!' vagy a '-' karaktert írjuk,
profiles parancs pedig az összes aktív profilt akkor az a profil kikapcsolását jelenti.
jeleníti meg. ● Figyelem: a '!' karakternek a Bash parancsértelmezőben speciális
jelentése van, ezért megfelelően le kell védeni!
– Példa (a profile-1 profil aktiválása és a profile-2 profil
kikapcsolása):
● mvn help:active-profiles -P profile-1,-profile-2

89 91

Profil aktiválás: alapértelmezetten


Profil aktiválás
aktív profil

Profil aktiválása történhet a felhasználó explicit kérésére és ●
Az alábbi módon megadott profil alapértelmezetten aktív:
meghatározott feltételek teljesülése esetén automatikusan. – <profile>
– Automatikus aktiválás történhet az alábbiak alapján: <id>default</id>

Rendszertulajdonságok és környezeti változók értéke <activation>

Operációs rendszer <activeByDefault>true</activeByDefault>

JDK verziószám
</activation>
...

Állományok létezése és hiánya
</profile>
– Az automatikus aktiválás feltételeinek megadására szolgálnak az
activation elemben a file, jdk, os és property elemek.
– Explicit aktiválás és nem alapértelmezetten aktív profil(ok)
automatikus aktiválása esetén az ilyen profilok ki lesznek
● Ha közülük több is megjelenik egy activation elemben, akkor
bármelyik feltételeinek teljesülése aktiválást eredményez (logikai vagy
kapcsolva!
kapcsolat). ●
Kivéve akkor, ha explicit módon kérjük az aktiválásukat.

90 92
Profil aktiválás: Profil aktiválás: operációs rendszer
rendszertulajdonságok specifikus (1)
● Aktiválás akkor, ha a debug ● Aktiválás akkor, ha a debug ● Az os elem szolgál profilok az operációs rendszer alapján történő aktiválására:
rendszertulajdonság be van állítva, rendszertulajdonság nincs beállítva: – <activation>
értéke tetszőleges: – <activation>
<os>
<arch>...</arch>
– <activation> <property> <name>...</name>
<property> <name>!debug</name> <family>...</family>
<name>debug</name>
</property> <version>...</version>
</property> </os>
</activation>
</activation>
</activation>
– arch: operációs rendszer architektúra (például amd64, x86, …)
● Aktiválás akkor, ha az environment.type rendszertulajdonság értéke
production: – name: operációs rendszer neve (például linux, windows xp, …)
– <activation> – family: operációs rendszer-család (mac, unix, windows)
<property> – version: az operációs rendszer verziószáma (pontos verziószám, verziótartomány nem
<name>environment.type</name> használható)
<value>production</value> ● Negáció kifejezéséhez az arch, name, family és version elemekben is használható
</property>
</activation> a '!' karakter (például <family>!windows</family>).

93 95

Profil aktiválás: operációs rendszer


Profil aktiválás: környezeti változók
specifikus (2)
Aktiválás akkor, ha a DEBUG környezeti Aktiválás akkor, ha a DEBUG

változó be van állítva, értéke


környezeti változó nincs beállítva:



Példa:
tetszőleges: – <activation> <activation>
<activation>
– <activation> <property>
<property> <os>
<os>
<name>!env.DEBUG</name> <name>linux</name>
<name>env.DEBUG</name>
</property>
<name>linux</name>
</property> <arch>amd64</arch>
<arch>amd64</arch>
</activation> </activation>
</os>
</os>
● Aktiválás akkor, ha az ENV környezeti ● Aktiválás akkor, ha az ENV környezeti </activation>
</activation>
változó értéke test: változó értéke nem test:
– <activation> – <activation>
<property> <property> <activation>
<activation>
<name>env.ENV</name> <name>env.ENV</name> <os>
<os>
<value>test</value> <value>!test</value>
</property> </property>
<name>windows
<name>windows xp</name>
xp</name>
</activation> </activation> <version>5.1</version>
<version>5.1</version>
</os>
</os>
</activation>
</activation>
94 96
Profil aktiválás: JDK Profil aktiválás: állományok (2)
● A jdk elem szolgál profilok a JDK verziószáma ●
Példa:
alapján történő aktiválására.
<activation>
<activation>
– Az elemben megadható verziószám kezdőszelet vagy <file>
<file>
verziótartomány is. <exists>${user.home}/.myTool/license.txt</exists>
<exists>${user.home}/.myTool/license.txt</exists>
</file>
</file>
● Verziószám kezdőszelet esetén negáció, ha az első karakter '!'. </activation>
</activation>

Példa: ●
Példa:
<profile> <profile> <activation>
<activation>
<id>jdk8</id> <id>pre-jdk8</id> <file>
<file>
<activation> <activation> <missing>${basedir}/.git</missing>
<missing>${basedir}/.git</missing>
<jdk>1.8</jdk> <jdk>[,1.8)</jdk> </file>
</file>
</activation> </activation>
</activation>
</activation>
... ...
</profile> </profile>
97 99

Profil aktiválás: állományok (1) Bővítmények használata (1)


● A file elem segítségével adott állományok <build>
<build>
létezéséhez és/vagy hiányához köthető az <plugins>
<plugins>
<plugin>
<plugin>
aktiválás. <groupId>groupId</groupId>
<groupId>groupId</groupId>
– Az exists és missing elemekben egy állomány <artifactId>artifactId</artifactId>
<artifactId>artifactId</artifactId>
<version>version</version>
<version>version</version>
elérési útvonalát kell megadni. <configuration>beállítások</configuration>
<configuration>beállítások</configuration>
<dependencies>függőségek</dependencies>
<dependencies>függőségek</dependencies>
<activation>
<activation> <executions>cél végrehajtások</executions>
<executions>cél végrehajtások</executions>
<file>
<file> <extensions>false|true</extensions>
<extensions>false|true</extensions>
<exists>...</exists>
<exists>...</exists> <inherited>false|true</inherited>
<inherited>false|true</inherited>
<missing>...</missing>
<missing>...</missing> </plugin>
</plugin>
</file>
</file> ...
...
</activation>
</activation> </plugins>
</plugins>
...
...
98 </build>
</build> 100
Bővítmények használata (2) Bővítmények használata (4)
● A plugin elemben rendelkezésre álló elemek: ● Az executions elem:
– groupId, artifactId, version: a bővítmény Maven <plugin>
<plugin>
koordinátái <groupId>...</groupId>
<groupId>...</groupId>
<artifactId>...</artifactId>
<artifactId>...</artifactId>
– configuration: konfigurációs paramétereket tartalmaz a <version>...</version>
<version>...</version>
<executions>
<executions>
célok végrehajtásához <execution>
<execution>

Az XML séma a tartalomra nem tesz semmilyen megszorítást. <id>azonosító</id>
<id>azonosító</id>
<phase>életciklus fázis</phase>
<phase>életciklus fázis</phase>

Ezek a konfigurációs paraméterek valamennyi bővítmény-célra <goals>
<goals>
vonatkoznak. <goal>cél
<goal>cél11</goal>
</goal>
...
...
– dependencies: a bővítményhez szükséges függőségeket <goal>cél
<goal>célnn</goal>
</goal>
tartalmazza </goals>
</goals>
<inherited>false|true</inherited>
<inherited>false|true</inherited>

A függőségek megadása a korábban tárgyalt formában történik. <configuration>beállítások</configuration>
<configuration>beállítások</configuration>
</execution>
</execution>
...
...
</executions>
</executions>
101 ...
... 103
</plugin>
</plugin>

Bővítmények használata (3) Bővítmények használata (5)


● A plugin elemben rendelkezésre álló elemek ● Az execution elemben rendelkezésre álló elemek:
(folytatás): – id: a végrehajtás egyedi azonosítója
– executions: lehetővé teszi bővítmény-célok – phase: az életciklus fázis neve, melyhez hozzá kell kötni a cél(ok)
végrehajtását
végrehajtásának hozzákötését életciklus fázisokhoz, így
az összeállítási folyamat testreszabását (részletesen – goals/goal: a végrehajtandó bővítmény-célok neveit tartalmazzák
lásd később) – inherited: azt jelzi, hogy öröklés során át kell-e venni az
execution elemet (alapértelmezés: true)
– extensions: azt jelzi, hogy be kell-t tölteni a bővítmény
kiterjesztéseit (alapértelmezés: false) – configuration: konfigurációs paramétereket tartalmaz a goal
elemekben felsorolt célok végrehajtásához
– inherited: azt jelzi, hogy öröklés során át kell-e venni ● Általa finomítható a plugin/configuration elemben megadott
a bővítmény beállításait (alapértelmezés: true) konfiguráció.

102 104
Bővítmények használata (6) Bővítmények használata (8)
● Példa az executions elem használatára: <build>
<build>
<plugins>
<plugins>
<build>
<build> <plugin>
<plugin>
<plugins>
<plugins> <groupId>org.projectlombok</groupId>
<groupId>org.projectlombok</groupId>
<plugin>
<plugin> <artifactId>lombok-maven-plugin</artifactId>
<artifactId>lombok-maven-plugin</artifactId>
<groupId>org.apache.maven.plugins</groupId>
<groupId>org.apache.maven.plugins</groupId> <version>1.18.16.0</version>
<artifactId>maven-assembly-plugin</artifactId>
<version>1.18.16.0</version>
<artifactId>maven-assembly-plugin</artifactId> <executions>
<version>3.3.0</version>
<version>3.3.0</version>
<executions>
<executions> <execution>
<execution>
<executions>
<execution>
<execution> <goals>
<goals>
<id>make-assembly</id>
<id>make-assembly</id> <goal>delombok</goal>
<goal>delombok</goal>
<phase>package</phase>
<phase>package</phase> </goals>
</goals>
<goals>
<goals> <configuration>
<configuration>
<goal>single</goal>
<goal>single</goal> <verbose>true</verbose>
<verbose>true</verbose>
</goals>
</goals> </configuration>
<configuration> </configuration>
<configuration> </execution>
<descriptorRefs>
<descriptorRefs>
</execution>
<descriptorRef>jar-with-dependencies</descriptorRef>
<descriptorRef>jar-with-dependencies</descriptorRef>
</executions>
</executions>
</descriptorRefs>
</descriptorRefs> </plugin>
</plugin>
</configuration>
</configuration> </plugins>
</plugins>
</execution>
</execution> </build>
</build>
</executions>
</executions>
105 107
</plugin>
</plugin>
...
...

Bővítmények használata (7) Bővítmények konfigurálása (1)



Egy bővítmény-célhoz tartozhat egy alapértelmezett ●
Példa:
életciklus fázis, ekkor az execution elemben nem – Exec Maven Plugin
szükséges megadni a phase elemet. https://www.mojohaus.org/exec-maven-plugin/
– Például a lombok-maven-plugin bővítmény delombok ● Az exec:java céllal hajtható végre egy Java osztály az
célja alapértelmezésben a generate-sources életciklus aktuális Java virtuális gépben.
fázishoz van hozzákötve. (Lásd a következő oldalon.)

Ha nincs alapértelmezett életciklus fázis, akkor a
phase elem hiányában a bővítmény-cél nem kerül
végrehajtásra!

106 108
Bővítmények konfigurálása (2) Bővítmények konfigurálása (4)

Konfigurációs beállítások megadása a ●
Konfigurációs beállítások megadása a
configuration elemben: parancssorban:
<build>
<build> $$ mvn
mvn exec:java
exec:java -Dexec.mainClass=pkg.Main
-Dexec.mainClass=pkg.Main \\
<plugins>
<plugins>
<plugin>
-Dexec.args="-o
-Dexec.args="-o out.txt"
out.txt"
<plugin>
<groupId>org.codehaus.mojo</groupId>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.0.0</version>
<version>3.0.0</version>
<configuration>
<configuration>
<mainClass>pkg.Main<mainClass>
<mainClass>pkg.Main<mainClass>
<commandlineArgs>
<commandlineArgs>
-o
-o out.txt
out.txt
</commandlineArgs>
</commandlineArgs>
</configuration>
</configuration>
</plugin>
</plugin>
</plugins>
</plugins> 109 111
</build>
</build>

Termékek feltöltése távoli tárolóba


Bővítmények konfigurálása (3)
(1)

Konfigurációs beállítások megadása a ● A deploy életciklus fázisban kerülnek feltöltésre
properties elemben: a termékek a beállításokban adott távoli tárolóba.
<properties>
<properties>
● A POM distributionManagement elemében
<exec.mainClass>pkg.Main</exec.mainClass>
<exec.mainClass>pkg.Main</exec.mainClass>
<exec.args>-o
<exec.args>-o out.txt</exec.args>
out.txt</exec.args>
megadható repository és
</properties>
</properties> snapshotRepository elemek szolgáltatják a
<build>
<build>
<plugins>
<plugins> távoli tároló eléréséhez a beállításokat.
<plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<groupId>org.codehaus.mojo</groupId>
– A repository elem a release termékek tárolóját, a
<artifactId>exec-maven-plugin</artifactId>
<artifactId>exec-maven-plugin</artifactId> snapshotRepository elem pedig értelemszerűen
<version>3.0.0</version>
<version>3.0.0</version>
</plugin>
</plugin>
a snapshot termékek tárolóját adja meg.
</plugins>
</plugins>
</build>
</build>
110 112
Termékek feltöltése távoli tárolóba
Tároló elérési beállítások (1)
(2)
● A repository és snapshotRepository elemek használata: ●
Függőségeket szolgáltató tárolók eléréséhez a
<distributionManagement>
<distributionManagement> felső szintű repositories elemben adhatóak
<repository>
<repository>
<id>azonosító</id>
<id>azonosító</id>
meg beállítások.
<name>név</name>
<name>név</name>
<url>URI</url>
<url>URI</url>
<layout>default|legacy</layout>
<layout>default|legacy</layout>
<uniqueVersion>true|false</uniqueVersion>
<uniqueVersion>true|false</uniqueVersion>
</repository>
</repository>
<snapshotRepository>
<snapshotRepository>
<id>azonosító</id>
<id>azonosító</id>
<name>név</name>
<name>név</name>
<url>URI</url>
<url>URI</url>
<layout>default|legacy</layout>
<layout>default|legacy</layout>
<uniqueVersion>true|false</uniqueVersion>
<uniqueVersion>true|false</uniqueVersion>
</snapshotRepository>
</snapshotRepository>
</distributionManagement>
</distributionManagement> 113 115

Termékek feltöltése távoli tárolóba


Tároló elérési beállítások (2)
(3)
● A repository és snapshotRepository elemekben
megadható elemek: <repositories>
<repositories>
<repository>
<repository>
– id: a tároló egyedi azonosítója <id>azonosító</id>
<id>azonosító</id>
– name: a tároló ember számára olvasható neve <name>név</name>
<name>név</name>
<url>URI</url>
<url>URI</url>
– url: URI a tároló eléréséhez <layout>default|legacy</layout>
<layout>default|legacy</layout>
<releases>
<releases>
– layout: a tároló kialakítása <checksumPolicy>fail|ignore|warn</checksumPolicy>
<checksumPolicy>fail|ignore|warn</checksumPolicy>
● default: a Maven 2.x és 3.x számú verziói által használt kialakítás (ez az <enabled>false|true</enabled>
<enabled>false|true</enabled>
alapértelmezés) <updatePolicy>always|daily|interval:N|never</updatePolicy>
<updatePolicy>always|daily|interval:N|never</updatePolicy>
● legacy: a Maven 1.x számú verzói által használt kialakítás </releases>
</releases>
<snapshots>
<snapshots>
– uniqueVersion: snapshot verzió esetén egy egyedi verziószám <checksumPolicy>fail|ignore|warn</checksumPolicy>
<checksumPolicy>fail|ignore|warn</checksumPolicy>
kerüljön-e előállításra az aktuális rendszeridő felhasználásával <enabled>false|true</enabled>
<enabled>false|true</enabled>
(alapértelmezés: true) <updatePolicy>always|daily|interval:N|never</updatePolicy>
<updatePolicy>always|daily|interval:N|never</updatePolicy>
</snapshots>
</snapshots>
</repository>
</repository>
...
...
114 </repositories>
</repositories> 116
Tároló elérési beállítások (3) Tároló elérési beállítások (5)
● A repository elemben megadható elemek: ● A releases és snapshots elemben
– id: a tároló egyedi azonosítója megadható elemek (folytatás):
– name: a tároló ember számára olvasható neve – updatePolicy: milyen gyakran történjen a
– url: URI a tároló eléréséhez tárolóból frissítés
– layout: a tároló kialakítása ● always: a Maven minden egyes futtatásakor
● default: a Maven 2.x és 3.x számú verziói által használt kialakítás (ez
az alapértelmezés)
● daily: naponta egyszer (ez az alapértelmezés)
● legacy: a Maven 1.x számú verzói által használt kialakítás ● interval:N (ahol N nemnegatív egész szám): N
– releases: release termékek letöltésére vonatkozó előírások percenként
– snapshots: snapshot termékek letöltésére vonatkozó előírások
● never: soha

117 119

Tároló elérési beállítások (4) Tároló elérési beállítások (6)


● A releases és snapshots elemben megadható ●
Bővítményeket szolgáltató tárolókhoz a
elemek: pluginRepositories felső szintű elemet kell
– checksumPolicy: hogyan történjen az ellenőrző összeg használni.
hibák kezelése (a tárolók minden termékhez nyilvántartanak
egy MD5 és/vagy egy SHA-1 ellenőrző összeget) – Az elemben megadható pluginRepository
● fail: hiba elemek tartalma megegyezik a repository
● ignore: figyelmen kívül hagyás elemekével.
● warn: figyelmeztetés (ez az alapértelmezés)
<pluginRepositories>
<pluginRepositories>
– enabled: engedélyezett-e a megfelelő típusú (snapshot vagy <pluginRepository>
<pluginRepository>
release) termékek letöltése a tárolóból (alapértelmezés: true) ...
...
</pluginRepository>
</pluginRepository>
...
...
</pluginRepositories>
</pluginRepositories>
118 120
Függés snapshot termékektől (1) Függés snapshot termékektől (3)

Beállítható, hogy snapshot terméktől való ● Az updatePolicy elem lehetséges értékeinek
függés esetén automatikusan a távoli tárolóban jelentése:
rendelkezésre álló legkésőbbi snapshot verzió – always: a Maven minden futtatáskor ellenőrzi a távoli
kerüljön felhasználásra. tárolót
– A beállítás a repository és pluginRepository
– daily: a Maven minden nap az első futtatáskor ellenőrzi
a távoli tárolót
elemekben rendelkezésre álló snapshots
elemben történik. – interval:N (ahol N nemnegatív egész szám): a Maven
akkor ellenőrzi a tárolót, ha N perc telt el a legutóbbi
<repository>
<repository>
...
...
ellenőrzés óta
<snapshots>
<snapshots>
<enabled>true</enabled>
– never: nincs ellenőrzés
<enabled>true</enabled>
<updatePolicy>frissítési stratégia</updatePolicy>
<updatePolicy>frissítési stratégia</updatePolicy>
</snapshots>
</snapshots>
...
... 121 123
</repository>
</repository>

Függés snapshot termékektől (2) Függés release termékektől (1)



Ha olyan snapshot termékre történik hivatkozás függőségként, ● Release termékek kezeléséhez a snapshot
mely nem áll rendelkezésre a lokális tárolóban, akkor a távoli
tárolóból mindig automatikusan a legkésőbbi snapshot verzió termékeknél tárgyalt módon adható meg az
kerül letöltésre. updatePolicy elem:

Ha egy termék legalább egy snapshot verziója a lokális <repository>
<repository>
tárolóban van, akkor megállapításra kerül, hogy a távoli tároló ...
...
tartalmaz-e későbbi snapshot verziót. <releases>
<releases>
<enabled>true</enabled>
<enabled>true</enabled>
– Ha igen, akkor a legkésőbbi snapshot verzió letöltése a távoli <updatePolicy>frissítési stratégia</updatePolicy>
<updatePolicy>frissítési stratégia</updatePolicy>
tárolóból a lokális tárolóba. </releases>
</releases>
...
...
● Az updatePolicy elemmel szabályozható, hogy mikor </repository>
</repository>
forduljon a Maven a távoli tárolóhoz újabb snapshot verziókért.

122 124
Függés release termékektől (2) Webhely készítése (1)
● Az updatePolicy beállítás release termékek ● A reporting elemben kell megadni azokat a jelentéskészítő-
bővítményeket, melyek által előállított jelentések automatikusan a
esetére való értelmezéséhez az alábbiakat kell webhely részei lesznek:
megjegyezni: – <reporting>
<outputDirectory>elérési útvonal</outputDirectory>
– Minden release termék csak egyszer kerül letöltésre a <plugins>
távoli tárolóból a lokális tárolóba! jelentéskészítő-bővítmények felsorolása (plugin elemek)

Egy release termék akkor sem lesz újra letöltve, ha a távoli </plugins>
tárolóban felülírásra került. <excludeDefaults>false|true</excludeDefaults>
</reporting>
– A never-től különböző updatePolicy beállítás például – outputDirectory: a kimeneti könyvtár elérési útvonala (alapértelmezés:
verziótartományok használata esetén eredményezheti a ${project.build.directory}/site)
tárolóból egy release termék későbbi verzióinak letöltését. – excludeDefaults: az alapértelmezésben előállításra kerülő jelentések
kizárása (alapértelmezés: false)

125 127

Termékek kézi telepítése a lokális


Webhely készítése (2)
tárolóba

Az alábbi parancs végrehajtásával lehetséges: ●
A Maven 3 az alábbi módon is lehetővé teszi a
– mvn install:install-file \ jelentéskészítő-bővítmények megadását:
-Dfile=path \
-DgroupId=groupId \ <build>
<build>
<plugins>
<plugins>
-DartifactId=artifactId \ ...
...
-Dversion=version \ <plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<groupId>org.apache.maven.plugins</groupId>
-Dpackaging=packaging \ <artifactId>maven-site-plugin</artifactId>
<artifactId>maven-site-plugin</artifactId>
-DgeneratePom=true <version>3.9.1</version>
<version>3.9.1</version>
<configuration>
<configuration>

Például olyan JAR állományok esetén használjuk, <reportPlugins>
<reportPlugins>
jelentéskészítő-bővítmények
jelentéskészítő-bővítmények felsorolása
felsorolása (plugin
(plugin elemek)
melyek nem állnak rendelkezésre egyetlen elérhető </reportPlugins>
elemek)
</reportPlugins>
távoli tárolóban sem. </configuration>
</configuration>
</plugin>
</plugin>
...
...
</plugins>
</plugins>
126 </build> 128
</build>
Webhely készítése (3) Webhely testreszabása (2)
project/
● Többmodulos projekt esetén az mvn site parancs
helyett a webhely előállításához az mvn site src/

site:stage parancsot kell végrehajtani. site/


– Ilyenkor az eredmény a ${basedir}/target/staging/ apt/
könyvtárban jön létre!
fml/
– A működéshez az alábbiakat is meg kell adni a POM-ban:
● <distributionManagement> markdown/
<site>
<id>website</id> resources/
<url>file:///tmp/fake.com/</url>
</site> images/
</distributionManagement>
site.xml

pom.xml
129 131

Webhely testreszabása (1) Webhely testreszabása (3)



A webhely testreszabásához a ●
Formátumok:
${basedir}/src/site/ könyvtárban kell https://maven.apache.org/doxia/references/
elhelyezni a megfelelő állományokat. – APT (Almost Plain Text)
– A site.xml (site descriptor) állományban változtatható https://maven.apache.org/doxia/references/apt-form
meg a webhely megjelenésének felépítése. at.html

A formátumhoz az alábbi XML sémát kell használni:
http://maven.apache.org/xsd/decoration-1.8.0.xsd
– AsciiDoc https://asciidoc.org/
– A könyvtár alatt speciális alkönyvtárak helyezhetők el, – FML (FAQ Markup Language)
melyek a webhelyhez szolgáltatnak tartalmat. https://maven.apache.org/doxia/references/fml-form

Speciális formátumok használata, amelyekből automatikusan at.html
HTML oldalak jönnek létre. – Markdown
https://daringfireball.net/projects/markdown/
130 132

You might also like