Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

3. diel - Kompilácia a spustenie projektu s Mavenom z príkazového riadku

V predchádzajúcej lekcii, Inštalácia Mavenu a tvorba prvého projektu , sme si sprevádzkovali Maven a vytvorili sme s jeho pomocou nový hello-world projekt.

Dnes si v Maven tutoriále ukážeme niektoré základné úkony, ktoré môžeme s naším projektom urobiť. Predovšetkým sa pozrieme na to, ako naše zdrojové kódy pomocou Mavenu skompilovať, spustiť a vyčistiť.

Skompilovanie projektu

Najprv sa naučíme náš projekt pomocou Mavenu z príkazového riadka skompilovať. Využijeme na to náš Hello world projekt, ktorý sme si vytvorili v lekcii Inštalácia Mavenu a tvorba prvého projektu.

Prepneme sa v konzole do adresára s hello-world projektom a spustíme príkaz:

$ mvn compile

Aby sme sa v príkazovom riadku dostali z nadradenej zložky do adresára s naším projektom, použijeme príkaz change directory: $ cd hello-world. Príkazový riadok je možné tiež otvoriť priamo v priečinku, keď na ňu klikneme pravým tlačidlom myši a zvolíme možnosť Otvoriť v aplikácii Terminal.

Po spustení kompilácie sa nám objaví výpis obsahujúci nasledujúce informácie:

Command line
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------------< cz.itnetwork:hello-world >----------------------
[INFO] Building hello-world 1.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:3.0.2:resources (default-resources) @ hello-world ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /home/atrament/Nextcloud/my-documents/itnetwork/java/Maven p
[INFO]
[INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ hello-world ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /home/atrament/Nextcloud/my-documents/itnetwork/java/Maven p
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.586 s
[INFO] Finished at: 2023-06-04T23:43:41+01:00
[INFO] ------------------------------------------------------------------------

Z celého textu nás najviac zaujíma hláška BUILD SUCCESS, ktorá dáva najavo, že sa všetko podarilo a projekt bol úspešne skompilovaný. Poďme sa o tom presvedčiť pohľadom do nášho projektu. Keď sa teraz v pozrieme do priečinka hello-world/, zistíme, že sa v ňom vytvoril nový podadresár target/ s vygenerovanými súbormi.

Aj tento adresár je súčasťou štandardizovanej štruktúry projektu, ktorú Maven presadzuje, ako sme si uviedli už skôr. V projekte tak máme teraz dva adresáre src/ a target/. Vidíme, že Maven striktne udržuje naše súbory so zdrojovým kódom oddelené od skompilovaných súborov.

Opätovná kompilácia projektu

O pár riadkov vyššie v predchádzajúcom výpise nájdeme aj toto oznámenie:

Command line
...
[INFO] Changes detected - recompiling the module!
...

Maven totiž najprv skontroluje, či je vôbec potrebné niečo skompilovať a až potom naozaj kompiluje. To je veľmi výhodné pri veľkých projektoch obsahujúcich mnoho súborov. Nie je totiž potrebné po každej zmene v zdrojovom kóde kompilovať úplne všetky súbory znova, stačí skompilovať iba tie, čo sa zmenili.

Toto tvrdenie si tiež ľahko overíme opätovným spustením príkazu $ mvn compile. Pokiaľ sme medzitým nič nezmenili v súbore App.java, tak sa po spustení ďalšej kompilácie objavia vo výstupe nasledujúce informácie:

Command line
...
[INFO] Nothing to compile - all classes are up to date
...

Spustenie aplikácie

Teraz si ukážeme, ako našu aplikáciu spustiť. Mohli by sme spustiť skompilovaný súbor obvyklým spôsobom. Naša aplikácia obsahuje iba jednu triedu App, ktorá zároveň obsahuje metódu main(). Jej skompilovaná podoba sa teraz nachádza v adresári target/classes/, preto pridáme tento adresár na classpath a spustíme metódu main() v triede App:

$ java -cp target/classes/ cz.itnetwork.App

Keďže sme ale v seriáli o Mavene, poďme si ukázať ako to zariadiť s jeho pomocou.

Spustenie pluginom exec

Na spúšťanie aplikácie Mavenom slúži plugin exec a jeho goal java. O tom, čo je to goal a čo sú to pluginy, si povieme viac nabudúce. Teraz sa uspokojíme s informáciou, že spustenie mavenovského pluginu docielime tým, že za príkaz mvn pridáme názov pluginu a jeho goal oddelený dvojbodkou.

V adresári s naším projektom teda teraz projekt spustíme príkazom:

$ mvn exec:java

Miesto nami očakávaného vypísania Hello World! do konzoly však tentoraz vidíme výpis BUILD FAILURE ao kúsok nižšie popis chyby:

Command line
...
[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:3.0.0:java (default-cli) on project hello-world: The parameters 'mainClass' for goal org.codehaus.mojo:exec-maven-plugin:3.0.0:java are missing or invalid -> [Help 1]
...

Nastavenie hlavnej triedy projektu

Maven nám v ňom hovorí, že nemáme nastavený parameter mainClass, čiže triedu, ktorá obsahuje metódu main(). Nevie teda, čo má spustiť a musíme mu to povedať. Máme dve možnosti, ako tento problém vyriešiť. Dnes si ukážeme, ako je možné požadovaný parameter definovať na príkazovom riadku pomocou nám už známeho prepínača -D:

$ mvn exec:java -Dexec.mainClass=cz.itnetwork.App   // Pro plugin `exec` definujeme proměnnou `mainClass`

Po opätovnom spustení projektu Mavenom už teraz všetko prebehne správne:

Command line
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------------< cz.itnetwork:hello-world >----------------------
[INFO] Building hello-world 1.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- exec-maven-plugin:3.0.0:java (default-cli) @ hello-world ---
Hello World!
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.308 s
[INFO] Finished at: 2023-05-29T08:50:32+01:00
[INFO] ------------------------------------------------------------------------

Na výstupe teraz teda medzi všetkými tými mavenovskými výpismi uvidíme aj naše Hello World!.

Druhé riešenie spočíva v nastavení parametra priamo v konfigurácii projektu. Tento spôsob si ukážeme v niektorej z nasledujúcich lekcií.

Vyčistenie projektu

Niekedy je potrebné projekt tiež vyčistiť, teda odstrániť všetky súbory, ktoré vznikli pri kompilácii.

Na to slúži jednoduchý príkaz:

$ mvn clean

Po spustení tohto príkazu sa do konzoly vypíše:

Command line
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------------< cz.itnetwork:hello-world >----------------------
[INFO] Building hello-world 1.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ hello-world ---
[INFO] Deleting /home/atrament/Nextcloud/my-documents/itnetwork/java/Maven p
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.344 s
[INFO] Finished at: 2023-06-14T17:24:50+02:00
[INFO] ------------------------------------------------------------------------

Keď sa potom presunieme do zložky s naším projektom, uvidíme, že tu zostal iba adresár src/ s naším súborom App.java. Adresár target/ s kompilovaným súborom bol celý odstránený.

V ďalšej lekcii, Životné cykly a fázy Mavenu, pluginy a ich ciele , si vysvetlíme, čo je to v Mavene životný cyklus a aké má fáza. Dozvieme sa tiež, čo sú to pluginy a popíšeme si ich ciele.


 

Predchádzajúci článok
Inštalácia Mavenu a tvorba prvého projektu
Všetky články v sekcii
Maven
Preskočiť článok
(neodporúčame)
Životné cykly a fázy Mavenu, pluginy a ich ciele
Článok pre vás napísal Atrament
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Aktivity