Kompilace z příkazové řádky
.
- Pamatujete?
- Tohle umí Maven taky :-)
Kompilace v Antu
.
- Obsah build.xml
- Vidíme definice několika příkazů
- Jsou zde vidět definice závislosti
- Jednoduché :-)
Kompilace v Mavenu
.
- pom.xml odpovídá build.xml
- jednoduchý skript
- mvn package = kompilace a sestavení JARu
- Jedna definice závislosti
Ukázka projektu
.
- http://localhost:8080/test/
- zkusit zeditovat JSP stránku
Proč IDE nestačí?
.
- lepší strukturovanost projektu - nevznikají cyklické závislosti
- Netbeans používá Ant
- kontinuální integrace na serveru
Ant vs Maven
.
- Maven - standardizuje
- Ant - systém pravidel a závislostí
- Vysvětlit proč jsem přešel na Maven
U složitějšího
- Ant: Vezmi překladač, zkompiluj tyto zdrojové soubory a výsledek zabal jako JAR. Pak z balíku PMD použij nástroj PMD a spusť analýzu nad těmito zkompilovanými soubory. Pak v dalším JARu najdi nástroj Cobertura, tyto class soubory instrumentuj do tohoto adresáře, spusť testy, ale použij instrumentované soubory a vygeneruj report.
- Maven: Chci vytvářet JAR, zde jsou zdrojové texty programu, zde jsou zdrojové texty testů, chci pustit PMD a provést měření pokrytí testy.
Adresářová struktura
.
- POM = Project Object Model
- Adresářová struktura je ukázkou standardizace
Maven a příkazová řádka
.
- Jsou to zároveň i fáze sestavení
- Vycheckoutuju a spustím mvn eclipse:eclipse
- Do netbeans je plugin
groupId/artifactId
.
- Identifikuje pluginy, závislosti, projekty, ...
- SNAPSHOT – jedná seo o vývojovou verzi
- Pokud verze neobsahuje SNAPSHOT, nesmí se soubor již měnit (tj. nová verze má jiné číslo)
pom.xml
.
- packaging – jar, war, maven-plugin, pom, ejb, ear, rar, par
pom.xml – informace o projektu
.
- developers - hlavně pro site a generované stránky.
- Licence - možná bude podpora schválení licence. Hlavně pro sunovské jary
pom.xml – závislosti
.
- scope - test, compile, runtime, provided
- tranzitivní závislosti
- Odpovídá linuxovým balíčkům :-)
- Maven neumí provides
- Java Module System potvrzuje potřebnost tohoto - bude jistě kooperace
- Zmínit Seam a profily (např. Hibernate)
- <optional/> - aplikace může být použitelná i bez ní
- zmínit proměnné ${junit.version}
pom.xml – build
.
- ${pom.version} - pomocí ${pom.xxx} můžu přistupovat ke všemu a názvy odpovídají položkám v pom.xml
- Takto nastavuji target 1.5 a utf-8 pro compiler
- Zmínit <configuration/>
pom.xml – dědičnost
.
- Jako kdyby jste sloučili XML přes sebe
- Super pom.xml
Multiprojekt
.
- milión pomů
- závisí na stejných verzích knihoven
- má vnitřní závislosti (vše závisí na common, web závisí na remote, ...)
- má stejná nastavení pro pluginy
- jednotné nástroje týmové práce (sledování chyb, verzovací systém, ...)
Multiprojekt – pom.xml
.
- pokud odvodíme od tohoto projektu, můžeme zde udělat centrální nastavení
- dependencyManagement vs dependency
- Chceme nastavit verze závislostí
- v jednotlivých podprojektech závislosti.
- Kompilace mezi závislostmi - nedokáže to automaticky detekovat změny a přeložit jen něco
- Maven řeší vnitřní závislosti
Multiprojekt 3
.
- pokud odvodíme od tohoto projektu, můžeme zde udělat centrální nastavení
- dependencyManagement vs dependency
Stránka projektu
.
- Některé projekty používají i jako veřejnou stránku.
Prostředí pro vývoj
.
- doporučuji projekt trac (wiki, bugtracking, SCM view)
- Prostor pro zlepšení - ukládání meta informací - seznam projektů, aktivní projekty, ...
Prostředí
.
- Bugtracking - zatím jen přidá odkaz do stránky projektu (co třeba Mylyn v eclipse)
- lze rozlišovat mezi connection a developerConnection (anonymní vs autorizovaný přístup).
- SCM - API, které umožnuje abstrahovat verzovací systém
Hudson
.
- Automaticky propojeno se SCM. Notifikace jsou v metadatech projektu (podporuje větve, apod.)
- Umí notifikovat o chybě a o úspěchu
- Checkoutuje projekty každý do vlastního adresáře –
nelze používat relativní cesty mezi projekty.
- Snažit se o nezávislost na prostředí – např. pro test pouštět mvn tomcat:run apod