SlideShare ist ein Scribd-Unternehmen logo
1 von 36
Stefan ScheidtSenior Architekt OPITZ CONSULTING Gummersbach GmbH Düsseldorf, 01.10.2009 Automatischer Build mit Maven
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? (1) „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 <projectxmlns="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>HelloMaven</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: JettyPlugin <!-- ... --> <build>     <plugins> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> </plugin> </plugins> </build> <!-- ... --> ...und „mvnjetty:run“ startet Jetty
BuildLifecycle (1) 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>
MavenRepositories (1) 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 (1) 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 und pro Projekt Einige Repository-Manager-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:		MavenPlugin für Eclipse m2eclipse:	EclipsePlugin 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
Ansprechpartner bei OPITZ CONSULTING Stefan Scheidt, Senior Architekt OPITZ CONSULTING Gummersbach GmbHKirchstraße 6, 51647 Gummersbachstefan.scheidt@opitz-consulting.com

Weitere ähnliche Inhalte

Was ist angesagt?

Flexibilitaet mit CDI und Apache DeltaSpike
Flexibilitaet mit CDI und Apache DeltaSpikeFlexibilitaet mit CDI und Apache DeltaSpike
Flexibilitaet mit CDI und Apache DeltaSpike
os890
 
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
inovex GmbH
 
EntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloadedEntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloaded
René Winkelmeyer
 
Auszug Seminarunterlagen "Tomcat 6.x"
Auszug Seminarunterlagen "Tomcat 6.x"Auszug Seminarunterlagen "Tomcat 6.x"
Auszug Seminarunterlagen "Tomcat 6.x"
schellsoft
 

Was ist angesagt? (20)

Flexibilitaet mit CDI und Apache DeltaSpike
Flexibilitaet mit CDI und Apache DeltaSpikeFlexibilitaet mit CDI und Apache DeltaSpike
Flexibilitaet mit CDI und Apache DeltaSpike
 
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)
 
Containerized End-2-End Testing - JUG Saxony Day
Containerized End-2-End Testing - JUG Saxony DayContainerized End-2-End Testing - JUG Saxony Day
Containerized End-2-End Testing - JUG Saxony Day
 
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)
 
Entwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, PuppetEntwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, Puppet
 
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"
 
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
 
EntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloadedEntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloaded
 
Iks Sonderdruck Eclipse Magazin Mai 2010: Automatisierte SWTBot-Tests
Iks Sonderdruck Eclipse Magazin Mai 2010: Automatisierte SWTBot-TestsIks Sonderdruck Eclipse Magazin Mai 2010: Automatisierte SWTBot-Tests
Iks Sonderdruck Eclipse Magazin Mai 2010: Automatisierte SWTBot-Tests
 
Testing tools
Testing toolsTesting tools
Testing tools
 
Deploy Magento Shops with Capistrano v3
Deploy Magento Shops with Capistrano  v3Deploy Magento Shops with Capistrano  v3
Deploy Magento Shops with Capistrano v3
 
Deployment 2.0
Deployment 2.0Deployment 2.0
Deployment 2.0
 
Perl Renaissance Reloaded
Perl Renaissance ReloadedPerl Renaissance Reloaded
Perl Renaissance Reloaded
 
Softwarequalitätssicherung mit Continuous Integration Tools
 Softwarequalitätssicherung mit Continuous Integration Tools Softwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration Tools
 
Ant im Detail
Ant im DetailAnt im Detail
Ant im Detail
 
Auszug Seminarunterlagen "Tomcat 6.x"
Auszug Seminarunterlagen "Tomcat 6.x"Auszug Seminarunterlagen "Tomcat 6.x"
Auszug Seminarunterlagen "Tomcat 6.x"
 
Electron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Electron.NET: Cross-Platform Desktop Software mit ASP.NET CoreElectron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Electron.NET: Cross-Platform Desktop Software mit ASP.NET Core
 
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
 
