IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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í.

Lekce 3 - Kompilace a spuštění projektu s Mavenem z příkazové řádky

V předchozí lekci, Instalace Mavenu a tvorba prvního projektu, jsme si zprovoznili Maven a vytvořili jsme s jeho pomocí nový hello-world projekt.

Dnes si v Maven tutoriálu ukážeme některé základní úkony, které můžeme s naším projektem udělat. Především se podíváme na to, jak naše zdrojové kódy pomocí Mavenu zkompilovat, spustit a vyčistit.

Zkompilování projektu

Nejprve se naučíme náš projekt pomocí Mavenu z příkazové řádky zkompilovat. Využijeme k tomu náš Hello world projekt, který jsme si vytvořili v lekci Instalace Mavenu a tvorba prvního projektu.

Přepneme se v konzoli do adresáře s hello-world projektem a spustíme příkaz:

$ mvn compile

Abychom se v příkazové řádce dostali z nadřazené složky do adresáře s naším projektem, použijeme příkaz change directory: $ cd hello-world. Příkazovou řádku lze také otevřít přímo ve složce, když na ni klikneme pravým tlačítkem myši a zvolíme možnost Otevřít v aplikaci Terminal.

Po spuštění kompilace se nám objeví výpis obsahující následující informace:

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 nejvíce zajímá hláška BUILD SUCCESS, která dává najevo, že se všechno povedlo a projekt byl úspěšně zkompilován. Pojďme se o tom přesvědčit pohledem do našeho projektu. Když se nyní v podíváme do složky hello-world/, zjistíme, že se v něm vytvořil nový podadresář target/ s vygenerovanými soubory.

Také tento adresář je součástí standardizované struktury projektu, kterou Maven prosazuje, jak jsme si uvedli už dříve. V projektu tak máme nyní dva adresáře src/ a target/. Vidíme, že Maven striktně udržuje naše soubory se zdrojovým kódem oddělené od zkompilovaných souborů.

Opětovná kompilace projektu

O pár řádků výš v předchozím výpisu nalezneme také toto oznámení:

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

Maven totiž napřed zkontroluje, zda je vůbec potřeba něco zkompilovat a teprve pak doopravdy kompiluje. To je velmi výhodné u velkých projektů obsahujících mnoho souborů. Není totiž potřeba po každé změně v zdrojovém kódu kompilovat úplně všechny soubory znova, stačí zkompilovat jenom ty, co se změnily.

Toto tvrzení si také snadno ověříme opětovným spuštěním příkazu $ mvn compile. Pokud jsme mezitím nic nezměnili v souboru App.java, tak se po spuštění další kompilace objeví ve výstupu následující informace:

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

Spuštění aplikace

Nyní si ukážeme, jak naši aplikaci spustit. Mohli bychom spustit zkompilovaný soubor obvyklým způsobem. Naše aplikace obsahuje pouze jednu třídu App, která zároveň obsahuje metodu main(). Její zkompilovaná podoba se nyní nachází v adresáři target/classes/, proto přidáme tento adresář na classpath a spustíme metodu main() ve třídě App:

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

Jelikož jsme ale v seriálu o Mavenu, pojďme si ukázat jak to zařídit s jeho pomocí.

Spuštění pluginem exec

Ke spouštění aplikace Mavenem slouží plugin exec a jeho goal java. O tom, co je to goal a co jsou to pluginy, si povíme více příště. Nyní se spokojíme s informací, že spuštění mavenovského pluginu docílíme tím, že za příkaz mvn přidáme název pluginu a jeho goal oddělený dvojtečkou.

V adresáři s naším projektem tedy nyní projekt spustíme příkazem:

$ mvn exec:java

Místo námi očekávaného vypsání Hello World! do konzole však tentokrát vidíme výpis BUILD FAILURE a o kousek níže 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]
...

Nastavení hlavní třídy projektu

Maven nám v něm říká, že nemáme nastavený parametr mainClass, neboli třídu, která obsahuje metodu main(). Neví tedy, co má spustit a musíme mu to říct. Máme dvě možnosti, jak tento problém vyřešit. Dnes si ukážeme, jak lze požadovaný parametr definovat na příkazové řádce pomocí nám již známého přepínače -D:

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

Po opětovném spuštění projektu Mavenem už nyní všechno proběhne správně:

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ýstupu nyní tedy mezi všemi těmi mavenovskými výpisy uvidíme i naše Hello World!.

Druhé řešení spočívá v nastavení parametru přímo v konfiguraci projektu. Tento způsob si ukážeme v některé z příštích lekcí.

Vyčištění projektu

Někdy je potřeba projekt také vyčistit, tedy odstranit všechny soubory, které vznikly při kompilaci.

K tomu slouží jednoduchý příkaz:

$ mvn clean

Po spuštění tohoto příkazu se do konzole 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] ------------------------------------------------------------------------

Když se poté přesuneme do složky s naším projektem, uvidíme, že zde zbyl pouze adresář src/ s naším souborem App.java. Adresář target/ s kompilovaným souborem byl celý odstraněn.

V další lekci, Životní cykly a fáze Mavenu, pluginy a jejich cíle, si vysvětlíme, co je to v Mavenu životní cyklus a jaké má fáze. Dozvíme se také, co jsou to pluginy a popíšeme si jejich cíle.


 

Předchozí článek
Instalace Mavenu a tvorba prvního projektu
Všechny články v sekci
Maven
Přeskočit článek
(nedoporučujeme)
Životní cykly a fáze Mavenu, pluginy a jejich cíle
Článek pro vás napsal Atrament
Avatar
Uživatelské hodnocení:
12 hlasů
Aktivity