Java projektek fő pom.xml őse.

Általános maven fő pom.xml, amit minden i-Cell Mobilsoft Zrt. projekt tartalmaz.

A projekt arra célra készült hogy i-Cell Mobilsoft álltal készített projektek azonos általános beállításokkal működjenek.

Összegyűjti a közös beállításokat és azonosítókat, így elkerülhető a fejlesztői beállítások összeakadása és kisebb lehet a projekt fő pom.xml mérete ahol csak általános beállítások vannak. Emellett segít frissen tartani a plugineket, bugok eséten közös workaround megoldásokat és céges azonosításokat.

Minimum feltételek
  • Java 8+

  • Maven 3.3.0+

1. POM struktúra

A projekt tartalmaz több pom.xml fájlt, mely mindig célzottabban közelíti meg a beállításokat.

1.1. parent-pom

Ez a legfelső pom.xml fájl. Ebből indul ki minden többi pom.xml.

pom.xml
<groupId>hu.icellmobilsoft.pom</groupId>
<artifactId>parent-pom</artifactId>

Tartalma csak teljesen általános elemekből áll, icellmobilsoft cégre utaló beállítások:

Beállítások:
  • UTF-8 karakter kódolás

  • dátum formátum

  • organization

  • developers

Definíciók:
  • maven plugin:

    • verziók

    • workaroundok

    • általános beállítások

  • maven verzió minimum követelmény

Profilok:
  • jdk8 - aktiválódik hogyha JDK 8 -es környezettel kompiláljuk a projektet

  • jdk11 - aktiválódik hogyha JDK 11 -es környezettel kompiláljuk a projektet

  • jdk17 - aktiválódik hogyha JDK 17 -es környezettel kompiláljuk a projektet

  • parent-pom-release - kézzel kell aktiválni hogyha a 'parent-pom'-ból új release-t készítünk

1.2. parent-icellmobilsoft-pom

Ez egy 'gyerek' pom, ami örökli a parent-pom összes beállításait, és kiegészíti azt az icellmobilsoft domain specifikus beállításokkal.

icellmobilsoft/pom.xml
<groupId>hu.icellmobilsoft.pom</groupId>
<artifactId>parent-icellmobilsoft-pom</artifactId>

Tartalma minimális, csak kiégészíti a fő pom.xml-t:

Beállítások:
  • Repository (plugin repository is):

    • icellmobilsoft nexus

    • jboss maven

    • maven central

  • Distribution Management

    • Snapshot tárhely

    • Release tárhely

1.3. parent-oss-pom

Ez egy 'gyerek' pom, ami örökli a parent-pom összes beállításait, és kiegészíti azt az icellmobilsoft open source specifikus beállításokkal.

oss/pom.xml
<groupId>hu.icellmobilsoft.pom</groupId>
<artifactId>parent-oss-pom</artifactId>

Tartalma az aktuális public maven central publikálásához szükséges beállításait célozza meg. Ezek közé tartoznak a következők:

Beállítások:
  • license

  • pluginManagement

  • release profil

  • distributionManagement

  • gpg aláírás

  • sonatype public nexus plugin kezelés

2. Releaselési folyamat

Mivel a projekt ősként szolgál a többi projekten, így azt figyelembe véve nem "klasszikus" release maven beállításokkal kell ellátni. Az ok hogy ennek a projekt beállításait leörökölné a cél projekt, és az nagyon nem kívánt eseményekhez vezetne. Tehát minden release beállítást egy parent-pom-release maven profile alá kell rejteni.

2.1. Deploy

Hogyha egy SNAPSHOT verziót akarunk kiadni a céges nexus szerverre, a következő parancsokat kell használni:

mvn -B -Pparent-pom-release clean deploy source:jar
  • mvn maven executable parancs

  • -B batch futás - ne kérjen be konzolból megerősítéseket a maven

  • -Pparent-pom-release aktiválja a 'parent-pom-release' maven profilt

  • clean kitörli a */target mappákat

  • deploy deploy parancs, ami röviden fő lépésekben a következőket hajtja végre:

    • kompilálja a kódot

    • jar, war, pom csomagokat készít

    • elkészült jar, war, pom csomagokat bemásolja a lokális .m2 repositoryba

    • elkészült jar, war, pom csomagokat feltolja a definiált snapshotRepository helyre, ami a céges nexust jelenti

  • source:jar ez egy kapcsoló hogy az elkészült jar, war, pom csomagokkal együtt a forráskódokat is másolja/játsza fel a nexusba

2.2. Release

Hogyha egy fix verziót akarunk kiadni SNAPSHOT jelölés nélkül. Maga a tiszta release folyamat 4 lépésből áll:

2.2.1. #1 Ellenőrzés

