SlideShare une entreprise Scribd logo
1  sur  30
Télécharger pour lire hors ligne
Einführung in Maven
© Zühlke 2010
4. Mai 2010
Torben Knerr
Folie 1
Maven Intro
Einführung in Maven (not the complete reference )
Einführung in Maven
© Zühlke 2010
4. Mai 2010
Torben Knerr
Folie 2
Agenda
1. Maven – was ist Das?
2. Getting Started – eine kurze Demo
3. Grundkonzepte von Maven
4. POM Walkthrough
Einführung in Maven
© Zühlke 2010
4. Mai 2010
Torben Knerr
Folie 3
Maven – was ist Das?
Einführung in Maven
© Zühlke 2010
4. Mai 2010
Torben Knerr
Folie 4
Was ist Maven?
Maven, The Definitive Guide:
• “Maven is an attempt to apply patterns to a project's build
infrastructure in order to promote comprehension and
productivity by providing a clear path in the use of best
practices.”
Maven ist...
• ...ein Build-Tool
• ...ein Abhängigkeiten-Verwalter
• ...ein Repository für Binaries
• ...ganz viel „Convention over Configuration“
Einführung in Maven
© Zühlke 2010
4. Mai 2010
Torben Knerr
Folie 5
Getting Started
Einführung in Maven
© Zühlke 2010
4. Mai 2010
Torben Knerr
Folie 6
Getting Started – eine kurze Demo
Ein neues Java Projekt erstellen:
…so sollte die Struktur aussehen:
mvn archetype:generate 
-DarchetypeArtifactId=maven-archetype-simple 
-DarchetypeGroupId=org.apache.maven.archetypes 
-DgroupId=com.acme 
-DartifactId=maven-intro
maven-intro
| pom.xml
|
---src
+---main
| ---java
| ---com
| ---acme
| App.java
|
---test
---java
---com
---acme
AppTest.java
Einführung in Maven
© Zühlke 2010
4. Mai 2010
Torben Knerr
Folie 7
Getting Started – eine kurze Demo II
Kompilieren, Testen, Verpacken:
Ausgabe:
cd maven-intro
mvn clean package
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building maven-intro
[INFO] task-segment: [clean, install]
[INFO] ------------------------------------------------------------------------
[INFO] [clean:clean {execution: default-clean}]
...
[INFO] [install:install {execution: default-install}]
[INFO] Installing W:01_workspacemaven-introtargetmaven-intro-0.0.1-
SNAPSHOT.jar to W:05_tools.m2repositorycomacmemaven-intro0.0.1-
SNAPSHOTmaven-intro-0.0.1-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4 seconds
[INFO] Finished at: Wed Feb 10 13:39:01 CET 2010
[INFO] Final Memory: 15M/27M
[INFO] ------------------------------------------------------------------------
Build erfolgreich!
Einführung in Maven
© Zühlke 2010
4. Mai 2010
Torben Knerr
Folie 8
Getting Started – eine kurze Demo
(m2eclipse)
Ein neues Java Projekt erstellen:
…und so sollte es aussehen:
File  New  Other…  Maven / Maven Project
Einführung in Maven
© Zühlke 2010
4. Mai 2010
Torben Knerr
Folie 9
Getting Started – eine kurze Demo II
(m2eclipse)
Kompilieren, Testen, Verpacken:
Ausgabe:
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building maven-intro
[INFO] task-segment: [clean, install]
[INFO] ------------------------------------------------------------------------
[INFO] [clean:clean {execution: default-clean}]
...
[INFO] [install:install {execution: default-install}]
[INFO] Installing W:01_workspacemaven-introtargetmaven-intro-0.0.1-
SNAPSHOT.jar to W:05_tools.m2repositorycomacmemaven-intro0.0.1-
SNAPSHOTmaven-intro-0.0.1-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4 seconds
[INFO] Finished at: Wed Feb 10 13:39:01 CET 2010
[INFO] Final Memory: 15M/27M
[INFO] ------------------------------------------------------------------------
Build erfolgreich!
Project  Run As  Maven package
packaged jar file
Einführung in Maven
© Zühlke 2010
4. Mai 2010
Torben Knerr
Folie 10
Grundkonzepte von Maven
Einführung in Maven
© Zühlke 2010
4. Mai 2010
Torben Knerr
Folie 11
Maven Koordinaten
Maven, The Definitive Guide:
• „Maven Coordinates define a set of identifiers which can be used
to uniquely identify a project, a dependency, or a plugin in a
Maven POM.“
Beispiel für eine Koordinate:
Wiederfinden eines Artefakts:
<groupId>com.acme</groupId>
<artifactId>maven-intro</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>
Einführung in Maven
© Zühlke 2010
4. Mai 2010
Torben Knerr
Folie 12
POM Datei
Eine einfache pom.xml:
<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>com.acme</groupId>
<artifactId>maven-intro</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>maven-intro</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
POM = Project
Object Model
Einführung in Maven
© Zühlke 2010
4. Mai 2010
Torben Knerr
Folie 13
Elemente des POM
The Basics
– Maven Koordinaten
– Abhängigkeiten (Parent POM, Dependencies)
– Properties / Variablen
Build Settings
– Build Plugins und deren Konfiguration
– Reports
More Project Information
– Organisation, Entwickler, Lizenzen, etc..
Environment Settings
– Repositories (Dependency Resolution, Distribution)
– Issue Tracking, SCM, Continous Integration, Mailinglisten
– Profile
Die komplette POM Referenz findet
Ihr hier:
http://maven.apache.org/pom.html
Einführung in Maven
© Zühlke 2010
4. Mai 2010
Torben Knerr
Folie 14
Dependencies
werden in der pom.xml definiert
– mittels <dependency>…</dependency>
werden von einem Repository geladen
– vom lokalen .m2 repository
– vom zentralen Maven repository
– von anderen definierten Remote Repositories
sind transitiv
– wenn A  B und B  C, dann A C
haben einen Scope
– meistens:
compile, test, runtime, provided
<dependencies>
<dependency>
<groupId>com.acme</groupId>
<artifactId>some-dependency</artif
<version>1.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
Einführung in Maven
© Zühlke 2010
4. Mai 2010
Torben Knerr
Folie 15
Parent POMs
Vererbungshierarchien können mit Parent POMs
modelliert werden
• Was wird alles vererbt?
• Was passiert beim Überschreiben?
• Was ist die Super POM?
Tipp zum Debuggen vom POMs:
mvn help:effective-pom
<parent>
<groupId>com.acme</groupId>
<artifactId>acme-parent</artifactId>
<version>0.0.1</version>
</parent>
Einführung in Maven
© Zühlke 2010
4. Mai 2010
Torben Knerr
Folie 16
Repositories
Alle Maven Artefakte (Binaries) werden über
Repositories verteilt
• Zentrales Maven Repository
– Das default Repository: http://repo1.maven.org/maven2/
• Lokales Maven Repository
– Lokaler Cache der heruntergeladenen Artefakte
– Hier wird immer zuerst „gesucht“
– Typischerweise in $USER_HOME/.m2/repository
• Weitere Remote Repositories
– z.B. http://your.company.com:8080/artifactory/
Einführung in Maven
© Zühlke 2010
4. Mai 2010
Torben Knerr
Folie 17
Plugins und Goals
Ein Plugin stellt eine Menge von Goals bereit
Goal Executions sind an Phasen gebunden (default phase)
Ein Goal kann aber auch explizit ausgeführt werden
 führt nur „compile“ Goal des maven-compiler-plugin aus
