Spis treści
Maven to popularne, darmowe narzędzie wspomagające programistów Java. Maven ułatwia:
- dodawanie do projektu zależności do danej biblioteki bądź frameworku,
- kompilowanie i budowanie projektu,
- przeprowadzanie testów jednostkowych i integracyjnych,
- generowanie raportów z testów oraz stron informacyjnych o projekcie,
- i wiele więcej – w zależności od tego, co potrzebujesz.
Maven stosuje zasadę konwencja ponad konfiguracją (convention over configuration). Dzięki temu większość domyślnych ustawień jest wystarczająca i nie trzeba się nimi przejmować – do rozpoczęcia korzystania z Mavena wymagana jest bardzo mała ilość konfiguracji.
Wszystkie ustawienia Mavena znajdują się w pliku o nazwie pom.xml (POM – Project Object Model). Konfiguracja XML zawarta w tym pliku definiuje m. in.:
- jak nazywa się nasz projekt,
- czy wynikiem zbudowania projektu jest plik JAR czy WAR,
- jakie projekt ma zależności,
- z jakich pluginów Mavena możemy korzystać.
Maven sprawdza w pom.xml jakie zależności skonfigurowałeś dla projektu i automatycznie pobiera je z oficjalnego repozytorium. Zostają one umieszczone w Twoim lokalnym repozytorium w katalogu .m2/repository w folderze Twojego użytkownika. W ten sposób Maven buduje lokalną bazę bibliotek, z których możesz korzystać. Jest to bardzo wygodne z punktu widzenia programisty – wystarczy podać zależność, a Maven sam odnajdzie i pobierze ją z oficjalnego repozytorium, o ile nie zrobił już tego wcześniej.
Maven umieszcza w lokalnym repozytorium także pliki JAR wygenerowane w ramach budowy Twoich projektów, dzięki czemu możesz korzystać w projektach z zależności do swoich innych projektów.
Mavena używa się z linii poleceń, wywołując komendę mvn z odpowiednim parametrem. Środowiska programistyczne, takie jak IntelliJ, wspierają projekty Maven i rozumieją konfigurację zawartą w pom.xml. Pozwalają także generować projekty z niego korzystające i uruchamiać jego odpowiednie komendy.
Gdy każesz Mavenowi zbudować Twój projekt, Maven uruchomi szereg zależnych od siebie faz (build lifecycle phases), gdzie każda ma inne zadanie do wykonania – faza compile kompiluje Twój kod, test wykonuje testy jednostkowe, a install umieszcza w lokalnym repozytorium zbudowany projekt. Do tych faz podpięte są pluginy, które wykonują związane z nimi zadania – dla przykładu, kompilacją zajmuje się plugin o nazwie Maven Compiler. Nie musisz jednak sam konfigurować procesu budowania projektu – większość domyślnych ustawień będzie wystarczająca. Możesz dodać do pliku pom.xml zależności do innych pluginów, jeżeli będziesz potrzebował konkretnej funkcjonalności, np. do wygenerowania pliku JAR zawierającego wszystkie zależności skonfigurujesz i użyjesz pluginu Maven Assembly.
Dlaczego warto poznać Maven?¶
Maven jest na tyle popularny i oferuje dużo równocześnie niewiele wymagając, że istnieje mała szansa, byś nie spotkał Mavena na projekcie, do którego dołączysz (ewentualnie będzie to Gradle, alternatywne narzędzie dające podobną funkcjonalność).
Jeżeli opanujesz podstawy Mavena raz, to będziesz w stanie zbudować każdy korzystający z niego projekt za pomocą:
Struktura katalogów i rozłożenie plików będą znajome – klasy Java znajdziesz w katalogu src/main/java, testy w src/test/java, wygenerowany JAR w katalogu target itd.
Jeśli będziesz chciał dodać zależność do nowej biblioteki, wystarczy, że do pliku konfiguracyjnego pom.xml dodasz odpowiedni wpis:
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency>
Wszystkie projekty w Maven konfiguruje się w podobny sposób – jeśli poznasz format pliku konfiguracyjnego Mavena pom.xml, to będziesz w stanie się w nim odnaleźć na dowolnym projekcie.
Znajomość Mavena stanowczo zmniejsza próg wejścia w nowy projekt, a sam Maven nie tylko pozwala nam zaoszczędzić sporo czasu, ale także ułatwia nam pracę.
Twoje własne projekty także zyskają, jeżeli będziesz w nich wykorzystywał Mavena, ponieważ samo zarządzanie zależnościami już pozwala zaoszdzędzić nam czas i ułatwić pracę, nie wymagając przy tym prawie żadnej konfiguracji.