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.