Maven II Jakub Wojtaszczyk (onufry@mimuw.edu.pl) Piotr Tabor (p.tabor@mimuw.edu.pl)
Plan Wstęp Porównamy Maven II i Anta Zainstalujemy Mavena II Stworzymy i obejrzymy Pierwszy projekt Omówimy mechanizmy wersje Wersje Repozytoria Fazy Stworzymy złożony projekt (JSF,EJB) Przejrzymy listę wtyczek Zapoponujemy zadania
Korzyści Automatyczne tworzenie projektu Automatyzacja powtarzajacych się zadań (budowanie, testowanie, publikowanie, itp.) Uniezależnić projekt od różnych środowisk developerskich (bez utraty korzyści ze spójnego środowiska) Odciążenie użytkownika od wszystkiego co da sie zautomatyzować Wprowadzić standardy organizacji projektu
Konwencje Układ katalogów projektu Jeden projekt prawie zawsze jeden plik wynikowy (jar, war) artefakt Nazewnictwo i konstrukcja plików wynikowych Jeden standard opisu projektu: POM Project Object Model
A co z mrówkiem? ANT Niezależny od systemu operacyjnego Język skryptowy z automatycznym sortowaniem topologicznym zadań Operacyjny (jak Bash) MAVEN Niezależny od systemu operacyjnego Język opisu projektu, zorientowny na dostarczenie spójnej informacji o cechach projektu wtyczkom, które wykorzystają te mechanizmy na różnych sposób Deklaratywny (jak Prolog :) )
Instalacja
Pierwszy projekt Tworzenie projektu Omówienie struktury katalogów Omówienie zawartości pliku POM Podłączenie projektu do Eclipsa Podłączenie projektu do NetBeana Podłączenie zależności Hello World ++ (ze stroną i dokumentacją)
Stabilne wersje artefaktów 1, 1.2.3, 1.2-beta Zapisywane są na repozytorium wersji stabilnych Nie powinny być modyfikowane po udostępnieniu - bo wersja powinna być jednoznaczna Mogą być zależnościami innych wersji stabilnych Powinny zależeć tylko od wersji stabilnych innych artefaktów
Rozwojowe wersje artefaktów (migawki) 1-SNAPSHOT, 1.2.3-SNAPSHOT, 1.2-beta-SNAPSHOT Każdy build to wersja : 1.2.3-20070315.100503-63 (numer) - (data).(godzina)-(id) Zapisywane są na repozytorium wersji rozwojowych Mogą być dowolnie modyfikowane Maven uaktualnia je na żądanie (domyślnie raz dziennie) Nie mogą być zależnościami innych wersji stabilnych Mogą zależeć od wersji stabilnych i rozwojowych innych artefaktów Wersją stabilną po 1.2.3-SNAPSHOT jest wersja 1.2.3
Repozytoria Maven'a Spójna organizacja plików Repozytoria światowe (http://ibiblio.org/maven2) Repozytoria firmowe Repozytoria lokalne u użytkownika Automatyczna synchronizacja (w dół i w górę) Archiva
Project Object Model <project> <modelversion>4.0.0</modelversion> <groupid>...</groupid> <artifactid>...</artifactid> <version>...</version> <packaging>...</packaging> <parent>...</parent> <dependencies>...</dependencies> <dependencymanagement>...</dependencymanagement> <modules>...</modules> <properties>...</properties> <build>...</build>...
Project Object Model 2 <name>...</name> <description>...</description> <url>...</url> <inceptionyear>...</inceptionyear> <licenses>...</licenses> <organization>...</organization> <developers>...</developers> <contributors>...</contributors>...
Project Object Model 3 <issuemanagement>...</issuemanagement> <cimanagement>...</cimanagement> <mailinglists>...</mailinglists> <scm>...</scm> <prerequisites>...</prerequisites> <repositories>...</repositories> <pluginrepositories>...</pluginrepositories> <distributionmanagement>...</distributionmanagement> <profiles>...</profiles> </project>
Jeszcze o zależnościach <dependency> <groupid>junit</groupid> <artifactid>junit</artifactid> <version>4.0</version> <type>jar</type> <scope>test</scope> (compile, provided, runtime, test, system) </dependency> Zależności są przechodnie
o fazach validate generate-sources process-sources generate-resources process-resources compile compile the source code of the project. process-classes generate-test-sources process-test-sources generate-test-resources
o fazach 2 process-test-resources test-compile test prepare-package package pre-integration-test integration-test post-integration-test perform verify install deploy
O wtyczkach <plugins> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-jar-plugin</artifactid> <version>2.0</version> <configuration> <classifier>test</classifier> </configuration> <dependencies>...</dependencies> <executions>...</executions> </plugin> </plugins>
Bardziej skomplikowany przykład Projekty NIE są płaskie Aplikacja JSF i działa (http://wiki.apache.org/myfaces/myfaces_archetypes_for_maven) Aplikacja EJB i mamy oba jary gotowe
Co jeszcze Maven potrafi (przykłady) Przygotowywanie dystrybucji aplikacji (mvn assembly:assembly) Przygotowywanie release (mvn release:*) Przygotowanie dystrybucji Podbicie numerów wersji Kompilacja i testy w piaskownicy Odłożenie wersji w drzewie SVN Wygenerowanie changelogów Zamknięcie bugów w odpowienim systemie
Profile Co jeszcze Maven potrafi (przykłady 2) generowanie źródeł (xdoclet 1,2) obfuscator transformacje XSLT, generowanie klas JAXB uruchamianie Ant'a (antrun) deployowanie programowane na różnych serwerach aplikacji (cargo) Generowanie klas do obsługi WebServiców Axis, Axis2 (Java2WSDL, WSDL2Java)... dużo więcej
Wiedzieć więcej... Darmowa książka (http://www.mergere.com/m2book_download.jsp) Strona Mavena (http://maven.apache.org) Google (http://google.com) ;) Autorzy prezentacji (w szczególności przez najbliższe kilka minut) PYTANIA?