SlideShare una empresa de Scribd logo
1 de 36
Stefan Scheidt, Senior Architekt OPITZ CONSULTING Gummersbach GmbH Automatischer Build mit Maven
Wer ist OPITZ CONSULTING? Last Minute: Offizieller OC 1 Seiter Von Tom Ihr Projektspezialist für Java, SOA und Oracle
Wer bin ich? Software-Entwickler und Architekt Trainer und Coach Sprecher und Autor
(Keine) Motivation In diesem Vortrag keine Motivation für Build-Automatisierung Aber ein paar Ziele: Automatisiertes Testen Continuous Integration Code-Qualität
Was ist Maven? „Software Project Management Tool“ DeklarativesBuild-System Convention overConfiguration Wiederverwendung durch Plugins Dependency Management Tool für technisches Projekt-Reporting
Was ist Maven? (2) Open-Source-Projekt bei Apache Entstanden 2002 für diverse Apache-Projekte Ziel: Vereinheitlichen von Build Verteilung Erstellen einer Projekt-Webseite Don‘trepeatyourself! Siehe auch http://maven.apache.org/what-is-maven.html
Das „Project Object Model“ (POM) Beschreibt ein Projekt für Maven... „Artefakt-Koordinaten“ Informationen für die Webseite Was enthält das Projekt? Welche Abhängigkeiten hat das Projekt? 	...als XSD-basierte XML-Datei
(Nahezu) minimales POM <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0             http://maven.apache.org/maven-v4_0_0.xsd“> <modelVersion>4.0.0</modelVersion> <groupId>de.opitzconsulting</groupId> <artifactId>hellomaven</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>jar</packaging> <name>Hello Maven</name> <description>Simple Maven Project</description> </project>
Convention over Configuration Diese Projektbeschreibung wird durch Voreinstellungen ergänzt, ... ... die im „Super POM“ definiert sindhttp://maven.apache.org/pom.html#The_Super_POM Dadurch kann man jetzt schon kompilieren,(JUnit-)Tests ausführen, JAR bauen, JAR verteilen,Projekt-Website generieren...
Standard-Verzeichnisstruktur /src/main/java /src/main/resources /src/main/webapp /src/test/java /src/test/resources /target/classes /target/test-classes
Maven Plugins Im Kern ist Maven eine Laufzeitumgebung für Plugins Diese stellen die eigentlichen Build-Funktionenals „Goals“ zur Verfügung Das „Super POM“ macht die gebräuchlichsten Plugins verfügbar (compile, „test“, jar, war, ...) Weitere können in Projekt-POM registriert werden
Beispiel: Jetty Plugin <!-- ... --> <build>     <plugins> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> </plugin> </plugins> </build> <!-- ... --> ...und „mvnjetty:run“ startet Jetty
Build Lifecycle Sequenz von „Build-Phasen“ Eingebaute Lifecycle: „clean“, „default“, „site“ Auszug aus Default Lifecycle: validate test verify compile package install deploy int.-test test-comp.
Build Lifecycle (2) Plugin Goals können an Lifecycle-Phasen gebunden werden Binding wird durch Packaging Type ausgewählt Maven gibt bereits Bindungen vor Plugins können neue Bindungen definieren Bindungen und Lifecycle anpassen neue PackagingTypes definieren
Beispiel: Binding für jar/war Auszug aus dem Lifecycle Binding für Packaging Type jar und war
Beispiel: Custom Binding (1)  <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>sql-maven-plugin</artifactId> <!-- ... --> <executions> <execution>             <id>create-schema-before-test</id> <!-- ... -->         <execution> <execution>             <id>drop-schema-after-test</id> <!-- ... -->         <execution>     </executions> </plugin> Auszug aus einem POM: Konfiguration für SQL Plugin mit zwei Executions
Beispiel: Custom Binding (2) <execution> <id>create-schema-before-test</id> <phase>pre-integration-test</phase> <goals> <goal>execute</goal> </goals> <configuration> <srcFiles> <srcFile> src/main/sql/schema-create.sql </srcFile> </srcFiles> </configuration> </execution> Auszug aus einem POM: Execution-Konfiguration für die Phase „pre-integration-test“
POMs und Vererbung POMs können von einem Parent POM erben Wurzel ist das „Super POM“ Ein Parent POM kann vererben: Plugin-Konfigurationen Dependencies vieles mehr... Häufig in Verbindung mit Multimodul-Projekten
Multimodul-Projekte Ein Maven-Projekt kann nur ein Artefakt produzieren Maven forciert dadurch die Aufteilung eines Projekts auf mehrere Sub-Projekte Diese können durch ein Multimodul-Projekt zusammengefasst und gemeinsam gebaut werden Multimodul-POM ist meist auch Parent POM
Beispiel: Multimodul-Projekt opitztoys.domain opitztoys.service opitztoys.project opitztoys.service.impl „inherits from“ <<runtime>> „aggregates“ opitztoys.webapp „Dependency“
Dependency Management Dependencies beschreiben Abhängigkeiten zuJava-Bibliotheken (JARs) werden über „Artefakt-Koordinaten“ spezifiziert können durch „Scopes“ (compile, test, runtime, provided, ...) qualifiziert werden werden bei Bedarf aus einem „RemoteRepository“ heruntergeladen
Beispiel: Dependency zu JUnit 4.4 <dependencies> <!-- JUnit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.4</version> <scope>test</scope> </dependency> <!-- ... --> </dependencies>
Maven Repositories Stellen Artefakte bereit Lokal: 	im Filesystem („~/.m2/repository“) Remote:	als „Web Service“ zum Download Default RemoteRepository: http://repo1.maven.org/maven2 Weitere Repositories können im Projekt-POM registriert werden
Maven Repositories (2) repo1.maven.org ~/.m2/repository Dependency repository.springsource.com On DemandDownload pom.xml repository.jboss.org
Repository Manager Stellt Remote Repository Service bereit Zweck: Zentraler Proxy für benötigte Remote Repositories Bereitstellung nicht öffentlich verfügbarer JARs Kontrolle über verwendete JARs Verteilung selbsterstellter Artefakte
Repository Manager (2) repo1.maven.org ~/.m2/repository RepositoryManager Dependency repository.springsource.com On DemandDownload pom.xml repository.jboss.org
Repository Manager (3) Empfehlung: Repository Manager einsetzen! Pro Projekt Unternehmensweit Ggf. gestaffelt: Unternehmen & pro Projekt Einige R.M.-Implementierungen: SonatypeNexus 	http://nexus.sonatype.org/ JFrogArtifactoryhttp://www.jfrog.org/products.php Archivahttp://archiva.apache.org/
Site-Generierung Webseite mit „Projektsteckbrief“ Einbetten von JavaDoc und Projektdoku. Einbetten von Berichten durch Reporting-Plugins: Checkstyle, JUnit/TestNG, Corbatura, PMD, FindBugs, JDepend, ... Beispiele: Siehe Open-Source-Projekte, die Maven verwenden...
Maven und IDEs Eclipse eclipse:		Maven Plugin für Eclipse m2eclipse:	Eclipse Plugin für Maven Eclipse IAM:	Integration von eclipse.org NetBeans 	Ab Version 6.7 direktes Ausführen von Maven IntelliJ 	Build-In-Support für Import von Maven-Projekten
Maven und Continuous Integration Support durch diverse CI-Server CruiseControl Continuum Hudson TeamCity Bamboo ...
Mavenund OSGi Auf den ersten Blick passen Maven und OSGi gut zusammen Die Dependency-Konzepte unterscheiden sich aber grundlegend... Und: „Wer ist der Boss“? Es gibt aber Integrationssupport Maven-Bundle-Pluginhttp://tinyurl.com/66q93b PaxConstructhttp://www.ops4j.org/projects/pax/construct SpringSourceBundlorhttp://www.springsource.org/bundlor Tycho http://docs.codehaus.org/display/M2ECLIPSE/Tycho+project+overview
Maven 3 Umfangreiches Refactoring der Codebase Neue API für Artifact Resolution Bessere Unterstützung für IDE-Integration Kompatibilität mit Maven 2 wird durch Integrationstests sichergestellt Siehe auchhttp://www.sonatype.com/events/meetup0309/jason-on-maven3
Fazit und Bewertung Standardisierung zahlt sich bei einer großen Zahlvon Projekten aus Schnelle Ergebnisse bei Standard-Anforderungen Für komplexere Anpassungen ist jedoch umfangreiche Einarbeitung nötig Passt evtl. nicht bei sehr individuellen Anforderungen(bzw. sehr großer Aufwand)
Links Projekt-Seite http://maven.apache.org/ MavenThe Definitive Guide http://www.sonatype.com/books/maven-book/reference/ DZoneRefcard http://refcardz.dzone.com/refcardz/apache-maven-2 MavenHow Tos http://www.sonatype.com/people/2009/04/summary-of-maven-how-tos/ Nexus http://nexus.sonatype.org/ Artifactory http://www.jfrog.org/products.php m2eclipse http://m2eclipse.codehaus.org/
Fragen und Antworten
Kontakt Stefan Scheidt, Senior Architekt OPITZ CONSULTING Gummersbach GmbH Kirchstraße 6, 51647 Gummersbach stefan.scheidt@opitz-consulting.com

