
Witajcie w pierwszym odcinku serii „Czym jest… ?”! Cykl zaczniemy od omówienia podstaw Mavena, który jest właściwie wszędzie tam gdzie Java i nawet jeśli ogłoszenie o pracę nie umieszcza Mavena w wymaganiach to zazwyczaj dlatego, że znajomość owego narzędzia to oczywista oczywistość.
Uwaga! W tej serii zajmuję się opisowym przedstawieniem tematu, a celem jest zapoznanie z zagadnieniem w sposób luźny i zrozumiały dla nowicjusza. W związku z tym wiele elementów siłą rzeczy musi zostać pominiętych. Tych z was, którzy chcieliby się dowiedzieć więcej, zapraszam do źródeł na końcu artykułu.
Wyruszacie na questa. Zabraliście prowiant, potionki, jesteście wypoczęci, mana zregenerowana, oręż naostrzony. Jest was czterech: czarodziej robi za damage dealera i nawala kulami ognia na prawo i lewo, rycerz-tank blokuje wrogów, łotrzyk rozbraja pułapki i otwiera zamki. No i oczywiście macie też kapłana, który dba o to, aby ci pozostali mogli szybko i bez przeszkód wykonywać swoje zadania. Kapłan ma na imię Maven.

W ten prosty, acz obrazowy sposób możecie sobie zwizualizować rolę Mavena w javowym projekcie. Ale żeby w pełni ogarnąć temat musimy zrozumieć problem dla którego omawiane narzędzie jest rozwiązaniem. Cofnijmy się do roku 1995 kiedy to narodziła się Java.

Mamy oto następującą sytuację: pojawił się nowy język programowania, który za sprawą rewolucyjnej jak na tamte czasy wirtualnej maszyny Java (JVM) prędko zdobywa na popularności. Każdy chce pisać programy, które można uruchomić na pecetach, makach, a nawet na telefonach (w czasach gdy o smartfonach nikt jeszcze nie słyszał).
No i każdy pisze.
Każdy pisze po swojemu. Jeden daje testy w głównym katalogu, inny obok, trzeci w ogóle nie testuje. Ta firma wrzuca wszystkie pliki do pojedynczego folderu, tamta tworzy tysiąc pakietów, każdy do czego innego. Niektórzy czyszczą nieużywane pliki, reszta o nich zapomina. Bezużyteczne biblioteki walają się po całym module. Programista przechodzący z jednego zespołu do konkurencji spędza całe dnie na ogarnięciu tego burdelu.
Jednym słowem: „CHAOS”
Maven, który pojawia się w 2004 roku jest remedium na powyższą chorobę toczącą świat Javy. Z architektonicznego punktu widzenia:
Maven to standard
Od teraz możemy jedną komendą w wierszu poleceń stworzyć projekt mavenowy w oparciu o tzw. archetypy czyli szablony według których tworzony jest zalążek projektu. Wszystko jest elegancko popakietowane, każdy element ma swoje miejsce, wiemy co jest gdzie i dlaczego.

Oryginalnie Maven działa w wierszu poleceń, niezależnie od IDE, ale obecnie jest tak sklejony z IntelliJ, że mamy wrażenie jakby to była jedna całość. Stąd równie dobrze możemy wszystko poustawiać myszką. Pamiętajmy jednak, że koniec końców:
Maven to osobny program, niezależny od IDE, ale dodający mu nowe fukcje. Jeśli miałbym go opisać jednym słowem, nazwałbym go „managerem”. O ile samo IDE pomaga w pisaniu poszczególnych linijek kodu, o tyle Maven jest nieoceniony przy zarządzaniu projektem jako całością.

Śmiało można rzec, że sercem projektu opartego o Maven jest plik pom.xml (skrót od Project Object Model), który zawiera takie elementy jak:
- „gav” czyli identyfikator projektu (group-artifact-version)
- „dependencies” czyli dodatkowe biblioteki, które trzeba dociągnąć aby kod zadziałał
- „plugins” czyli dodatkowe, niestandardowe funkcje – sami możemy określić co Maven u nas jeszcze będzie robił (np. sprawdzał styl kodu, albo ułatwiał wersjonowanie)
Teraz jeśli potrzeba nam konkretnej biblioteki już nie musimy wyginać palców jak gitarzysta próbując naraz wcisnąć kombinację SHIFT+CTRL+ALT+S aby otworzyć okno zarządzania projektem i dodać tam plik *.jar (który uprzednio trzeba ściągnąć) z potrzebnymi klasami. Wystarczy znaleźć kilka wierszy kodu w formacie xml (zazwyczaj w oficjalnym repozytorium)…
…kopiuj-wklej i gotowe!
Podobnie sprawa ma się z tzw. lifecycle projektu, odnoszącym się do poszczególnych etapów budowania aplikacji ze stworzonych klas i interfejsów. Już nie musimy sami usuwać plików po poprzednim buildzie bo Maven zrobi to automatycznie (mvn clean), sam odpali wszystkie testy (mvn test) i sam wrzuci gotowe archiwum do zadanego repozytorium (mvn deploy). Biorąc to wszystko pod uwagę, za sukcesem i popularnością tego narzędzia stoi prosty fakt, że
Maven to zwyczajnie wygoda i oszczędność czasu
Na koniec dodam, że jakkolwiek Maven nie byłby popularny to nie jest tak, że nie ma żadnej konkurencji. Za jego następcę uważa się wspomniany w tytule Gradle, który niby jest taki jak jego protoplasta ale:
- działa szybciej, szczególnie w bardzo dużych projektach
- jest łatwiejszy w dostosowaniu do swoich potrzeb (ma się większą kontrolę nad projektem)
- jest częściej stosowany w projektach androidowych z wykorzystaniem Kotlina/Groovy
Tyle na początek powinno wam wystarczyć jeśli chodzi o Mavena. Dziękuję za uwagę i zapraszam za kilka dni kiedy to zajmiemy się Gitem i GitHubem.
Źródła:
Maven w godzinę, film na YT (ANG)
Dokładny opis tego czym jest i jak korzystać z Mavena (POL)