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