Más contenido relacionado

La actualidad más candente

EntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloadedEntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloaded
René Winkelmeyer
 
JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013
Oliver Zeigermann
 
Rhomobile
RhomobileRhomobile
Rhomobile
Jan Ow
 
Flexibilitaet mit CDI und Apache DeltaSpike
Flexibilitaet mit CDI und Apache DeltaSpikeFlexibilitaet mit CDI und Apache DeltaSpike
Flexibilitaet mit CDI und Apache DeltaSpike
os890
 

La actualidad más candente (20)

Verteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und KubernetesVerteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
 
Fix & fertig: Best Practises für "XPages-Migranten"
Fix & fertig: Best Practises für "XPages-Migranten"Fix & fertig: Best Practises für "XPages-Migranten"
Fix & fertig: Best Practises für "XPages-Migranten"
 
EntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloadedEntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloaded
 
Aber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-Apps
Aber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-AppsAber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-Apps
Aber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-Apps
 
Continuous Integration mit Hudson (JUG Stuttgart, 11.02.2010)
Continuous Integration mit Hudson (JUG Stuttgart, 11.02.2010)Continuous Integration mit Hudson (JUG Stuttgart, 11.02.2010)
Continuous Integration mit Hudson (JUG Stuttgart, 11.02.2010)
 