mvn <plugin>:<goal>
mvn compiler:compile
Einführung in Maven
© Zühlke 2010
4. Mai 2010
Torben Knerr
Folie 18
Plugin Konfiguration
Konfiguration in pom.xml
Konsistente Dokumentation für alle Plugins, z.B.
http://maven.apache.org/plugins/maven-surefire-plugin/
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<executions>
<execution>
<id>scala-test</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<testSourceDirectory>src/test/scala</testSourceDirectory>
<includes>
<include>**/*Test.class</include>
<include>**/*Suite.class</include>
<include>**/*Spec.class</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
Einführung in Maven
© Zühlke 2010
4. Mai 2010
Torben Knerr
Folie 19
Build Lifecycle
Ein Build durchläuft mehrere Phasen
An jede Phase können mehrere
Goal Executions gebunden werden
Typischerweise:
 durchläuft alle Phasen (inkl. aller Goals)
bis einschließlich „package“
mvn package
Einführung in Maven
© Zühlke 2010
4. Mai 2010
Torben Knerr
Folie 20
Build Lifecycle (komplett)
http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
Einführung in Maven
© Zühlke 2010
4. Mai 2010
Torben Knerr
Folie 21
Profile
Profile erlauben „angepassten“ Build, z.B.
•für spezielle Betriebssysteme, Umgebungen (dev, prod), usw.
Aktivierung durch:
•<activeByDefault>, -P <profilname>, System Properties, etc...
<profile>
<id>development</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<tomcat.home>W:installtomcat</tomcat.home>
</properties>
</profile>
<profile>
<id>production</id>
<properties>
<tomcat.home>/opt/tomcat</tomcat.home>
</properties>
</profile>
Einführung in Maven
© Zühlke 2010
4. Mai 2010
Torben Knerr
Folie 22
settings.xml
Zentrale (vs. projektspezifische) Konfiguration von:
•Profilen
•Repositories
•Proxies, Mirrors
•Credentials
Global Settings vs. User Settings:
• Global settings.xml: $M2_HOME/conf/settings.xml
• User settings.xml: $USER_HOME/.m2/settings.xml
Einführung in Maven
© Zühlke 2010
4. Mai 2010
Torben Knerr
Folie 23
Nützliche Maven Befehle
Einführung in Maven
© Zühlke 2010
4. Mai 2010
Torben Knerr
Folie 24
Nützliche Maven Befehle (1)
mvn clean
• cleans all files that have been created during the build process in the
target folder
mvn install
• builds the artifact and installs it to your Local Maven Repository
mvn clean install –DskipTests
• cleans the target folder and installs the artifact in the local repository,
but skips the test execution
mvn clean deploy
• cleans the target folder, builds, installs and deploys the artifact to the
configured Remote Maven Repository
Einführung in Maven
© Zühlke 2010
4. Mai 2010
Torben Knerr
Folie 25
Nützliche Maven Befehle (2)
mvn help:effective-pom
• shows the effective POM with all property substitutions and
inherited POMs resolved
mvn dependency:tree
• shows the complete dependency tree (with duplicate dependencies)
mvn dependency:list
• shows the actually resolved dependencies (duplicates are resolved)
Einführung in Maven
© Zühlke 2010
4. Mai 2010
Torben Knerr
Folie 26
Nützliche Maven Befehle (3)
mvn release:prepare
• prepares the release: set pom version to releaseVersion, commit to
svn, create tag in svn, set pom version to next developmentVersion
mvn release:perform
• performs the release: check out tag version to target folder, build
and test the tag version, deploy tag version to maven repository
mvn release:rollback
• if something goes wrong during the release, rollback restores your
working copy to the state before the release and commits this state
to svn
mvn release:clean
• removes auxiliary files that have been created during (a dry run of)
the release process
Einführung in Maven
© Zühlke 2010
4. Mai 2010
Torben Knerr
Folie 27
POM Walkthrough
Einführung in Maven
© Zühlke 2010
4. Mai 2010
Torben Knerr
Folie 28
POM Walkthrough
<insert pom.xml here>
Einführung in Maven
© Zühlke 2010
4. Mai 2010
Torben Knerr
Folie 29
Diskussion / Fragen
POM, Parent POM,
Super POM, Settings?
Multimodul
Projekt?
mvn clean install
vs. deploy?
Maven!?
Vielen Dank! 
Und lassen Sie uns hier weiter diskutieren:

Contenu connexe

Similaire à Maven Intro

Introduction to Apache Maven 3 (German)
Introduction to Apache Maven 3 (German)Introduction to Apache Maven 3 (German)
Introduction to Apache Maven 3 (German)Chris Michael Klinger
 
Automatischer Build mit Maven
Automatischer Build mit MavenAutomatischer Build mit Maven
Automatischer Build mit MavenStefan Scheidt
 
Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?Thorsten Kamann
 
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperr
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperrOracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperr
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperrGunther Pippèrr
 
Grundlagen puppet
Grundlagen puppetGrundlagen puppet
Grundlagen puppetinovex GmbH
 
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan ScheidtAutomatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan ScheidtOPITZ CONSULTING Deutschland
 
Django & Buildout
Django & BuildoutDjango & Buildout
Django & Buildoutzerok
 
OpenShift-Build-Pipelines: Build ► Test ► Run!
OpenShift-Build-Pipelines: Build ► Test ► Run!OpenShift-Build-Pipelines: Build ► Test ► Run!
OpenShift-Build-Pipelines: Build ► Test ► Run!Tobias Schneck
 
Pitfalls bei der iOS-Entwicklung
Pitfalls bei der iOS-EntwicklungPitfalls bei der iOS-Entwicklung
Pitfalls bei der iOS-EntwicklungSven Günther
 
EntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloadedEntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloadedRené Winkelmeyer
 
OSDC 2011 | CFEngine im Praxiseinsatz by Florian Freund
OSDC 2011 |  CFEngine im Praxiseinsatz by Florian FreundOSDC 2011 |  CFEngine im Praxiseinsatz by Florian Freund
OSDC 2011 | CFEngine im Praxiseinsatz by Florian FreundNETWAYS
 
Serverprovisioning in einer dynamischen Infrastruktur
Serverprovisioning in einer dynamischen InfrastrukturServerprovisioning in einer dynamischen Infrastruktur
Serverprovisioning in einer dynamischen Infrastrukturinovex GmbH
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsQAware GmbH
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsJosef Adersberger
 
Pavone espresso workflow_10_5_-_was_ist_neu_0103
Pavone espresso workflow_10_5_-_was_ist_neu_0103Pavone espresso workflow_10_5_-_was_ist_neu_0103
Pavone espresso workflow_10_5_-_was_ist_neu_0103Bjoern Reinhold
 
Ü̈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 Gradleadesso AG
 

Similaire à Maven Intro (20)

Ant Maven
Ant MavenAnt Maven
Ant Maven
 
Introduction to Apache Maven 3 (German)
Introduction to Apache Maven 3 (German)Introduction to Apache Maven 3 (German)
Introduction to Apache Maven 3 (German)
 
Automatischer Build mit Maven
Automatischer Build mit MavenAutomatischer Build mit Maven
Automatischer Build mit Maven
 
Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?
 
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperr
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperrOracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperr
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperr
 
Einführung in Docker
Einführung in DockerEinführung in Docker
Einführung in Docker
 
Grundlagen puppet
Grundlagen puppetGrundlagen puppet
Grundlagen puppet
 
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan ScheidtAutomatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
 
Django & Buildout
Django & BuildoutDjango & Buildout
Django & Buildout
 
OpenShift-Build-Pipelines: Build ► Test ► Run!
OpenShift-Build-Pipelines: Build ► Test ► Run!OpenShift-Build-Pipelines: Build ► Test ► Run!
OpenShift-Build-Pipelines: Build ► Test ► Run!
 
Pitfalls bei der iOS-Entwicklung
Pitfalls bei der iOS-EntwicklungPitfalls bei der iOS-Entwicklung
Pitfalls bei der iOS-Entwicklung
 
EntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloadedEntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloaded
 
OSDC 2011 | CFEngine im Praxiseinsatz by Florian Freund
OSDC 2011 |  CFEngine im Praxiseinsatz by Florian FreundOSDC 2011 |  CFEngine im Praxiseinsatz by Florian Freund
OSDC 2011 | CFEngine im Praxiseinsatz by Florian Freund
 
Serverprovisioning in einer dynamischen Infrastruktur
Serverprovisioning in einer dynamischen InfrastrukturServerprovisioning in einer dynamischen Infrastruktur
Serverprovisioning in einer dynamischen Infrastruktur
 
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
 
OC|Webcast: Oracle Lizenzierung - Lizenznews 2021
OC|Webcast: Oracle Lizenzierung - Lizenznews 2021OC|Webcast: Oracle Lizenzierung - Lizenznews 2021
OC|Webcast: Oracle Lizenzierung - Lizenznews 2021
 
Einführung Maven
Einführung MavenEinführung Maven
Einführung Maven
 
Pavone espresso workflow_10_5_-_was_ist_neu_0103
Pavone espresso workflow_10_5_-_was_ist_neu_0103Pavone espresso workflow_10_5_-_was_ist_neu_0103
Pavone espresso workflow_10_5_-_was_ist_neu_0103
 
Ü̈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
 

Plus de Torben Knerr

Monitoring in Azure
Monitoring in AzureMonitoring in Azure
Monitoring in AzureTorben Knerr
 
Zuehlke Camp 2017: Chef vs Ansible session
Zuehlke Camp 2017: Chef vs Ansible sessionZuehlke Camp 2017: Chef vs Ansible session
Zuehlke Camp 2017: Chef vs Ansible sessionTorben Knerr
 
Automatisierte Entwickler VMs -- "works on my machine" zählt nicht mehr ;-)
Automatisierte Entwickler VMs -- "works on my machine" zählt nicht mehr ;-)Automatisierte Entwickler VMs -- "works on my machine" zählt nicht mehr ;-)
Automatisierte Entwickler VMs -- "works on my machine" zählt nicht mehr ;-)Torben Knerr
 
Kollaboration in Java Projekten - Anspruch und Realität
Kollaboration in Java Projekten - Anspruch und RealitätKollaboration in Java Projekten - Anspruch und Realität
Kollaboration in Java Projekten - Anspruch und RealitätTorben Knerr
 
Cooking with Chef, Knife, Vagrant and Co
Cooking with Chef, Knife, Vagrant and CoCooking with Chef, Knife, Vagrant and Co
Cooking with Chef, Knife, Vagrant and CoTorben Knerr
 
Zu viele Köche verderben den Brei - Kochschule für Devs und Ops mit Chef, Vag...
Zu viele Köche verderben den Brei - Kochschule für Devs und Ops mit Chef, Vag...Zu viele Köche verderben den Brei - Kochschule für Devs und Ops mit Chef, Vag...
Zu viele Köche verderben den Brei - Kochschule für Devs und Ops mit Chef, Vag...Torben Knerr
 
Infrastructure-As-Code and Cloud Deployments with Opscode Chef & Co
Infrastructure-As-Code and Cloud Deployments with Opscode Chef & CoInfrastructure-As-Code and Cloud Deployments with Opscode Chef & Co
Infrastructure-As-Code and Cloud Deployments with Opscode Chef & CoTorben Knerr
 
ALM und dezentrales SCM – Die Quadratur des Kreises?
ALM und dezentrales SCM – Die Quadratur des Kreises?ALM und dezentrales SCM – Die Quadratur des Kreises?
ALM und dezentrales SCM – Die Quadratur des Kreises?Torben Knerr
 

Plus de Torben Knerr (8)

Monitoring in Azure
Monitoring in AzureMonitoring in Azure
Monitoring in Azure
 
Zuehlke Camp 2017: Chef vs Ansible session
Zuehlke Camp 2017: Chef vs Ansible sessionZuehlke Camp 2017: Chef vs Ansible session
Zuehlke Camp 2017: Chef vs Ansible session
 
Automatisierte Entwickler VMs -- "works on my machine" zählt nicht mehr ;-)
Automatisierte Entwickler VMs -- "works on my machine" zählt nicht mehr ;-)Automatisierte Entwickler VMs -- "works on my machine" zählt nicht mehr ;-)
Automatisierte Entwickler VMs -- "works on my machine" zählt nicht mehr ;-)
 
Kollaboration in Java Projekten - Anspruch und Realität
Kollaboration in Java Projekten - Anspruch und RealitätKollaboration in Java Projekten - Anspruch und Realität
Kollaboration in Java Projekten - Anspruch und Realität
 
Cooking with Chef, Knife, Vagrant and Co
Cooking with Chef, Knife, Vagrant and CoCooking with Chef, Knife, Vagrant and Co
Cooking with Chef, Knife, Vagrant and Co
 
Zu viele Köche verderben den Brei - Kochschule für Devs und Ops mit Chef, Vag...
Zu viele Köche verderben den Brei - Kochschule für Devs und Ops mit Chef, Vag...Zu viele Köche verderben den Brei - Kochschule für Devs und Ops mit Chef, Vag...
Zu viele Köche verderben den Brei - Kochschule für Devs und Ops mit Chef, Vag...
 
Infrastructure-As-Code and Cloud Deployments with Opscode Chef & Co
Infrastructure-As-Code and Cloud Deployments with Opscode Chef & CoInfrastructure-As-Code and Cloud Deployments with Opscode Chef & Co
Infrastructure-As-Code and Cloud Deployments with Opscode Chef & Co
 
ALM und dezentrales SCM – Die Quadratur des Kreises?
ALM und dezentrales SCM – Die Quadratur des Kreises?ALM und dezentrales SCM – Die Quadratur des Kreises?
ALM und dezentrales SCM – Die Quadratur des Kreises?
 

Maven Intro

  • 1. Einführung in Maven © Zühlke 2010 4. Mai 2010 Torben Knerr Folie 1 Maven Intro Einführung in Maven (not the complete reference )
  • 2. Einführung in Maven © Zühlke 2010 4. Mai 2010 Torben Knerr Folie 2 Agenda 1. Maven – was ist Das? 2. Getting Started – eine kurze Demo 3. Grundkonzepte von Maven 4. POM Walkthrough
  • 3. Einführung in Maven © Zühlke 2010 4. Mai 2010 Torben Knerr Folie 3 Maven – was ist Das?
  • 4. Einführung in Maven © Zühlke 2010 4. Mai 2010 Torben Knerr Folie 4 Was ist Maven? Maven, The Definitive Guide: • “Maven is an attempt to apply patterns to a project's build infrastructure in order to promote comprehension and productivity by providing a clear path in the use of best practices.” Maven ist... • ...ein Build-Tool • ...ein Abhängigkeiten-Verwalter • ...ein Repository für Binaries • ...ganz viel „Convention over Configuration“
  • 5. Einführung in Maven © Zühlke 2010 4. Mai 2010 Torben Knerr Folie 5 Getting Started
  • 6. Einführung in Maven © Zühlke 2010 4. Mai 2010 Torben Knerr Folie 6 Getting Started – eine kurze Demo Ein neues Java Projekt erstellen: …so sollte die Struktur aussehen: mvn archetype:generate -DarchetypeArtifactId=maven-archetype-simple -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.acme -DartifactId=maven-intro maven-intro | pom.xml | ---src +---main | ---java | ---com | ---acme | App.java | ---test ---java ---com ---acme AppTest.java
  • 7. Einführung in Maven © Zühlke 2010 4. Mai 2010 Torben Knerr Folie 7 Getting Started – eine kurze Demo II Kompilieren, Testen, Verpacken: Ausgabe: cd maven-intro mvn clean package [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Building maven-intro [INFO] task-segment: [clean, install] [INFO] ------------------------------------------------------------------------ [INFO] [clean:clean {execution: default-clean}] ... [INFO] [install:install {execution: default-install}] [INFO] Installing W:01_workspacemaven-introtargetmaven-intro-0.0.1- SNAPSHOT.jar to W:05_tools.m2repositorycomacmemaven-intro0.0.1- SNAPSHOTmaven-intro-0.0.1-SNAPSHOT.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ [INFO] Total time: 4 seconds [INFO] Finished at: Wed Feb 10 13:39:01 CET 2010 [INFO] Final Memory: 15M/27M [INFO] ------------------------------------------------------------------------ Build erfolgreich!
  • 8. Einführung in Maven © Zühlke 2010 4. Mai 2010 Torben Knerr Folie 8 Getting Started – eine kurze Demo (m2eclipse) Ein neues Java Projekt erstellen: …und so sollte es aussehen: File  New  Other…  Maven / Maven Project
  • 9. Einführung in Maven © Zühlke 2010 4. Mai 2010 Torben Knerr Folie 9 Getting Started – eine kurze Demo II (m2eclipse) Kompilieren, Testen, Verpacken: Ausgabe: [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Building maven-intro [INFO] task-segment: [clean, install] [INFO] ------------------------------------------------------------------------ [INFO] [clean:clean {execution: default-clean}] ... [INFO] [install:install {execution: default-install}] [INFO] Installing W:01_workspacemaven-introtargetmaven-intro-0.0.1- SNAPSHOT.jar to W:05_tools.m2repositorycomacmemaven-intro0.0.1- SNAPSHOTmaven-intro-0.0.1-SNAPSHOT.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ [INFO] Total time: 4 seconds [INFO] Finished at: Wed Feb 10 13:39:01 CET 2010 [INFO] Final Memory: 15M/27M [INFO] ------------------------------------------------------------------------ Build erfolgreich! Project  Run As  Maven package packaged jar file
  • 10. Einführung in Maven © Zühlke 2010 4. Mai 2010 Torben Knerr Folie 10 Grundkonzepte von Maven
  • 11. Einführung in Maven © Zühlke 2010 4. Mai 2010 Torben Knerr Folie 11 Maven Koordinaten Maven, The Definitive Guide: • „Maven Coordinates define a set of identifiers which can be used to uniquely identify a project, a dependency, or a plugin in a Maven POM.“ Beispiel für eine Koordinate: Wiederfinden eines Artefakts: <groupId>com.acme</groupId> <artifactId>maven-intro</artifactId> <packaging>jar</packaging> <version>0.0.1-SNAPSHOT</version>
  • 12. Einführung in Maven © Zühlke 2010 4. Mai 2010 Torben Knerr Folie 12 POM Datei Eine einfache pom.xml: <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>com.acme</groupId> <artifactId>maven-intro</artifactId> <packaging>jar</packaging> <version>0.0.1-SNAPSHOT</version> <name>maven-intro</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project> POM = Project Object Model
  • 13. Einführung in Maven © Zühlke 2010 4. Mai 2010 Torben Knerr Folie 13 Elemente des POM The Basics – Maven Koordinaten – Abhängigkeiten (Parent POM, Dependencies) – Properties / Variablen Build Settings – Build Plugins und deren Konfiguration – Reports More Project Information – Organisation, Entwickler, Lizenzen, etc.. Environment Settings – Repositories (Dependency Resolution, Distribution) – Issue Tracking, SCM, Continous Integration, Mailinglisten – Profile Die komplette POM Referenz findet Ihr hier: http://maven.apache.org/pom.html
  • 14. Einführung in Maven © Zühlke 2010 4. Mai 2010 Torben Knerr Folie 14 Dependencies werden in der pom.xml definiert – mittels <dependency>…</dependency> werden von einem Repository geladen – vom lokalen .m2 repository – vom zentralen Maven repository – von anderen definierten Remote Repositories sind transitiv – wenn A  B und B  C, dann A C haben einen Scope – meistens: compile, test, runtime, provided <dependencies> <dependency> <groupId>com.acme</groupId> <artifactId>some-dependency</artif <version>1.0</version> <scope>compile</scope> </dependency> </dependencies>
  • 15. Einführung in Maven © Zühlke 2010 4. Mai 2010 Torben Knerr Folie 15 Parent POMs Vererbungshierarchien können mit Parent POMs modelliert werden • Was wird alles vererbt? • Was passiert beim Überschreiben? • Was ist die Super POM? Tipp zum Debuggen vom POMs: mvn help:effective-pom <parent> <groupId>com.acme</groupId> <artifactId>acme-parent</artifactId> <version>0.0.1</version> </parent>
  • 16. Einführung in Maven © Zühlke 2010 4. Mai 2010 Torben Knerr Folie 16 Repositories Alle Maven Artefakte (Binaries) werden über Repositories verteilt • Zentrales Maven Repository – Das default Repository: http://repo1.maven.org/maven2/ • Lokales Maven Repository – Lokaler Cache der heruntergeladenen Artefakte – Hier wird immer zuerst „gesucht“ – Typischerweise in $USER_HOME/.m2/repository • Weitere Remote Repositories – z.B. http://your.company.com:8080/artifactory/
  • 17. Einführung in Maven © Zühlke 2010 4. Mai 2010 Torben Knerr Folie 17 Plugins und Goals Ein Plugin stellt eine Menge von Goals bereit Goal Executions sind an Phasen gebunden (default phase) Ein Goal kann aber auch explizit ausgeführt werden  führt nur „compile“ Goal des maven-compiler-plugin aus mvn <plugin>:<goal> mvn compiler:compile
  • 18. Einführung in Maven © Zühlke 2010 4. Mai 2010 Torben Knerr Folie 18 Plugin Konfiguration Konfiguration in pom.xml Konsistente Dokumentation für alle Plugins, z.B. http://maven.apache.org/plugins/maven-surefire-plugin/ <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <executions> <execution> <id>scala-test</id> <phase>test</phase> <goals> <goal>test</goal> </goals> <configuration> <testSourceDirectory>src/test/scala</testSourceDirectory> <includes> <include>**/*Test.class</include> <include>**/*Suite.class</include> <include>**/*Spec.class</include> </includes> </configuration> </execution> </executions> </plugin>
  • 19. Einführung in Maven © Zühlke 2010 4. Mai 2010 Torben Knerr Folie 19 Build Lifecycle Ein Build durchläuft mehrere Phasen An jede Phase können mehrere Goal Executions gebunden werden Typischerweise:  durchläuft alle Phasen (inkl. aller Goals) bis einschließlich „package“ mvn package
  • 20. Einführung in Maven © Zühlke 2010 4. Mai 2010 Torben Knerr Folie 20 Build Lifecycle (komplett) http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
  • 21. Einführung in Maven © Zühlke 2010 4. Mai 2010 Torben Knerr Folie 21 Profile Profile erlauben „angepassten“ Build, z.B. •für spezielle Betriebssysteme, Umgebungen (dev, prod), usw. Aktivierung durch: •<activeByDefault>, -P <profilname>, System Properties, etc... <profile> <id>development</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <tomcat.home>W:installtomcat</tomcat.home> </properties> </profile> <profile> <id>production</id> <properties> <tomcat.home>/opt/tomcat</tomcat.home> </properties> </profile>
  • 22. Einführung in Maven © Zühlke 2010 4. Mai 2010 Torben Knerr Folie 22 settings.xml Zentrale (vs. projektspezifische) Konfiguration von: •Profilen •Repositories •Proxies, Mirrors •Credentials Global Settings vs. User Settings: • Global settings.xml: $M2_HOME/conf/settings.xml • User settings.xml: $USER_HOME/.m2/settings.xml
  • 23. Einführung in Maven © Zühlke 2010 4. Mai 2010 Torben Knerr Folie 23 Nützliche Maven Befehle
  • 24. Einführung in Maven © Zühlke 2010 4. Mai 2010 Torben Knerr Folie 24 Nützliche Maven Befehle (1) mvn clean • cleans all files that have been created during the build process in the target folder mvn install • builds the artifact and installs it to your Local Maven Repository mvn clean install –DskipTests • cleans the target folder and installs the artifact in the local repository, but skips the test execution mvn clean deploy • cleans the target folder, builds, installs and deploys the artifact to the configured Remote Maven Repository
  • 25. Einführung in Maven © Zühlke 2010 4. Mai 2010 Torben Knerr Folie 25 Nützliche Maven Befehle (2) mvn help:effective-pom • shows the effective POM with all property substitutions and inherited POMs resolved mvn dependency:tree • shows the complete dependency tree (with duplicate dependencies) mvn dependency:list • shows the actually resolved dependencies (duplicates are resolved)
  • 26. Einführung in Maven © Zühlke 2010 4. Mai 2010 Torben Knerr Folie 26 Nützliche Maven Befehle (3) mvn release:prepare • prepares the release: set pom version to releaseVersion, commit to svn, create tag in svn, set pom version to next developmentVersion mvn release:perform • performs the release: check out tag version to target folder, build and test the tag version, deploy tag version to maven repository mvn release:rollback • if something goes wrong during the release, rollback restores your working copy to the state before the release and commits this state to svn mvn release:clean • removes auxiliary files that have been created during (a dry run of) the release process
  • 27. Einführung in Maven © Zühlke 2010 4. Mai 2010 Torben Knerr Folie 27 POM Walkthrough
  • 28. Einführung in Maven © Zühlke 2010 4. Mai 2010 Torben Knerr Folie 28 POM Walkthrough <insert pom.xml here>
  • 29. Einführung in Maven © Zühlke 2010 4. Mai 2010 Torben Knerr Folie 29 Diskussion / Fragen POM, Parent POM, Super POM, Settings? Multimodul Projekt? mvn clean install vs. deploy? Maven!?
  • 30. Vielen Dank!  Und lassen Sie uns hier weiter diskutieren: