Maven 2 a vývoj Java EE aplikací IBA CZ, s.r.o. 2008 Petr Klemšinský Agenda Motivace Co je to Maven Maven vs. Ant Project Object Model (POM) Informace o projektu Závislosti Nastavení buildu Reporting Dědičnost Moduly (a.k.a. multiprojekt) Životní fáze projektu Profily Nastavení Mavenu (settings.xml) Úložiště artefaktů (repository) Generování dokumentace (site) Praktická ukázka IBA CZ, s.r.o. 2008 Motivace Problémy vývoje komplexních aplikací Nutné rozčlenění do modulů (samostatné podprojekty) Složité buildovací scripty Správa velkého počtu knihoven z různých zdrojů Vývojářská dokumentace (co, kde, jak,...) Spousta dalších... Předchůdci Make Ant Maven 1 IBA CZ, s.r.o. 2008 Co je to Maven Nástroj pro správu projektů Komplexní buildovací nástroj Nástroj pro správu závislostí v projektu Nástroj pro tvorbu dokumentace Nástroj pomáhající standardizovat projekty Projekt od Apache Aktuální verze 2.0.9 IBA CZ, s.r.o. 2008 Principy Mavenu Centrální zdroj informací v pom.xml Pokrytí vývojového cyklu projektu (build, test, deploy,...) Deklarativní přístup Convention over Configuration Modulární systém (knihovny a pluginy) Jednoznačná a jednotná identifikace artefaktů IBA CZ, s.r.o. 2008 Maven vs. Ant Maven Unifikovaná struktura všech projektů Správa závislostí Deklarativní přístup Jednotný buildovací cyklus Ant Programátorský přístup (není standard) Složitá správa buildovacích souborů Malá znovupoužitelnost IBA CZ, s.r.o. 2008 Project Object Model ­ pom.xml IBA CZ, s.r.o. 2008 Project Object Model ­ pom.xml Identifikace artefaktů eu.ibacz test jar 1.0-SNAPSHOT Doplňkové informace o projektu URL, vývojáři, repository, detalní popis Závislosti projektu junit junit ${junit.version} test IBA CZ, s.r.o. 2008 Project Object Model ­ pom.xml Dědičnost eu.ibacz parent-project 1.10 Sloučí pom s rodičovským Při konfliktu přepíše nastavení z rodičovského pom mvn help:effective-pom IBA CZ, s.r.o. 2008 Project Object Model ­ pom.xml Nastavení buildu src install application-${pom.version} org.apache.maven.plugins maven-compiler-plugin 1.5 1.5 utf-8 IBA CZ, s.r.o. 2008 Project Object Model ­ pom.xml Reporting (při generování site) org.apache.maven.plugins maven-surefire-report-plugin 2.4.2 org.apache.maven.plugins maven-jxr-plugin 2.1 IBA CZ, s.r.o. 2008 Project Object Model ­ pom.xml IBA CZ, s.r.o. 2008 Moduly (a.k.a. multiprojekt) Moduly umožňují přirozené rozdělení aplikace do komponent Každý modul je samostatný projekt s vlastním POM Filozofie Mavenu: Jeden POM = jeden artefakt (jar, war, ear, ...) Deklarace v POM: ... eu.ibacz.project project pom ... project-core project-web project-ear IBA CZ, s.r.o. 2008 Moduly ­ agregace versus dědičnost Obvykle použito obojí: rodičovský projekt agreguje moduly, které dědí z jeho POM Ale: POM může být děděn jinými projekty, ale nemusí agregovat žádné moduly POM může agregovat moduly, které z něho nemusí dědit IBA CZ, s.r.o. 2008 Životní cyklus sestavení projektu Životní cykly jsou základem Mavenu Místo spouštění samotných pluginů nebo jejich tasků spouštíme životní cykly Životní cyklus sám spouští potřebné pluginy a životní cykly, na kterých závisí IBA CZ, s.r.o. 2008 Životní cyklus sestavení projektu Při úpravách a konfiguracích pluginů se jejich spouštění vždy navazuje na nějaký životní cyklus IBA CZ, s.r.o. 2008 Profily Adaptace pro různé prostředí/situace Lze definovat v POM nebo v settings.xml Aktivace: mvn ­P profil1,profil2 Příklad: ... test false pepa user.name pepa.instalater ... IBA CZ, s.r.o. 2008 Nastavení Mavenu (settings.xml) Lokální nastavení Umístění ${user.home}/.m2/settings.xml Nastavení umístění úložišť profily properties IBA CZ, s.r.o. 2008 Úložiště artefaktů (repository) IBA CZ, s.r.o. 2008 Nexus v IBA CZ Proxy pro ostatní úložiště v Internetu (podpora Mavenu 1 a 2) Struktura firemního úložiště Knihovny vyvíjené v IBA CZ IBA CZ Releases IBA CZ Snapshots IBA CZ Plugin Releases IBA CZ Plugin Snapshots Knihovny třetích stran (nedostupné v Internetu, open source projekty upravené pro naše potřeby, apod.) 3rd party 3rd party Snapshots Proxy ostatních úložišť v Internetu Přidávání a správu korporátní repository zajišťuje zodpovědný správce IBA CZ, s.r.o. 2008 Nexus (náhled) IBA CZ, s.r.o. 2008 Generování dokumentace (site) Vygenerování html dokumentace příkazem mvn site Součástí jsou vygenerované reporty Javadoc Pokrytí testů ­ Cobertura Statistiky SVN/CVS ­ StatSCM Metriky ... IBA CZ, s.r.o. 2008 DEMO Vytvoření projektu Build projektu Nastavení Mavenu Integrace s IDE Netbeans Multiprojekt Java EE 5 Generování site Maven a embeded Glassfish V3 IBA CZ, s.r.o. 2008 Slabé stránky mavenu Obvykle pomalejší buildování než Ant Problémy s nedostupností veřejných repository (řeší lokální proxy) Různá kvalita knihoven a pluginů Menší zkušenosti programátorů s Mavenem Méně vhodný pro nestandardní projekty IBA CZ, s.r.o. 2008 Zdroje Stránky projektu - http://maven.apache.org/ Blog a přednášky Petra Ferschmanna - http://blog.softeu.cz/ Tutorialy od Netbeans - http://wiki.netbeans.org/MavenAndNetBeansForGlassFish http://www.netbeans.org/kb/60/javaee/ejb-glassfish-maven.html http://blogs.sun.com/arungupta/entry/embeddable_glassfish_in_action_servlet Seznam pluginů - http://maven.apache.org/plugins/index.html Vyhledávání knihoven - http://mvnrepository.com/ IBA CZ, s.r.o. 2008 And now iťs time for ... QA IBA CZ, s.r.o. 2008