Spring Boot - Wird Spring jetzt wirklich einfach?
Spring Boot - Wird Spring jetzt wirklich einfach?Spring Boot - Wird Spring jetzt wirklich einfach?
Spring Boot - Wird Spring jetzt wirklich einfach?
 
Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1
 
Continuous Integration mit Hudson (JUG Mannheim, 27.01.2010)
Continuous Integration mit Hudson (JUG Mannheim, 27.01.2010)Continuous Integration mit Hudson (JUG Mannheim, 27.01.2010)
Continuous Integration mit Hudson (JUG Mannheim, 27.01.2010)
 
Ant Maven
Ant MavenAnt Maven
Ant Maven
 
Roadshow: Einstieg in die Hybrid-App Entwicklung mit dem Intel XDK und Apache...
Roadshow: Einstieg in die Hybrid-App Entwicklung mit dem Intel XDK und Apache...Roadshow: Einstieg in die Hybrid-App Entwicklung mit dem Intel XDK und Apache...
Roadshow: Einstieg in die Hybrid-App Entwicklung mit dem Intel XDK und Apache...
 
Build Patterns - Patterns und Best Practices für den Build Prozess
Build Patterns - Patterns und Best Practices für den Build ProzessBuild Patterns - Patterns und Best Practices für den Build Prozess
Build Patterns - Patterns und Best Practices für den Build Prozess
 
JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013
 
Automatisierung mit grunt
Automatisierung mit gruntAutomatisierung mit grunt
Automatisierung mit grunt
 