JBoss AS 7 als Plattform moderner Enterprise-Anwendungen
JBoss AS 7 als Plattform moderner Enterprise-AnwendungenJBoss AS 7 als Plattform moderner Enterprise-Anwendungen
JBoss AS 7 als Plattform moderner Enterprise-Anwendungen
 
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
 

Andere mochten auch

Jkt Corporate Profile
Jkt Corporate ProfileJkt Corporate Profile
Jkt Corporate Profile
GauravRshukla
 
26 enero valencia_ericka
26 enero valencia_ericka26 enero valencia_ericka
26 enero valencia_ericka
Ericka Valencia
 
Medios de transportes
Medios de transportesMedios de transportes
Medios de transportes
yimara28
 
Procesos para colocar marcos, hipervínculo y video en dw
Procesos para colocar marcos, hipervínculo y video en dwProcesos para colocar marcos, hipervínculo y video en dw
Procesos para colocar marcos, hipervínculo y video en dw
fernanpolanc
 

Andere mochten auch (20)

Cloud ms0.9
Cloud ms0.9Cloud ms0.9
Cloud ms0.9
 
Cloud Characteristics
Cloud CharacteristicsCloud Characteristics
Cloud Characteristics
 
03 EAI - Enterprise Application Integration
03 EAI - Enterprise Application Integration03 EAI - Enterprise Application Integration
03 EAI - Enterprise Application Integration
 
Cloud Financials
Cloud FinancialsCloud Financials
Cloud Financials
 
Testate On Line
Testate On LineTestate On Line
Testate On Line
 
Jkt Corporate Profile
Jkt Corporate ProfileJkt Corporate Profile
Jkt Corporate Profile
 
Canulas
CanulasCanulas
Canulas
 
Datentypen LabVIEW
Datentypen LabVIEWDatentypen LabVIEW
Datentypen LabVIEW
 