Ez a lépés szolgál arra, hogy technikai oldalról ellenőrizzük le, hogy a maven minden beállítása és release követelménye megvan. Röviden a következő történik: * minden változás commitolva van * fordítható a kód * tesztek sikeresen le tudnak futni * SCM beállítások megvannak * sikeres a verzióemelés próbálkozás

mvn -B -Pparent-pom-release release:prepare -DdryRun=true
  • mvn maven executable parancs

  • -B batch futás - ne kérjen be konzolból megerősítéseket a maven

  • -Pparent-pom-release aktiválja a 'parent-pom-release' maven profilt

  • release:prepare maven-release-plugin része, indítja az SCM oldali verzió kiadását

  • -DdryRun=true kapcsoló, hogy a verzió kiadás csak "virtuális" legyen, tehát hogy csak ellenőrzés céljából indítjuk

Ennek a lépésnek le kell futnia minden hibajelentés nélkül. Esetleges hibákat javítani kell, mert a valós verziókiadás sem fog lefutni.

2.2.2. #2 Tisztítás

A próba során létrejött temp fájlokat töröljük, ne zavarjanak a valódi verziókiadásnál.

mvn -B release:clean
  • mvn maven executable parancs

  • -B batch futás - ne kérjen be konzolból megerősítéseket a maven

  • release:clean maven-release-plugin része, tisztítja a target könyvtárat és törli a temporális release fájlokat

2.2.3. #3 SCM verzió módosítás

Ha sikeres az #1 és #2 lépés, valós SCM verzió kiadását indítjuk

mvn -B -Pparent-pom-release release:prepare
  • mvn maven executable parancs

  • -B batch futás - ne kérjen be konzolból megerősítéseket a maven

  • -Pparent-pom-release aktiválja a 'parent-pom-release' maven profilt

  • release:prepare maven-release-plugin része, indítja az SCM oldali verzió kiadását

Ez a lépés gyakran hibára fut első futásnál (új környezetben), melynek a legfőbb okai ezek szoktak lenni: * környezeti beállítások nincsenek felkészítve konzolos maven, git és java futásra * lokális settings.xml fájlban nincsenek rözgítve a pom.xml-ben szereplő szerverek authentikációs adatai * a java verzióban nincsenek benne a szerverek tanusítványai (ez szok lenni a legnyagyobb szívás)

A parancs röviden a következő lépéseket csinálja:

  • #1 pontban leírt ellenőrzések

  • "-SNAPSHOT" levágása a verziószámból

  • compile

  • lokális .m2 könyvtár feltöltése

  • commit

  • tag létrehozása

  • verziószám növelése + "-SNAPSHOT" kiegészítés

  • compile

  • commit

A parancs lefutása után a lokális fájlokban a verziószám növelve és commitolva lesz. A fájlok között megtalálhatók a release temporális fájlok, melyeket nem szabad kitörölni!

2.2.4. #4 Nexus feltöltés

Ha elkészülünk a #3 ponttal, akkor már csak a csomagok elkészítése marad hátra. Fontos hogy a #3 pont temporális fájljai ott legyenek a projektben!

mvn -B -Pparent-pom-release release:perform
  • mvn maven executable parancs

  • -B batch futás - ne kérjen be konzolból megerősítéseket a maven

  • -Pparent-pom-release aktiválja a 'parent-pom-release' maven profilt

  • release:perform maven-release-plugin része, indítja a nexus oldali verzió kiadását:

    • leszedi a temporális fájlokban jelölt SCM TAG-el jelölt forráskódot

    • compile, jar, war, pom, source csomagok létrehozása

    • feltölti a nexusba

A leggyakoribb hiba az szokott lenni, hogy a nexus szerveren SSL tanusítvány nincs benne a java verziónkban, ezért a futás hibára fut.

2.3. Release problémák

Sajnos nem fog mindig sikerrrel végződni a fenti 4 lépés, ilyenkor sokszor javításokat kell elvégezni. A leggyakoribb esetek és azok javítási lépései a következő pontokban vannak kifejtve.

3. Migrációs leírások

3.1. v1.1.0 → v1.2.0

parent-pom v1.1.0 → v1.2.0 migrációs leírás, újdonságok, változások leírása

3.1.1. Újdonságok

parent-icellmobilsoft-pom

Fel lett cserélve a repository sorrendje, hogy a icell-public-repository legyen az első helyen, ezzel optimalizálva a CI/CD belső folyamatainkat.

Átállás

A változtatások nem eredményeznek átállási munkálatokat, visszafelé kompatibilis.

parent-pom
Plugin frissítések:
  • maven-gpg-plugin 1.6 → 3.0.1

  • maven-antrun-plugin 1.8 → 3.0.0

  • maven-assembly-plugin 3.1.1 → 3.3.0

  • maven-dependency-plugin 3.1.1 → 3.2.0

  • maven-release-plugin 2.5.3 → 3.0.0-M4

  • maven-resources-plugin 3.1.0 → 3.2.0

  • maven-surefire-plugin 3.0.0-M3 → 3.0.0-M5

  • maven-failsafe-plugin 3.0.0-M3 → 3.0.0-M5

  • maven-jar-plugin 3.1.1 → 3.2.0

  • maven-war-plugin 3.2.2 → 3.3.2

  • maven-site-plugin 3.7.1 → 3.9.1

  • maven-javadoc-plugin 3.1.0 → 3.3.1

  • maven-source-plugin 3.0.1 → 3.2.1

  • build-helper-maven-plugin 3.0.0 → 3.2.0

  • maven-enforcer-plugin 3.0.0-M2 → 3.0.0

  • asciidoctor-maven-plugin 1.6.0 → 2.2.1 Itt található 1.6.0 → v2 váltás migrációs leírás

  • asciidoctorj-diagram 2.0.1 → 2.2.1

Átállás

A pluginek többsége java 7 és 8 minimum requirement-esek, tehát minimum Java8 szükséges a projekten.

Általánosan nem várható probléma, esetleg az asciidoc plugin használatánál, de valószinű az sem critical szint.

3.2. v1.2.0 → v1.3.0

parent-pom v1.2.0 → v1.3.0 migrációs leírás, újdonságok, változások leírása

3.2.1. Újdonságok

parent-icellmobilsoft-pom

Fel lett cserélve a plugin repository sorrendje, hogy a icell-public-repository legyen az első helyen, ezzel optimalizálva a CI/CD belső folyamatainkat.

Átállás

A változtatások nem eredményeznek átállási munkálatokat, visszafelé kompatibilis.

github workflow

Complie job matrix configurációt kapott, amiben az operációs rendszer és a 11 valamint a 17-es java verzió van minden lehetséges variációban megadva a buildelési folyamatnak.

Dokumentum generálásnál a java verzió 17-re lett emelve így az asciidoctor-maven-plugin verziója 2.2.2 verzióra lett emelve.

Manual release indításához czenczl felhasználó is bekerült.

Átállás

A változtatások nem eredményeznek átállási munkálatokat, visszafelé kompatibilis.

3.3. v1.3.0 → v1.4.0

parent-pom v1.3.0 → v1.4.0 migrációs leírás, újdonságok, változások leírása

3.3.1. Újdonságok

Bekerült a Java 21 támogatása a profilokhoz.

parent-pom
Új plugin:
  • jacoco-maven-plugin 0.8.11 - általános beállításokkal a surefire és failsafe tesztekhez

Plugin frissítések:
  • Bump maven-antrun-plugin 3.0.0 → 3.1.0

  • Bump maven-assembly-plugin 3.3.0 → 3.6.0

  • Bump maven-dependency-plugin 3.2.0 → 3.6.0

  • Bump maven-release-plugin 3.0.0-M4 → 3.0.1

  • Bump maven-compiler-plugin 3.8.1 → 3.11.0

  • Bump maven-clean-plugin 3.1.0 → 3.3.1

  • Bump maven-install-plugin 3.0.0-M1 → 3.1.1

  • Bump maven-resources-plugin 3.2.0 → 3.3.1

  • Bump maven-surefire-plugin 3.0.0-M5 → 3.1.2

  • Bump maven-failsafe-plugin 3.0.0-M5 → 3.1.2

  • Bump maven-deploy-plugin 3.0.0-M1 → 3.1.1

  • Bump buildnumber-maven-plugin 1.4 → 3.2.0

  • Bump maven-jar-plugin 3.2.0 → 3.3.0

  • Bump maven-war-plugin 3.3.2 → 3.4.0

  • Bump maven-site-plugin 3.9.1 → 3.12.1

  • Bump maven-javadoc-plugin 3.3.1 → 3.6.0

  • Bump maven-source-plugin 3.2.1 → 3.3.0

  • Bump build-helper-maven-plugin 3.2.0 → 3.4.0

  • Bump maven-enforcer-plugin 3.0.0 → 3.4.1

    • configuration requireMavenVersion 3.3.0 → 3.8.1

  • Bump asciidoctor-maven-plugin 2.2.1 → 2.2.4

  • Bump asciidoctorj-diagram 2.2.1 → 2.2.13

  • Bump maven-gpg-plugin 3.0.1 → 3.1.0

  • Bump nexus-staging-maven-plugin 1.6.8 → 1.6.13

Átállás

A pluginek java 8 minimum requirement-esek. Minimum Maven függőségük 3.5.4 ami fel lett emelve 3.8.1 verzióra. Ez fel van készítve a 4+ könnyű átállásra és nagyban optimalizáva lett a paralel futás.

Tehát minimum Java8 és Maven 3.8.1+ szükséges a projekten.

Átállás

A változtatások nem eredményeznek átállási munkálatokat, visszafelé kompatibilis.