HTML5 und CSS3 - was jetzt schon möglich ist
HTML5 und CSS3 - was jetzt schon möglich istHTML5 und CSS3 - was jetzt schon möglich ist
HTML5 und CSS3 - was jetzt schon möglich ist
 
Deploy Magento Shops with Capistrano v3
Deploy Magento Shops with Capistrano  v3Deploy Magento Shops with Capistrano  v3
Deploy Magento Shops with Capistrano v3
 
Test-Automation mit Selenium WebDriver - ein Artikel der iks im dotnetpro
Test-Automation mit Selenium WebDriver - ein Artikel der iks im dotnetproTest-Automation mit Selenium WebDriver - ein Artikel der iks im dotnetpro
Test-Automation mit Selenium WebDriver - ein Artikel der iks im dotnetpro
 
Grails im Überblick und in der Praxis
Grails im Überblick und in der PraxisGrails im Überblick und in der Praxis
Grails im Überblick und in der Praxis
 
Taugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
Taugt AngularJS wirklich was? Erfahrungsbericht und AusblickTaugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
Taugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
 
Rhomobile
RhomobileRhomobile
Rhomobile
 
Flexibilitaet mit CDI und Apache DeltaSpike
Flexibilitaet mit CDI und Apache DeltaSpikeFlexibilitaet mit CDI und Apache DeltaSpike
Flexibilitaet mit CDI und Apache DeltaSpike
 

Destacado

Kritiske øjeblikke i etniske minoritetsunges transitioner
Kritiske øjeblikke i etniske minoritetsunges transitionerKritiske øjeblikke i etniske minoritetsunges transitioner
Kritiske øjeblikke i etniske minoritetsunges transitioner
SFI-slides
 
Das erwartet dich bei haub-haub
Das erwartet dich bei haub-haubDas erwartet dich bei haub-haub
Das erwartet dich bei haub-haub
Dan Weber
 
Reifendruck-Kontrollsystem-Pflicht erhöht die Sicherheit
Reifendruck-Kontrollsystem-Pflicht erhöht die SicherheitReifendruck-Kontrollsystem-Pflicht erhöht die Sicherheit
Reifendruck-Kontrollsystem-Pflicht erhöht die Sicherheit
Nokian Tyres / DR. FALK KÖHLER PR
 

Destacado (18)

2009 09 payoff magazine
2009 09 payoff magazine2009 09 payoff magazine
2009 09 payoff magazine
 
Dialogo Ejecutivo - Empresas Nuevas vs Empresas Lideres
Dialogo Ejecutivo - Empresas Nuevas vs Empresas LideresDialogo Ejecutivo - Empresas Nuevas vs Empresas Lideres
Dialogo Ejecutivo - Empresas Nuevas vs Empresas Lideres
 
EL RUGiDO DEL LEÓN BLANCO
EL RUGiDO DEL LEÓN BLANCO EL RUGiDO DEL LEÓN BLANCO
EL RUGiDO DEL LEÓN BLANCO
 
Jahr der Stille
Jahr der StilleJahr der Stille
Jahr der Stille
 
Carlos ruiz
Carlos ruizCarlos ruiz
Carlos ruiz
 
Competencias Pedagógicas Por Armando Sandoval Maravilla
Competencias Pedagógicas Por Armando Sandoval Maravilla  Competencias Pedagógicas Por Armando Sandoval Maravilla
Competencias Pedagógicas Por Armando Sandoval Maravilla
 
Maravilla
MaravillaMaravilla
Maravilla
 
Kritiske øjeblikke i etniske minoritetsunges transitioner
Kritiske øjeblikke i etniske minoritetsunges transitionerKritiske øjeblikke i etniske minoritetsunges transitioner
Kritiske øjeblikke i etniske minoritetsunges transitioner
 
High Performance Websites und Google
High Performance Websites und GoogleHigh Performance Websites und Google
High Performance Websites und Google
 
LAS MÉDULAS EN EL BIERZO
LAS MÉDULAS EN EL BIERZOLAS MÉDULAS EN EL BIERZO
LAS MÉDULAS EN EL BIERZO
 
Das erwartet dich bei haub-haub
Das erwartet dich bei haub-haubDas erwartet dich bei haub-haub
Das erwartet dich bei haub-haub
 
Reifendruck-Kontrollsystem-Pflicht erhöht die Sicherheit
Reifendruck-Kontrollsystem-Pflicht erhöht die SicherheitReifendruck-Kontrollsystem-Pflicht erhöht die Sicherheit
Reifendruck-Kontrollsystem-Pflicht erhöht die Sicherheit
 
Esforse
EsforseEsforse
Esforse
 
Cambiar puntero del mouse
Cambiar puntero del mouseCambiar puntero del mouse
Cambiar puntero del mouse
 
PLUX.NET – SOFTWAREKOMPOSITION DURCH PLUG & PLAY
PLUX.NET – SOFTWAREKOMPOSITION DURCH PLUG & PLAYPLUX.NET – SOFTWAREKOMPOSITION DURCH PLUG & PLAY
PLUX.NET – SOFTWAREKOMPOSITION DURCH PLUG & PLAY
 
Presentación1
Presentación1Presentación1
Presentación1
 
Seminar für die Steuerberaterkammer Stuttgart zum Thema ESUG
Seminar für die Steuerberaterkammer Stuttgart zum Thema ESUGSeminar für die Steuerberaterkammer Stuttgart zum Thema ESUG
Seminar für die Steuerberaterkammer Stuttgart zum Thema ESUG
 
Cariño
CariñoCariño
Cariño
 

Similar a Automatischer Build mit Maven

Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrant
s0enke
 
ESEconf2011 - Bosch Andy: "JavaServer Faces im Portal - Statusbestimmung"
ESEconf2011 - Bosch Andy: "JavaServer Faces im Portal - Statusbestimmung"ESEconf2011 - Bosch Andy: "JavaServer Faces im Portal - Statusbestimmung"
ESEconf2011 - Bosch Andy: "JavaServer Faces im Portal - Statusbestimmung"
Aberla
 

Similar a Automatischer Build mit Maven (20)

Abläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisierenAbläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisieren
 
Vagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenVagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und Architekten
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrant
 
elemente websolutions - Zusammenfassung T3DD09
elemente websolutions - Zusammenfassung T3DD09elemente websolutions - Zusammenfassung T3DD09
elemente websolutions - Zusammenfassung T3DD09
 
JAX 2015 - Continuous Integration mit Java & Javascript
JAX 2015 - Continuous Integration mit Java & JavascriptJAX 2015 - Continuous Integration mit Java & Javascript
JAX 2015 - Continuous Integration mit Java & Javascript
 
Gewinnung von OPEN SOURCE Techniken für junge Unternehmen
Gewinnung von OPEN SOURCE Techniken für junge UnternehmenGewinnung von OPEN SOURCE Techniken für junge Unternehmen
Gewinnung von OPEN SOURCE Techniken für junge Unternehmen
 
GWT
GWTGWT
GWT
 
Einführung in Docker
Einführung in DockerEinführung in Docker
Einführung in Docker
 
Ionic 2 - Hybridapps auf Steroiden
Ionic 2 - Hybridapps auf SteroidenIonic 2 - Hybridapps auf Steroiden
Ionic 2 - Hybridapps auf Steroiden
 
MongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDBMongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDB
 
Top 10 Internet Trends 2003
Top 10 Internet Trends 2003Top 10 Internet Trends 2003
Top 10 Internet Trends 2003
 
Einfacher bauen
Einfacher bauenEinfacher bauen
Einfacher bauen
 
Composer und TYPO3
Composer und TYPO3Composer und TYPO3
Composer und TYPO3
 
Jalimo Slides Linuxtag2007
Jalimo Slides Linuxtag2007Jalimo Slides Linuxtag2007
Jalimo Slides Linuxtag2007
 
Deployment 2.0
Deployment 2.0Deployment 2.0
Deployment 2.0
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
ESEconf2011 - Bosch Andy: "JavaServer Faces im Portal - Statusbestimmung"
ESEconf2011 - Bosch Andy: "JavaServer Faces im Portal - Statusbestimmung"ESEconf2011 - Bosch Andy: "JavaServer Faces im Portal - Statusbestimmung"
ESEconf2011 - Bosch Andy: "JavaServer Faces im Portal - Statusbestimmung"
 
