Do budowania wszystkich projektów używany jest Maven w wersji 2.2.1. Każda nowsza wersja również powinna być zgodna, jakkolwiek w razie problemów zawsze można wrócić do wersji starszej.
Instalacja Mavena
- Mavena należy pobrać ze strony http://maven.apache.org/download.html.
- Po pobraniu archiwum rozpakowujemy np do katalogu C:\tools\maven.
- Ustawiamy zmienną środowiskową PATH dla użytkownika:
Mój komputer > Właściwości > Zaawansowane > Zmienne środowiskowe

Klikamy przycisk edytuj. Jeśli nie ma zmiennej PATH to ją należy stworzyć.
- Do wartość zmiennej należy dopisać C:\tools\maven*bin*. Końcówka jest o tyle ważna że zawiera plik uruchamiający mavena (mvn.bat/sh).

- Zatwierdzamy zmiany i zamykamy okno.
- Otwieramy nową konsolę (np WIN+R i wpisujemy cmd bądź klikamy Start > Uruchom) i wpisujemy mvn -version. Wynik powinien być zbliżony do tego poniżej.

Podstawowe pojęcia
Repozytorium lokalne to miejsce gdzie Maven zapisuje wszystkie używane biblioteki, niezależnie od projektu nad którym pracujemy. Dzięki temu nie ma konieczności kopiowania JARów do systemu kontroli wersji (np SVN).
Deskryptor projektu (pom.xml) jest to plik zawierający informacje o projekcie do zbudowania. Maven umożliwia tworzenie hierarchii projektów dzięki dziedziczeniu - np projekt A może być rodzicem B a z kolei C dzieckiem B. Co ważne każdy projekt może mieć tylko jednego rodzica, ale za to wiele dzieci. Przykładowa struktura znajduje się poniżej.
W strukturze tej należy zachować kilka zasad. Przede wszystkim rodzic nie może zależeć od dziecka ponieważ uniemożliwi to zbudowanie go. W drugą stronę jest ta sama zasada - to znaczy dziecko nie może zależeć od rodzica. W każdym z tych przypadków Maven wykryje zapętlenie. Wynika to stąd że hierarchia jest stworzona tylko po to by dziedziczyć ustawienia.
Inne zasady których należy dochować. Jeśli budujemy cały projekt (od A do C, E, F) nie możemy zdefiniować zależności dwustronnej, to znaczy takiej gdzie E zależy od F oraz F od E. Również w tym przypadku Maven wykryje zapętlenie. Będzie możliwe oddzielnie zbudowanie modułów E oraz F, ale nigdy w jednym wywołaniu.
Cykl budowania w Mavenie składa się z następujących po sobie faz (phase), które zawierają zadania (goal) do wykonania. Zależnie od typu projektu są uruchamiane różne zadania, jakkolwiek lista faz jest niezmienna. Zamiast całej fazy (np package) możemy wykonać pojedyncze zadanie, np:
| Faza | Przykładowe zadanie |
|---|---|
| process-resources | resources:resources |
| compile | compiler:compile |
| process-test-resources | resources:testResources |
| test-compile | compiler:testCompile |
| test | surefire:test |
| package | jar:jar |
| install | install:install |
| deploy | deploy:deploy |
Konwencja
Głównym celem twórców Mavena było usystematyzowanie sposobu w jaki procesy są budowane. Większość pluginów które są uruchamiane posiada pre definiowaną konfigurację, którą oczywiście można zmienić. W tej konwencji są przyjęte następujące założenia:
| Katalog | Przeznaczenie |
|---|---|
| src | Pliki źródłowe |
| src/main | Kod programu |
| src/main/java | Kod Java do skompilowania |
| src/main/resources | Pliki konfiguracyjne oraz inne, które nie są kompilowane |
| src/main/webapp | Katalog zawierający źródła aplikacji webowej (przy projektach tego typu) |
| src/test | Katalog zawierający źródła testów |
| src/test/java | Kod testowy |
| src/test/resources | Zasoby do testów |
| target | Miejsce w którym są zapisywane wyniki pracy Mavena, wygenerowany kod, skompilowane klasy, archiwa itp. |
Polecenia Mavena
Maven jest narzędziem opartym o mechanizm wtyczek. Zależnie od projektu możemy mieć dostępne różne zestawy poleceń, które możemy wykonać w katalogach z plikiem pom.xml. W różnych projektach proces budowania może wyglądać nieco inaczej. Podstawowe polecenia które zawsze można wykonać to:
- mvn clean - usuwa zawartość katalogu target
- mvn compile - kompiluje kod
- mvn test - uruchamia testy jednostkowe
- mvn package - tworzy archiwum JAR bez instalowania go w repozytorium
- mvn install - instaluje stworzone archiwum w repozytorium
Import projektów do Eclipse
Najszybszym i najprostszym sposobem zaimportowania projektów Mavena do Eclipse jest użycie zadania
mvn eclipse:eclipse
Uruchomienie takiego polecenia spowoduje wygenerowanie plików .project oraz .classpath dla Eclipse. Stworzone w ten sposób projekty możemy zaimportować do Eclipse poprzez menu: File > Import.

W drugim kroku wybieramy rodzaj operacji - Existing projects into workspace:

Trzeci krok sprowadza się do wprowadzenia lokalizacji w której znajdują się projekty. Po wybraniu katalogu będą widoczne wygenerowane przez Mavena projekty:

Czasami gdy część projektów już istnieje możemy zobaczyć okno takie jak poniżej:

Projekty których nie można zaznaczyć są już stworzone w Eclipse.
Ważnym krokiem jest ustawienie zmiennej M2_REPO dla Eclipse, ponieważ Maven w wygenerowanych plikach .classpath nie używa pełnej ścieżki. Zapobiega to problemom z przenoszeniem projektów, i repozytoriów. Aby ustawić zmienną M2_REPO należy wybrać Window > Preferences. W oknie które się pojawi w lewym górnym rogu znajduje się pole w którym wpisujemy class. Przefiltruje to wszystkie ustawienia pod kontem tego słowa w opisie. W drzewku wybieramy Java > Build Path > Classpath Variable.

Domyślnie Maven używa lokalizacji ~\.m2\repository.
Jeżeli zmienna jest oznaczona jako non modifiable to znaczy że jest zarządzana przez wtyczkę M2Eclipse. Gdy nasze repozytorium znajduje się w innej lokalizacji niż określiło M2Eclipse musimy dodać własną instalację Mavena, ponieważ domyślnie jest używany Maven wbudowany w tą wtyczkę.
Proces zmiany M2_REPO wraz z M2Eclipse wygląda następująco. Klikamy Window > Preferences, w wyszukiwarce wpisujemy Installation a z drzewa wybieramy Maven > Installations. W oknie zobaczymy listę instalacji którą wprowadziliśmy do wtyczki - jeśli jest tylko embedded dodajemy nową wskazując na katalog C:\tools\maven. M2Eclipse rozpoznaje strukturę katalogów także nie musimy podawać konkretnie bin, conf i tak dalej.

M2Eclipse pobierze konfigurację z pliku settings.xml i zaktualizuje zmienną M2_REPO do wskazanej w nim lokalizacji.
Add Comment