W skrócie, Maven

Transkrypt

W skrócie, Maven
W skrócie, Maven
Marcin Dziedzic, Wiktor Żołnowski
Po co nam narzędzie do zarządzania projektami ?
Stary, juz nie tak dobry, Ant
●
Niskopoziomowy
●
Sami musimy zarządzać
●
Strukturą projektu
●
Procesem kompilacji
●
Tworzeniem plików .jar
●
Zależnościami
●
Cyklem życia
●
Zaawansowane użycie jest skomplikowane
●
Brak standaryzacji, skrypt na projekt
W czym Maven jest lepszy ?
●
Obiektowy model projektu (POM)
●
Powtarzalne buildy
●
Zarządzanie zależnościami
●
Cykl życia projektu
●
Wersjonowane artefakty (jar, war, sar itd...)
●
Dostęp do niezliczonej ilości wtyczek bez dodatkowej konfiguracji
●
Filtrowanie zasobów
●
Integracja z IDE: Eclipse, NetBeans, ...
●
Dostajemy zestaw sprawdzonych reguł
Maven z lotu ptaka
Struktura projektu
Project object model (POM)
<project ...>
<modelVersion>4.0.0</modelVersion>
<groupId>pl.test.automation</groupId>
<artifactId>test-automation</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>Test Automation Quick Start App</name>
<url>http://marcindziedzic.pl</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Krótki opis POM
●
GroupId – twórca projektu
●
ArtifactId – nazwa aplikacji
●
Packaging – sposób pakowania
●
Version – wersja
●
Name – nazwa biznesowa
●
Url – strona projektu
●
Dependencies – sekcja zależności
●
Build/plugins – sekcja wtyczek
●
Properties – sekcja zmiennych
Cykl życia projektu
●
Default - domyślny
●
Validate – sprawdzenie poprawności projektu
●
Compile - kompilacja
●
Test – uruchomienie testów jednostkowych
●
Package – spakowanie kodu np. do archiwum .jar
●
Integration-test – uruchomienie testów integracyjnych
●
Verify – sprawdzenie poprawności projektu
●
Install – umieszczenie paczki w lokalnym repozytorium
●
Deploy – umieszczenie paczki w zdalnym repozytorium
●
Clean – wyczyszczenie poprzednich buildów
●
Site – wygenerowanie strony projektu
Praca z maven
●
●
Polecenia ( mvn [plugin]:[goal] )
●
mvn --version – sprawdzenie wersji
●
mvn archetype:generate – wygenerowanie projektu
●
mvn compile - kompilacja
●
mvn test – uruchomienie testów
●
mvn install – instalacja w lokalnym repozytorium
●
mvn clean – wyczyszczenie projektu
●
mvn eclipse:eclipse – wygenerowanie plików projektu
Triki:
●
mvn install -Dmaven.test.skip=true – kompilacja z pominięciem testów
●
mvn test -Dtest=*AppTest - uruchomienie wybranych testów
●
mvn install -f some/path/pom.xml – kompilacja projektu spoza
katalogu głównego
Zależności
<!-- Biblioteki z których korzysta nasz projekt -->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.easytesting</groupId>
<artifactId>fest-assert</artifactId>
<version>1.4</version>
<scope>test</scope>
</dependency>
</dependencies>
Zasięg (scope) i zależności
przechodznie
●
●
●
●
●
●
Compile – domyślny zasięg – biblioteka jest wymagana we
wszystkich fazach
Provided – biblioteka potrzebna do kompilacji jednak w trakcie
uruchomienia dostarczona np. przez kontener
Runtime – biblioteka nie jest potrzebna podczas kompilacji a jedynie
przy uruchomieniu aplikacji
Test – biblioteka jest potrzebna jedynie w fazie testów
System – zależność podobna do Provided z tym, że jasno musimy
wskazać plik .jar
Import - zasięg dostępny dla zależności typu pom, wskazuje
mavenowi, że chcemy dostarczyć zaimportować zależności z innego
projektu
Wtyczki
<!-- Rozszerzają funkcjonalność maven -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
Zmienne
<!-- Definicja -->
<properties>
<junit.version>4.10</junit.version>
<fest.assert.version>1.4</fest.assert.version>
<jbehave.core.version>3.4.5</jbehave.core.version>
<jbehave.web.version>3.3.4</jbehave.web.version>
<jbehave.web.selenium>3.4</jbehave.web.selenium>
<mockito.version>1.8.5</mockito.version>
</properties>
<!-- Wykorzystanie -->
<dependency>
<groupId>org.jbehave.web</groupId>
<artifactId>jbehave-web-runner</artifactId>
<version>${jbehave.web.version}</version>
</dependency>
Zagadnienia zaawansowane
●
Repozytoria:
●
Lokalne
●
Zdalne
●
Konfiguracja settings.xml
●
Profile
●
Modułowość
●
Filtrowanie zasobów
●
Zarządzanie zależnościami i pluginami
●
Integracja z IDE

Podobne dokumenty