Ü̈ber Ant und Maven zu SBT und Gradle
Ü̈ber Ant und Maven zu SBT und GradleÜ̈ber Ant und Maven zu SBT und Gradle
Ü̈ber Ant und Maven zu SBT und Gradle
 
Entwickeln mit Wordpress
Entwickeln mit WordpressEntwickeln mit Wordpress
Entwickeln mit Wordpress
 

Más de Stefan Scheidt

ipdc10: Spring Backends für iOS Apps
ipdc10: Spring Backends für iOS Appsipdc10: Spring Backends für iOS Apps
ipdc10: Spring Backends für iOS Apps
Stefan Scheidt
 
WJAX 2010: Spring Backends für iOS Apps
WJAX 2010: Spring Backends für iOS AppsWJAX 2010: Spring Backends für iOS Apps
WJAX 2010: Spring Backends für iOS Apps
Stefan Scheidt
 

Más de Stefan Scheidt (10)

Kotlin DSLs
Kotlin DSLsKotlin DSLs
Kotlin DSLs
 
Understanding the Four Rules of Simple Design
Understanding the Four Rules of Simple DesignUnderstanding the Four Rules of Simple Design
Understanding the Four Rules of Simple Design
 
iOS Einstieg und Ausblick
iOS Einstieg und AusblickiOS Einstieg und Ausblick
iOS Einstieg und Ausblick
 
iOS: Einstieg und Ausblick
iOS: Einstieg und AusblickiOS: Einstieg und Ausblick
iOS: Einstieg und Ausblick
 
Java script data binding mit jQuery Mobile
Java script data binding mit jQuery MobileJava script data binding mit jQuery Mobile
Java script data binding mit jQuery Mobile
 
Test driven java script development
Test driven java script developmentTest driven java script development
Test driven java script development
 
Fruehling fuers iPhone
Fruehling fuers iPhoneFruehling fuers iPhone
Fruehling fuers iPhone
 
Maven 3 New Features
Maven 3 New FeaturesMaven 3 New Features
Maven 3 New Features
 
ipdc10: Spring Backends für iOS Apps
ipdc10: Spring Backends für iOS Appsipdc10: Spring Backends für iOS Apps
ipdc10: Spring Backends für iOS Apps
 
WJAX 2010: Spring Backends für iOS Apps
WJAX 2010: Spring Backends für iOS AppsWJAX 2010: Spring Backends für iOS Apps
WJAX 2010: Spring Backends für iOS Apps
 