Enterprise application market (solutions, delivery model, verticals and geogr...
Enterprise application market (solutions, delivery model, verticals and geogr...Enterprise application market (solutions, delivery model, verticals and geogr...
Enterprise application market (solutions, delivery model, verticals and geogr...
 
Dependency Injection - A practical introduction
Dependency Injection - A practical introductionDependency Injection - A practical introduction
Dependency Injection - A practical introduction
 
26 enero valencia_ericka
26 enero valencia_ericka26 enero valencia_ericka
26 enero valencia_ericka
 
Sesión Ley de Víctimas - Presentación de la Alcaldía de Medellín
Sesión Ley de Víctimas - Presentación de la Alcaldía de MedellínSesión Ley de Víctimas - Presentación de la Alcaldía de Medellín
Sesión Ley de Víctimas - Presentación de la Alcaldía de Medellín
 
6. Community Training ITmitte Protokoll
6. Community Training ITmitte Protokoll 6. Community Training ITmitte Protokoll
6. Community Training ITmitte Protokoll
 
Medios de transportes
Medios de transportesMedios de transportes
Medios de transportes
 
Dia del estudiante
Dia del estudianteDia del estudiante
Dia del estudiante
 
Agua y sales
Agua y salesAgua y sales
Agua y sales
 
Biodiversidad
BiodiversidadBiodiversidad
Biodiversidad
 
Cdak
CdakCdak
Cdak
 
Procesos para colocar marcos, hipervínculo y video en dw
Procesos para colocar marcos, hipervínculo y video en dwProcesos para colocar marcos, hipervínculo y video en dw
Procesos para colocar marcos, hipervínculo y video en dw
 
Cáncer de sitio primario desconocido cance of unkonw origin
Cáncer de sitio primario desconocido cance of unkonw originCáncer de sitio primario desconocido cance of unkonw origin
Cáncer de sitio primario desconocido cance of unkonw origin
 

Ähnlich wie Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt

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
 

Ähnlich wie Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt (20)

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?
 
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
 
GWT
GWTGWT
GWT
 
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
 
Automatisierung mit grunt
Automatisierung mit gruntAutomatisierung mit grunt
Automatisierung mit grunt
 
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
 
elemente websolutions - Zusammenfassung T3DD09
elemente websolutions - Zusammenfassung T3DD09elemente websolutions - Zusammenfassung T3DD09
elemente websolutions - Zusammenfassung T3DD09
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrant
 
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"
 
Top 10 Internet Trends 2003
Top 10 Internet Trends 2003Top 10 Internet Trends 2003
Top 10 Internet Trends 2003
 
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreHands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
 
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
 
Einführung in Docker
Einführung in DockerEinführung in Docker
Einführung in Docker
 
Entwickeln mit Wordpress
Entwickeln mit WordpressEntwickeln mit Wordpress
Entwickeln mit Wordpress
 
Wicket Kurzübersicht
Wicket KurzübersichtWicket Kurzübersicht
Wicket Kurzübersicht
 
Einsteiger Workshop
Einsteiger WorkshopEinsteiger Workshop
Einsteiger Workshop
 
Top 10 Internet Trends 2006
Top 10 Internet Trends 2006Top 10 Internet Trends 2006
Top 10 Internet Trends 2006
 
Einfacher bauen
Einfacher bauenEinfacher bauen
Einfacher bauen
 
B3 Lotus Expeditor Und Composite Applications
B3 Lotus Expeditor Und Composite ApplicationsB3 Lotus Expeditor Und Composite Applications
B3 Lotus Expeditor Und Composite Applications
 

Mehr von OPITZ CONSULTING Deutschland

Mehr von OPITZ CONSULTING Deutschland (20)

OC|Webcast: Grundlagen der Oracle Lizenzierung
OC|Webcast: Grundlagen der Oracle LizenzierungOC|Webcast: Grundlagen der Oracle Lizenzierung
OC|Webcast: Grundlagen der Oracle Lizenzierung
 
OC|Webcast "Java heute" vom 28.09.2021
OC|Webcast "Java heute" vom 28.09.2021OC|Webcast "Java heute" vom 28.09.2021
OC|Webcast "Java heute" vom 28.09.2021
 
OC|Webcast "Java heute" vom 24.08.2021
OC|Webcast "Java heute" vom 24.08.2021OC|Webcast "Java heute" vom 24.08.2021
OC|Webcast "Java heute" vom 24.08.2021
 
OC|Webcast "Daten wirklich nutzen"
OC|Webcast "Daten wirklich nutzen"OC|Webcast "Daten wirklich nutzen"
OC|Webcast "Daten wirklich nutzen"
 
Architecture Room Stuttgart - "Cloud-native ist nur ein Teil des Spiels!"
Architecture Room Stuttgart - "Cloud-native ist nur ein Teil des Spiels!"Architecture Room Stuttgart - "Cloud-native ist nur ein Teil des Spiels!"
Architecture Room Stuttgart - "Cloud-native ist nur ein Teil des Spiels!"
 
OC|Webcast "Willkommen in der Cloud!"
OC|Webcast "Willkommen in der Cloud!"OC|Webcast "Willkommen in der Cloud!"
OC|Webcast "Willkommen in der Cloud!"
 
OC|Webcast "Die neue Welt der Virtualisierung"
OC|Webcast "Die neue Welt der Virtualisierung"OC|Webcast "Die neue Welt der Virtualisierung"
OC|Webcast "Die neue Welt der Virtualisierung"
 
10 Thesen zur professionellen Softwareentwicklung
10 Thesen zur professionellen Softwareentwicklung10 Thesen zur professionellen Softwareentwicklung
10 Thesen zur professionellen Softwareentwicklung
 
OC|Webcast: Oracle Lizenzierung - Lizenznews 2021
OC|Webcast: Oracle Lizenzierung - Lizenznews 2021OC|Webcast: Oracle Lizenzierung - Lizenznews 2021
OC|Webcast: Oracle Lizenzierung - Lizenznews 2021
 
OC|Webcast: Oracle Lizenzierung - Die größten Fallen in der Praxis
OC|Webcast: Oracle Lizenzierung - Die größten Fallen in der PraxisOC|Webcast: Oracle Lizenzierung - Die größten Fallen in der Praxis
OC|Webcast: Oracle Lizenzierung - Die größten Fallen in der Praxis
 
OC|Webcast: Oracle Lizenzierung - Virtualisierung und Cloud
OC|Webcast: Oracle Lizenzierung - Virtualisierung und CloudOC|Webcast: Oracle Lizenzierung - Virtualisierung und Cloud
OC|Webcast: Oracle Lizenzierung - Virtualisierung und Cloud
 
OC|Webcast: Grundlagen der Oracle-Lizenzierung
OC|Webcast: Grundlagen der Oracle-LizenzierungOC|Webcast: Grundlagen der Oracle-Lizenzierung
OC|Webcast: Grundlagen der Oracle-Lizenzierung
 
OC|Weekly Talk: Inspect’n’Adapt – Make Change come true!
OC|Weekly Talk: Inspect’n’Adapt – Make Change come true!OC|Weekly Talk: Inspect’n’Adapt – Make Change come true!
OC|Weekly Talk: Inspect’n’Adapt – Make Change come true!
 
OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...
OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...
OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...
 
OC|Weekly Talk The Power of DevOps…
OC|Weekly Talk  The Power of DevOps…OC|Weekly Talk  The Power of DevOps…
OC|Weekly Talk The Power of DevOps…
 
OC|Weekly Talk: "Das müsste man mal digitalisieren" - Mit Low-Code schnell zu...
OC|Weekly Talk: "Das müsste man mal digitalisieren" - Mit Low-Code schnell zu...OC|Weekly Talk: "Das müsste man mal digitalisieren" - Mit Low-Code schnell zu...
OC|Weekly Talk: "Das müsste man mal digitalisieren" - Mit Low-Code schnell zu...
 
OC|Weekly Talk: Service Management – Was hat sich durch Corona geändert?
OC|Weekly Talk: Service Management – Was hat sich durch Corona geändert?OC|Weekly Talk: Service Management – Was hat sich durch Corona geändert?
OC|Weekly Talk: Service Management – Was hat sich durch Corona geändert?
 
OC|Weekly Talk - Digitales Coaching & Smart Sparring
OC|Weekly Talk - Digitales Coaching & Smart Sparring OC|Weekly Talk - Digitales Coaching & Smart Sparring
OC|Weekly Talk - Digitales Coaching & Smart Sparring
 
OC|Weekly Talk - Beratung remote
OC|Weekly Talk - Beratung remoteOC|Weekly Talk - Beratung remote
OC|Weekly Talk - Beratung remote
 
Effiziente Betriebsoptimierung durch Cloud Nutzung
Effiziente Betriebsoptimierung durch Cloud NutzungEffiziente Betriebsoptimierung durch Cloud Nutzung
Effiziente Betriebsoptimierung durch Cloud Nutzung
 

Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt

  • 1. Stefan ScheidtSenior Architekt OPITZ CONSULTING Gummersbach GmbH Düsseldorf, 01.10.2009 Automatischer Build mit Maven
  • 2.
  • 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? (1) „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 <projectxmlns="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>HelloMaven</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: JettyPlugin <!-- ... --> <build> <plugins> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> </plugin> </plugins> </build> <!-- ... --> ...und „mvnjetty:run“ startet Jetty
  • 13. BuildLifecycle (1) 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. MavenRepositories (1) 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 (1) 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 und pro Projekt Einige Repository-Manager-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: MavenPlugin für Eclipse m2eclipse: EclipsePlugin 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. Ansprechpartner bei OPITZ CONSULTING Stefan Scheidt, Senior Architekt OPITZ CONSULTING Gummersbach GmbHKirchstraße 6, 51647 Gummersbachstefan.scheidt@opitz-consulting.com