Automatischer Build mit Maven

  • 1. Stefan Scheidt, Senior Architekt OPITZ CONSULTING Gummersbach GmbH Automatischer Build mit Maven
  • 2. Wer ist OPITZ CONSULTING? Last Minute: Offizieller OC 1 Seiter Von Tom Ihr Projektspezialist für Java, SOA und Oracle
  • 3. Wer bin ich? Software-Entwickler und Architekt Trainer und Coach Sprecher und Autor
  • 4. (Keine) Motivation In diesem Vortrag keine Motivation für Build-Automatisierung Aber ein paar Ziele: Automatisiertes Testen Continuous Integration Code-Qualität
  • 5. Was ist Maven? „Software Project Management Tool“ DeklarativesBuild-System Convention overConfiguration Wiederverwendung durch Plugins Dependency Management Tool für technisches Projekt-Reporting
  • 6. Was ist Maven? (2) Open-Source-Projekt bei Apache Entstanden 2002 für diverse Apache-Projekte Ziel: Vereinheitlichen von Build Verteilung Erstellen einer Projekt-Webseite Don‘trepeatyourself! Siehe auch http://maven.apache.org/what-is-maven.html
  • 7. Das „Project Object Model“ (POM) Beschreibt ein Projekt für Maven... „Artefakt-Koordinaten“ Informationen für die Webseite Was enthält das Projekt? Welche Abhängigkeiten hat das Projekt? ...als XSD-basierte XML-Datei
  • 8. (Nahezu) minimales POM <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd“> <modelVersion>4.0.0</modelVersion> <groupId>de.opitzconsulting</groupId> <artifactId>hellomaven</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>jar</packaging> <name>Hello Maven</name> <description>Simple Maven Project</description> </project>
  • 9. Convention over Configuration Diese Projektbeschreibung wird durch Voreinstellungen ergänzt, ... ... die im „Super POM“ definiert sindhttp://maven.apache.org/pom.html#The_Super_POM Dadurch kann man jetzt schon kompilieren,(JUnit-)Tests ausführen, JAR bauen, JAR verteilen,Projekt-Website generieren...
  • 10. Standard-Verzeichnisstruktur /src/main/java /src/main/resources /src/main/webapp /src/test/java /src/test/resources /target/classes /target/test-classes
  • 11. Maven Plugins Im Kern ist Maven eine Laufzeitumgebung für Plugins Diese stellen die eigentlichen Build-Funktionenals „Goals“ zur Verfügung Das „Super POM“ macht die gebräuchlichsten Plugins verfügbar (compile, „test“, jar, war, ...) Weitere können in Projekt-POM registriert werden
  • 12. Beispiel: Jetty Plugin <!-- ... --> <build> <plugins> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> </plugin> </plugins> </build> <!-- ... --> ...und „mvnjetty:run“ startet Jetty
  • 13. Build Lifecycle Sequenz von „Build-Phasen“ Eingebaute Lifecycle: „clean“, „default“, „site“ Auszug aus Default Lifecycle: validate test verify compile package install deploy int.-test test-comp.
  • 14. Build Lifecycle (2) Plugin Goals können an Lifecycle-Phasen gebunden werden Binding wird durch Packaging Type ausgewählt Maven gibt bereits Bindungen vor Plugins können neue Bindungen definieren Bindungen und Lifecycle anpassen neue PackagingTypes definieren
  • 15. Beispiel: Binding für jar/war Auszug aus dem Lifecycle Binding für Packaging Type jar und war
  • 16. Beispiel: Custom Binding (1) <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>sql-maven-plugin</artifactId> <!-- ... --> <executions> <execution> <id>create-schema-before-test</id> <!-- ... --> <execution> <execution> <id>drop-schema-after-test</id> <!-- ... --> <execution> </executions> </plugin> Auszug aus einem POM: Konfiguration für SQL Plugin mit zwei Executions
  • 17. Beispiel: Custom Binding (2) <execution> <id>create-schema-before-test</id> <phase>pre-integration-test</phase> <goals> <goal>execute</goal> </goals> <configuration> <srcFiles> <srcFile> src/main/sql/schema-create.sql </srcFile> </srcFiles> </configuration> </execution> Auszug aus einem POM: Execution-Konfiguration für die Phase „pre-integration-test“
  • 18. POMs und Vererbung POMs können von einem Parent POM erben Wurzel ist das „Super POM“ Ein Parent POM kann vererben: Plugin-Konfigurationen Dependencies vieles mehr... Häufig in Verbindung mit Multimodul-Projekten
  • 19. Multimodul-Projekte Ein Maven-Projekt kann nur ein Artefakt produzieren Maven forciert dadurch die Aufteilung eines Projekts auf mehrere Sub-Projekte Diese können durch ein Multimodul-Projekt zusammengefasst und gemeinsam gebaut werden Multimodul-POM ist meist auch Parent POM
  • 20. Beispiel: Multimodul-Projekt opitztoys.domain opitztoys.service opitztoys.project opitztoys.service.impl „inherits from“ <<runtime>> „aggregates“ opitztoys.webapp „Dependency“
  • 21. Dependency Management Dependencies beschreiben Abhängigkeiten zuJava-Bibliotheken (JARs) werden über „Artefakt-Koordinaten“ spezifiziert können durch „Scopes“ (compile, test, runtime, provided, ...) qualifiziert werden werden bei Bedarf aus einem „RemoteRepository“ heruntergeladen
  • 22. Beispiel: Dependency zu JUnit 4.4 <dependencies> <!-- JUnit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.4</version> <scope>test</scope> </dependency> <!-- ... --> </dependencies>
  • 23. Maven Repositories Stellen Artefakte bereit Lokal: im Filesystem („~/.m2/repository“) Remote: als „Web Service“ zum Download Default RemoteRepository: http://repo1.maven.org/maven2 Weitere Repositories können im Projekt-POM registriert werden
  • 24. Maven Repositories (2) repo1.maven.org ~/.m2/repository Dependency repository.springsource.com On DemandDownload pom.xml repository.jboss.org
  • 25. Repository Manager Stellt Remote Repository Service bereit Zweck: Zentraler Proxy für benötigte Remote Repositories Bereitstellung nicht öffentlich verfügbarer JARs Kontrolle über verwendete JARs Verteilung selbsterstellter Artefakte
  • 26. Repository Manager (2) repo1.maven.org ~/.m2/repository RepositoryManager Dependency repository.springsource.com On DemandDownload pom.xml repository.jboss.org
  • 27. Repository Manager (3) Empfehlung: Repository Manager einsetzen! Pro Projekt Unternehmensweit Ggf. gestaffelt: Unternehmen & pro Projekt Einige R.M.-Implementierungen: SonatypeNexus http://nexus.sonatype.org/ JFrogArtifactoryhttp://www.jfrog.org/products.php Archivahttp://archiva.apache.org/
  • 28. Site-Generierung Webseite mit „Projektsteckbrief“ Einbetten von JavaDoc und Projektdoku. Einbetten von Berichten durch Reporting-Plugins: Checkstyle, JUnit/TestNG, Corbatura, PMD, FindBugs, JDepend, ... Beispiele: Siehe Open-Source-Projekte, die Maven verwenden...
  • 29. Maven und IDEs Eclipse eclipse: Maven Plugin für Eclipse m2eclipse: Eclipse Plugin für Maven Eclipse IAM: Integration von eclipse.org NetBeans Ab Version 6.7 direktes Ausführen von Maven IntelliJ Build-In-Support für Import von Maven-Projekten
  • 30. Maven und Continuous Integration Support durch diverse CI-Server CruiseControl Continuum Hudson TeamCity Bamboo ...
  • 31. Mavenund OSGi Auf den ersten Blick passen Maven und OSGi gut zusammen Die Dependency-Konzepte unterscheiden sich aber grundlegend... Und: „Wer ist der Boss“? Es gibt aber Integrationssupport Maven-Bundle-Pluginhttp://tinyurl.com/66q93b PaxConstructhttp://www.ops4j.org/projects/pax/construct SpringSourceBundlorhttp://www.springsource.org/bundlor Tycho http://docs.codehaus.org/display/M2ECLIPSE/Tycho+project+overview
  • 32. Maven 3 Umfangreiches Refactoring der Codebase Neue API für Artifact Resolution Bessere Unterstützung für IDE-Integration Kompatibilität mit Maven 2 wird durch Integrationstests sichergestellt Siehe auchhttp://www.sonatype.com/events/meetup0309/jason-on-maven3
  • 33. Fazit und Bewertung Standardisierung zahlt sich bei einer großen Zahlvon Projekten aus Schnelle Ergebnisse bei Standard-Anforderungen Für komplexere Anpassungen ist jedoch umfangreiche Einarbeitung nötig Passt evtl. nicht bei sehr individuellen Anforderungen(bzw. sehr großer Aufwand)
  • 34. Links Projekt-Seite http://maven.apache.org/ MavenThe Definitive Guide http://www.sonatype.com/books/maven-book/reference/ DZoneRefcard http://refcardz.dzone.com/refcardz/apache-maven-2 MavenHow Tos http://www.sonatype.com/people/2009/04/summary-of-maven-how-tos/ Nexus http://nexus.sonatype.org/ Artifactory http://www.jfrog.org/products.php m2eclipse http://m2eclipse.codehaus.org/
  • 36. Kontakt Stefan Scheidt, Senior Architekt OPITZ CONSULTING Gummersbach GmbH Kirchstraße 6, 51647 Gummersbach stefan.scheidt@opitz-consulting.com