SlideShare ist ein Scribd-Unternehmen logo

Introduction to Apache Maven 3 (German)

A german introduction into apache maven dependency management. Originally created for an university project.

1 von 26
Downloaden Sie, um offline zu lesen
Apache Maven 3 
Einführung 
Universität Bremen: Fachbereich 3 – Informatik & Mathematik 
Bachelor Projekt: Smart Activities 
Chris Michael Klinger 
24.01.2014
Inhalt 
1. Vorstellung Apache Maven 
2. Installation von Maven 
3. Maven POM-Dateien 
4. Abhängigkeiten 
5. Maven Smartact Infrastruktur 
6. IDE Integration 
Diese Präsentation verwendet Windows für die Benennung von 
Umgebungsvariablen und referenziert diese als %VAR%. Bei Unix-Artigen Systemen 
müssen entsprechende Abweichungen beachtet werden! 
24.01.2014 Maven 3 Einführung 2
Maven Background 
• Maven ist ein Build-Management-Tool: 
• “Apache Maven is a software project management and 
comprehension tool.” 
• Insbesondere für Java-Projekte, basiert selbst auf Java 
• Apache Open Source Project, u.a. unterstützt von Sonatype 
• Geschichte 
• Maven 1 (2003) 
• Erste Maven Version 
• Perfomance-Probleme, viele Eigenheiten nicht bedacht 
• Inzwischen End of Life, kein Support mehr 
• Maven 2 (2005) 
• Komplette Neuentwicklung 
• Nicht kompatibel zu Maven 1 
• Maven 3 (2010) 
• Kompatibel zu Maven 2, verbesserte Usability und Stabilität 
24.01.2014 Maven 3 Einführung 3
Funktionen von Maven 
• Verwaltung von Abhängigkeiten 
• Mehre Module umfassende Builds (Multi-Module) 
• Konsistente Build Model Beschreibung 
• Fördert Best-Practices der Software-Entwicklung 
• Erweiterbar durch Plugins 
• Release Management 
• Generierung von Projektberichten 
24.01.2014 Maven 3 Einführung 4
Maven besorgen und installieren 
• Voraussetzungen: 
• Installiertes, funktionstüchtiges JDK, inkl. %JAVA_HOME% 
• Download unter: 
• http://maven.apache.org/download.cgi 
• In Archivformen (tar.gz, zip) 
• Empfohlen: Version 3.0.X (Buildserver) 
• Archiv entpacken, wo ist eigentlich fast egal 
• /usr/bin bzw. C:Programme oder Java-Unterordner sind gängig, ggf. auch 
%USERPROFILE% 
• Version in Ordner am besten bestehen lassen 
• Umgebungsvariablen: 
• %M2_HOME%: Auf den Maven Ordner Setzen 
• %M2%: Auf %M2_HOME%bin setzten 
• %PATH%: Um %M2% erweitern 
• Optional: %MAVEN_OPST%: JVM Parameter, z.B. „ -Xms256m -Xmx512m“ 
• In Konsole „mvn --version“ ausführen. 
Komplette Referenz: http://maven.apache.org/download.cgi 
24.01.2014 Maven 3 Einführung 5
Die Maven POM Dateien 
• POM steht für „Project Object Model“ 
• Verwendet XML als Beschreibungssprache 
• Beschreiben ein Projekt: 
• Name und Version 
• Abhängigkeiten 
• Quellcode Repository 
• Plugins die für das Projekt benötigt werden 
• Profile (z.B. Alternative Build Konfigurationen) 
24.01.2014 Maven 3 Einführung 6

Recomendados

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
 
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
 
Automatischer Build mit Maven
Automatischer Build mit MavenAutomatischer Build mit Maven
Automatischer Build mit MavenStefan Scheidt
 
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 ProzessRalf Abramowitsch
 
OSDC 2013 | Continuous Integration in data centers by Michael Prokop
OSDC 2013 | Continuous Integration in data centers by Michael ProkopOSDC 2013 | Continuous Integration in data centers by Michael Prokop
OSDC 2013 | Continuous Integration in data centers by Michael ProkopNETWAYS
 
Flexibilitaet mit CDI und Apache DeltaSpike
Flexibilitaet mit CDI und Apache DeltaSpikeFlexibilitaet mit CDI und Apache DeltaSpike
Flexibilitaet mit CDI und Apache DeltaSpikeos890
 

Más contenido relacionado

Was ist angesagt?

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"Oliver Busse
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsQAware GmbH
 
Perl Renaissance Reloaded
Perl Renaissance ReloadedPerl Renaissance Reloaded
Perl Renaissance ReloadedGregor Goldbach
 
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
 
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 ArchitektenOPITZ CONSULTING Deutschland
 
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)Wiest Simon
 
Entwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, PuppetEntwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, Puppetinovex GmbH
 
EntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloadedEntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloadedRené Winkelmeyer
 
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)Wiest Simon
 
Docker - Automatisches Deployment für Linux-Instanzen
Docker - Automatisches Deployment für Linux-Instanzen Docker - Automatisches Deployment für Linux-Instanzen
Docker - Automatisches Deployment für Linux-Instanzen B1 Systems GmbH
 
Deploy Magento Shops with Capistrano v3
Deploy Magento Shops with Capistrano  v3Deploy Magento Shops with Capistrano  v3
Deploy Magento Shops with Capistrano v3Roman Hutterer
 
C++ Dependency Management 2.0
C++ Dependency Management 2.0C++ Dependency Management 2.0
C++ Dependency Management 2.0Patrick Charrier
 
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 DayTobias Schneck
 
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 & Javascriptdzuvic
 

Was ist angesagt? (20)

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"
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
Perl Renaissance Reloaded
Perl Renaissance ReloadedPerl Renaissance Reloaded
Perl Renaissance Reloaded
 
Ant im Detail
Ant im DetailAnt im Detail
Ant im Detail
 
Jenkins Acceleration
Jenkins AccelerationJenkins Acceleration
Jenkins Acceleration
 
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...
 
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
 
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)
 
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
 
Entwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, PuppetEntwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, Puppet
 
EntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloadedEntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloaded
 
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)
 
Docker - Automatisches Deployment für Linux-Instanzen
Docker - Automatisches Deployment für Linux-Instanzen Docker - Automatisches Deployment für Linux-Instanzen
Docker - Automatisches Deployment für Linux-Instanzen
 
Deploy Magento Shops with Capistrano v3
Deploy Magento Shops with Capistrano  v3Deploy Magento Shops with Capistrano  v3
Deploy Magento Shops with Capistrano v3
 
C++ Dependency Management 2.0
C++ Dependency Management 2.0C++ Dependency Management 2.0
C++ Dependency Management 2.0
 
Testing tools
Testing toolsTesting tools
Testing tools
 
systemd & Docker
systemd & Dockersystemd & Docker
systemd & Docker
 
Deployment 2.0
Deployment 2.0Deployment 2.0
Deployment 2.0
 
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
 
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
 

Ähnlich wie Introduction to Apache Maven 3 (German)

Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Joachim Baumann
 
BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...
BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...
BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...Marc Müller
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrants0enke
 
Entwicklung mit Chef und Vagrant - PHPUG HH
Entwicklung mit Chef und Vagrant - PHPUG HHEntwicklung mit Chef und Vagrant - PHPUG HH
Entwicklung mit Chef und Vagrant - PHPUG HHFlorian Holzhauer
 
Serverprovisioning in einer dynamischen Infrastruktur
Serverprovisioning in einer dynamischen InfrastrukturServerprovisioning in einer dynamischen Infrastruktur
Serverprovisioning in einer dynamischen Infrastrukturinovex GmbH
 
openFrameworks workshops_07122013_erst
openFrameworks workshops_07122013_erstopenFrameworks workshops_07122013_erst
openFrameworks workshops_07122013_erstJeongHo Park
 
Von Test nach Live mit Rex
Von Test nach Live mit RexVon Test nach Live mit Rex
Von Test nach Live mit RexJan Gehring
 
Von Test nach live mit Rex
Von Test nach live mit RexVon Test nach live mit Rex
Von Test nach live mit Rexinovex GmbH
 
Composer und TYPO3
Composer und TYPO3Composer und TYPO3
Composer und TYPO3Peter Kraume
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsJosef Adersberger
 
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling am Beispiel von AngrybirdCloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling am Beispiel von AngrybirdAOE
 
Auszug Seminarunterlagen "Tomcat 6.x"
Auszug Seminarunterlagen "Tomcat 6.x"Auszug Seminarunterlagen "Tomcat 6.x"
Auszug Seminarunterlagen "Tomcat 6.x"schellsoft
 
Robustes Testen mit Selenium
Robustes Testen mit SeleniumRobustes Testen mit Selenium
Robustes Testen mit Seleniumx-celerate
 
Service Orchestrierung mit Apache Mesos
Service Orchestrierung mit Apache MesosService Orchestrierung mit Apache Mesos
Service Orchestrierung mit Apache MesosRalf Ernst
 
Scala - OSGi Bundles from Outer (Java) Space
Scala - OSGi Bundles from Outer (Java) SpaceScala - OSGi Bundles from Outer (Java) Space
Scala - OSGi Bundles from Outer (Java) SpaceOliver Braun
 
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Ralf Sigmund
 
Proxtalks 2016 - Migration zu Proxmox VE
Proxtalks 2016 - Migration zu Proxmox VEProxtalks 2016 - Migration zu Proxmox VE
Proxtalks 2016 - Migration zu Proxmox VEMarco Gabriel
 

Ähnlich wie Introduction to Apache Maven 3 (German) (20)

Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)
 
BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...
BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...
BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrant
 
Entwicklung mit Chef und Vagrant - PHPUG HH
Entwicklung mit Chef und Vagrant - PHPUG HHEntwicklung mit Chef und Vagrant - PHPUG HH
Entwicklung mit Chef und Vagrant - PHPUG HH
 
Serverprovisioning in einer dynamischen Infrastruktur
Serverprovisioning in einer dynamischen InfrastrukturServerprovisioning in einer dynamischen Infrastruktur
Serverprovisioning in einer dynamischen Infrastruktur
 
openFrameworks workshops_07122013_erst
openFrameworks workshops_07122013_erstopenFrameworks workshops_07122013_erst
openFrameworks workshops_07122013_erst
 
Von Test nach Live mit Rex
Von Test nach Live mit RexVon Test nach Live mit Rex
Von Test nach Live mit Rex
 
Von Test nach live mit Rex
Von Test nach live mit RexVon Test nach live mit Rex
Von Test nach live mit Rex
 
Composer und TYPO3
Composer und TYPO3Composer und TYPO3
Composer und TYPO3
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
Node.js
Node.jsNode.js
Node.js
 
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling am Beispiel von AngrybirdCloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird
 
Auszug Seminarunterlagen "Tomcat 6.x"
Auszug Seminarunterlagen "Tomcat 6.x"Auszug Seminarunterlagen "Tomcat 6.x"
Auszug Seminarunterlagen "Tomcat 6.x"
 
Robustes Testen mit Selenium
Robustes Testen mit SeleniumRobustes Testen mit Selenium
Robustes Testen mit Selenium
 
Service Orchestrierung mit Apache Mesos
Service Orchestrierung mit Apache MesosService Orchestrierung mit Apache Mesos
Service Orchestrierung mit Apache Mesos
 
Scala - OSGi Bundles from Outer (Java) Space
Scala - OSGi Bundles from Outer (Java) SpaceScala - OSGi Bundles from Outer (Java) Space
Scala - OSGi Bundles from Outer (Java) Space
 
Arquillian
ArquillianArquillian
Arquillian
 
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
 
Einführung in Docker
Einführung in DockerEinführung in Docker
Einführung in Docker
 
Proxtalks 2016 - Migration zu Proxmox VE
Proxtalks 2016 - Migration zu Proxmox VEProxtalks 2016 - Migration zu Proxmox VE
Proxtalks 2016 - Migration zu Proxmox VE
 

Último

Opfervermeidungsstrategien - Wie kann ich mich schützen? Comic für Kids und T...
Opfervermeidungsstrategien - Wie kann ich mich schützen? Comic für Kids und T...Opfervermeidungsstrategien - Wie kann ich mich schützen? Comic für Kids und T...
Opfervermeidungsstrategien - Wie kann ich mich schützen? Comic für Kids und T...LUCO KIDS® - clever und stark
 
Präpositionen mit Genitiv - interaktive Power Point
Präpositionen mit Genitiv - interaktive Power PointPräpositionen mit Genitiv - interaktive Power Point
Präpositionen mit Genitiv - interaktive Power PointMaria Vaz König
 
Wie man ein gutes Paper (für das LEGO-Praktikum) schreibt
Wie man ein gutes Paper (für das LEGO-Praktikum) schreibtWie man ein gutes Paper (für das LEGO-Praktikum) schreibt
Wie man ein gutes Paper (für das LEGO-Praktikum) schreibtMathias Magdowski
 
"haben" im Präsens,Präteritum und Perfekt
"haben" im Präsens,Präteritum und Perfekt"haben" im Präsens,Präteritum und Perfekt
"haben" im Präsens,Präteritum und PerfektMaria Vaz König
 
Führerscheinklasse A1_ Führerscheinklassen Und Anforderungen.pdf
Führerscheinklasse A1_ Führerscheinklassen Und Anforderungen.pdfFührerscheinklasse A1_ Führerscheinklassen Und Anforderungen.pdf
Führerscheinklasse A1_ Führerscheinklassen Und Anforderungen.pdfUKSafeMeds
 
Präpositionen mit Genitiv - Arbeitsblatt zur PPt
Präpositionen mit Genitiv - Arbeitsblatt zur PPtPräpositionen mit Genitiv - Arbeitsblatt zur PPt
Präpositionen mit Genitiv - Arbeitsblatt zur PPtMaria Vaz König
 

Último (6)

Opfervermeidungsstrategien - Wie kann ich mich schützen? Comic für Kids und T...
Opfervermeidungsstrategien - Wie kann ich mich schützen? Comic für Kids und T...Opfervermeidungsstrategien - Wie kann ich mich schützen? Comic für Kids und T...
Opfervermeidungsstrategien - Wie kann ich mich schützen? Comic für Kids und T...
 
Präpositionen mit Genitiv - interaktive Power Point
Präpositionen mit Genitiv - interaktive Power PointPräpositionen mit Genitiv - interaktive Power Point
Präpositionen mit Genitiv - interaktive Power Point
 
Wie man ein gutes Paper (für das LEGO-Praktikum) schreibt
Wie man ein gutes Paper (für das LEGO-Praktikum) schreibtWie man ein gutes Paper (für das LEGO-Praktikum) schreibt
Wie man ein gutes Paper (für das LEGO-Praktikum) schreibt
 
"haben" im Präsens,Präteritum und Perfekt
"haben" im Präsens,Präteritum und Perfekt"haben" im Präsens,Präteritum und Perfekt
"haben" im Präsens,Präteritum und Perfekt
 
Führerscheinklasse A1_ Führerscheinklassen Und Anforderungen.pdf
Führerscheinklasse A1_ Führerscheinklassen Und Anforderungen.pdfFührerscheinklasse A1_ Führerscheinklassen Und Anforderungen.pdf
Führerscheinklasse A1_ Führerscheinklassen Und Anforderungen.pdf
 
Präpositionen mit Genitiv - Arbeitsblatt zur PPt
Präpositionen mit Genitiv - Arbeitsblatt zur PPtPräpositionen mit Genitiv - Arbeitsblatt zur PPt
Präpositionen mit Genitiv - Arbeitsblatt zur PPt
 

Introduction to Apache Maven 3 (German)

  • 1. Apache Maven 3 Einführung Universität Bremen: Fachbereich 3 – Informatik & Mathematik Bachelor Projekt: Smart Activities Chris Michael Klinger 24.01.2014
  • 2. Inhalt 1. Vorstellung Apache Maven 2. Installation von Maven 3. Maven POM-Dateien 4. Abhängigkeiten 5. Maven Smartact Infrastruktur 6. IDE Integration Diese Präsentation verwendet Windows für die Benennung von Umgebungsvariablen und referenziert diese als %VAR%. Bei Unix-Artigen Systemen müssen entsprechende Abweichungen beachtet werden! 24.01.2014 Maven 3 Einführung 2
  • 3. Maven Background • Maven ist ein Build-Management-Tool: • “Apache Maven is a software project management and comprehension tool.” • Insbesondere für Java-Projekte, basiert selbst auf Java • Apache Open Source Project, u.a. unterstützt von Sonatype • Geschichte • Maven 1 (2003) • Erste Maven Version • Perfomance-Probleme, viele Eigenheiten nicht bedacht • Inzwischen End of Life, kein Support mehr • Maven 2 (2005) • Komplette Neuentwicklung • Nicht kompatibel zu Maven 1 • Maven 3 (2010) • Kompatibel zu Maven 2, verbesserte Usability und Stabilität 24.01.2014 Maven 3 Einführung 3
  • 4. Funktionen von Maven • Verwaltung von Abhängigkeiten • Mehre Module umfassende Builds (Multi-Module) • Konsistente Build Model Beschreibung • Fördert Best-Practices der Software-Entwicklung • Erweiterbar durch Plugins • Release Management • Generierung von Projektberichten 24.01.2014 Maven 3 Einführung 4
  • 5. Maven besorgen und installieren • Voraussetzungen: • Installiertes, funktionstüchtiges JDK, inkl. %JAVA_HOME% • Download unter: • http://maven.apache.org/download.cgi • In Archivformen (tar.gz, zip) • Empfohlen: Version 3.0.X (Buildserver) • Archiv entpacken, wo ist eigentlich fast egal • /usr/bin bzw. C:Programme oder Java-Unterordner sind gängig, ggf. auch %USERPROFILE% • Version in Ordner am besten bestehen lassen • Umgebungsvariablen: • %M2_HOME%: Auf den Maven Ordner Setzen • %M2%: Auf %M2_HOME%bin setzten • %PATH%: Um %M2% erweitern • Optional: %MAVEN_OPST%: JVM Parameter, z.B. „ -Xms256m -Xmx512m“ • In Konsole „mvn --version“ ausführen. Komplette Referenz: http://maven.apache.org/download.cgi 24.01.2014 Maven 3 Einführung 5
  • 6. Die Maven POM Dateien • POM steht für „Project Object Model“ • Verwendet XML als Beschreibungssprache • Beschreiben ein Projekt: • Name und Version • Abhängigkeiten • Quellcode Repository • Plugins die für das Projekt benötigt werden • Profile (z.B. Alternative Build Konfigurationen) 24.01.2014 Maven 3 Einführung 6
  • 7. Artefakt Identifizierung • Maven identifiziert Projekte eindeutig anhand: • groupID: • Frei wählbarer Identifier für die Gruppe (keine Leerzeichen oder Doppelpunkte) • i.d.R. wird das Java Package eines Projektes als groupID verwendet. • artifactID: • Frei wählbarer Identifier für den Projektnamen (keine Leerzeichen oder Doppelpunkte) • version: • Format: {major}.{minor}.{maintenance} • -SNAPSHOT für die Kennzeichnung von Entwicklungsversionen <?xml version="1.0" encoding="UTF-8"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_ 0_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"> <modelVersion>4.0.0</modelVersion> <groupId>de.uni_bremen.smartactivities.pom</groupId> <artifactId>smartact-base-pom</artifactId> <version>1.0-SNAPSHOT</version> </project> Maven 3 Einführung 24.01.2014 7
  • 8. Projektname & Packaging • Projekte können einen beschreibenden Namen haben • Art des Builds wird als <packaging> im POM definiert • Wie soll Maven das Projekt bauen • Beispiele: pom, jar, war, … • Standard ist jar <?xml version="1.0" encoding="UTF-8"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_ 0_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"> <modelVersion>4.0.0</modelVersion> <groupId>de.uni_bremen.smartactivities.pom</groupId> <artifactId>smartact-base-pom</artifactId> <version>1.0-SNAPSHOT</version> <name>Smart Activities Basis POM Datei</name> <packaging>pom</packaging> </project> Maven 3 Einführung 24.01.2014 8
  • 9. Vererbung zwischen Projekten • POM Dateien können ihre Werte vererben • GroupID, Version • Abhängigkeiten • Pluginkonfiguration • … • Dadurch zentrale Definition von Werten, Doppelungen werden vermieden und Änderungen können schnell in die komplette Tiefe „propagiert“ werden. • Werte können lokal überschrieben werden! <?xml version="1.0" encoding="UTF-8"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_ 0_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>de.uni_bremen.smartactivities.pom</groupId> <artifactId>smartact-base-pom</artifactId> <version>1.0-SNAPSHOT</version> </parent> <artifactId>smartact-mycoolsoftwaremodule</artifactId> <packaging>jar</packaging> </project> Maven 3 Einführung 24.01.2014 9
  • 10. Multi-Modul Projekte • Maven verfügt über eine sehr gute Multi-Modul Unterstützung über folgendes Pattern: • Jedes Maven-Projekt erzeugt ein Artefakt • Parent-POM: Gruppiert mehrere Artefakte zu einer Software <?xml version="1.0" encoding="UTF-8"?> <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.unibremen.nosuchgroup</groupId> <artifactId>easylearncards-server</artifactId> <version>0.9-SNAPSHOT</version> <packaging>pom</packaging> <name>EasyLearnCards Serveranwendung (Parent-POM)</name> <modules> <module>easylearncards-server-data</module> <module>easylearncards-server-service</module> <module>easylearncards-server-webapp</module> <module>easylearncards-server-rest</module> </modules> </project> Maven 3 Einführung 24.01.2014 10
  • 11. Aufbau eines Maven-Projektes • Maven fördert Best-Practices der SW-Entwicklung durch einen standardisierten Aufbau der Verzeichnisse: Artifact Source Files Artifact Ressource Files Test Source Files Test Ressource Files Weitere Source Files (z.B. Web) Arbeitsverzeichnis (unbedingt: .gitignore!) pom-Datei im Root! Maven 3 Einführung 24.01.2014 11
  • 12. Maven Build Lifecycle • Es gibt drei eingebaute Build Lifecyle: default, clean und site • Phasen des default-cycle: • validate: validate the project is correct and all necessary information is available • compile: compile the source code of the project • test: test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed • package: take the compiled code and package it in its distributable format, such as a JAR. • integration-test: process and deploy the package if necessary into an environment where integration tests can be run • verify: run any checks to verify the package is valid and meets quality criteria • install: install the package into the local repository, for use as a dependency in other projects locally • deploy: done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects. • clean-Lifecycle zum Zurücksetzen des Arbeitsverzeichnisses • Site-Lifecyle zum Generierten von Dokumentation (Seiten) Komplette Referenz: http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html 24.01.2014 Maven 3 Einführung 12
  • 13. Maven Goals (Beispiele) • Maven ist ein wird über die Kommandozeile mit dem Befehl mvn und einem „Goal“ gestartet: • mvn install • Führt ein validate, compile, test, package, integration-test, verify und install aus: Am Ende liegt im Erfolgsfall das JAR im lokalen Repository vor. • mvn deploy • Führt ein validate, compile, test, package, integration-test, verify und install und deploy aus: Am Ende liegt im Erfolgsfall das JAR im lokalen und geteilten Repository vor. • mvn clean • Leert das lokale Arbeitsverzeichnis • mvn clean install • Leert zunächst das lokale Arbeitsverzeichnis, führt dann ein install wie oben beschrieben durch • mvn clean test • Leert zunächst das lokale Arbeitsverzeichnis, führt dann ein test-Cycle durch • mvn test clean • Führt zunächst einen Test-Cycle durch und löscht dann das Arbeitsverzeichnis • mvn release:prepare release:perfom Benötigt eine Release Plugin Configuration: Bereitet einen Release vor und führt diesen durch: Zunächst werden entsprechende SCM Tags erstellt, anschließend komplettes install mit deploy, POM wird auf neue Entwicklungsversion umgestellt 24.01.2014 Maven 3 Einführung 13
  • 14. Maven und Abhängigkeiten • Maven hat das Management von Abhängigkeiten in Java revolutioniert • Kein Einchecken von Bibliotheken in Versionskotrolle mehr nötig • Zentrale Kommunikation von Abhängigkeiten und Versionen im POM • Repository Konzept für (vorkompilierte) Bibliotheken • Mit Maven Central „ein“ zentrales Repository • Häufig auch Auslieferung von Source und JavaDoc mit Artefakt: • Debugging & Entwicklung vereinfacht 24.01.2014 Maven 3 Einführung 14
  • 15. Abhängigkeit definieren • Eine Abhängigkeit besteht aus: • Eindeutiger Identifizierung (vgl. Artefakt Identifizierung) • Scope: compile, test, provided (Standard: compile) • Type: jar, pom, war, ear, zip (Standard: jar) <?xml version="1.0" encoding="UTF-8"?> <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"> ... <dependencies> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.0.0.GA</version> <scope>compile</scope> </dependency> </dependencies> </project> Maven 3 Einführung 24.01.2014 15
  • 16. Maven Repositories • Abhängigkeiten werden aus Repositories geladen: • HTTP(S) Protokoll • Alle Downloads werden im lokal Benutzer-Repository zwischengespeichert: • Normalerweise zu finden unter %USERPROFILE%.m2repository • Intuitive Verzeichnis Struktur: • {groupID}/{artifactID}/{version}/{artifactID}- {version}.{jar|pom|..} • „.“ wird in {groupID} durch „/“ ersetzt: org.openhab wird also zu org/openhab (Unterverzeichnisse) • SNAPSHOTS haben häufig noch einen Timestamp im Dateinamen. 24.01.2014 Maven 3 Einführung 16
  • 17. Proxy-Repositories • Es gibt ein zentrales Maven Community Repository: • http://repo1.maven.org/maven2 • Jeder kann eigenes Repository als Proxy betreiben: • Artefakt Cache im lokalen LAN • Kombination von Repositories • Eigenes Management, damit bessere Kontrolle • smartact nutzt Sonartype Nexus OSS als Repository Manager • Erreichbar unter: https://nexus.slevermann.de • Keine Cache Konfiguration, da kein LAN • Aber zentrales Entwickler-Repository • Einrichten von Repositories: Siehe Literatur 24.01.2014 Maven 3 Einführung 17
  • 18. Dependency Management • Wie mit Versionskonflikten umgehen: • Java kann nicht mit zwei Versionen einer Bibliothek umgehen, da teilweise gleiche Identifier… (Mit OSGI ist das teilweise möglich … aber wir betrachten mal den einfachen Fall) • Lösungen: • Maven die Verwaltung überlassen: Komplex und nicht wirklich vorhersagbar • Besser: Selbst übernehmen <?xml version="1.0" encoding="UTF-8"?> <project> ... <dependencyManagement> <dependencies> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.0.0.GA</version> </dependency> </dependencies> <dependencyManagement> </project> 24.01.2014 Maven 3 Einführung 18
  • 19. Verwendung Dep. Management • Dependency Management wird in der Regel ausgelagert: Parent- POM und 3rd-Party POM <project> ... <dependencyManagement> <dependencies> <dependency> de.uni_bremen.smartactivities.pom: smartact-base-pom:1.0-SNAPSHOT <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> <!– version management in property! --> </dependency> </dependencies> <dependencyManagement> </project> <project> <parent> <groupId>de.uni_bremen.smartactivities.pom</groupId> <artifactId>smartact-base-pom</artifactId> <version>1.0-SNAPSHOT</version> </parent> ... <dependencies> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> de.uni_bremen.smartactivities: my-artefact:1.0-SNAPSHOT </dependency> <!-- look: no version defined, inherit from base! --> </dependencies> </project> 24.01.2014 Maven 3 Einführung 19
  • 20. smartact: Dependencies, Modules und Vererbung „in Action“ smartact-base-pom Parent-Beziehung Abhängigkeit smartact-3rdparty-pom smartact-sync smartact-runtime smartact-backend-parent smartact-backend-data smartact-backend-service smartact-backend-gui openhab-core Module Version von openhab-core wird im Dependency Management von samrtact-3rdparty-pom festgelegt und steht in smartact-runtime über Parent & Abhängigkeitsbeziehungen zur Verfügung! DRAFT 23.01.2014 – Änderungen möglich 24.01.2014 Maven 3 Einführung 20
  • 21. IDE Integration (Eclipse) • Muss zunächst installiert werden: Persönliche Empfehlung: Statt Eclipse lieber direkt SPRING TOOL SUITE nutzen, dort sind viele nützliche Plugins bereits integriert: http://spring.io/tools • Anschließend: Import-Dialog (Datei->Import) 24.01.2014 Maven 3 Einführung 21
  • 22. IDE Integration (Eclipse) - Tools 24.01.2014 Maven 3 Einführung 22
  • 23. Tipps und Tricks: • Ihr sucht ein Artefakt? Das Central Repository kann unter http://search.maven.org durchsucht werden. • Manche Dinge gibt es dort nicht (z.B. openHab), dann selber bauen und für alle anderen ins Repository einchecken. • „Es geht nicht“ • mvn clean bewirkt in vielen Fällen Wunder! • Insb. bei der IDE-Integration Projekt aktualisieren • Konsole statt IDE verwenden • Wenn gar nichts mehr geht das lokale Repository unter „%USERPROFILE%.m2repository“ löschen. 24.01.2014 Maven 3 Einführung 23
  • 24. Tipps und Tricks: • Ihr sucht ein Artefakt? Das Central Repository kann unter http://search.maven.org durchsucht werden. • Manche Dinge gibt es dort nicht (z.B. openHab), dann selber bauen und für alle anderen ins Repository einchecken. • „Es geht nicht“ • mvn clean bewirkt in vielen Fällen Wunder! • Insb. bei der IDE-Integration Projekt aktualisieren • Konsole statt IDE verwenden • Wenn gar nichts mehr geht das lokale Repository unter „%USERPROFILE%.m2repository“ löschen. 24.01.2014 Maven 3 Einführung 24
  • 25. Literatur • Homepage Apache Maven: • http://maven.apache.org • Sonatype Resources: • http://www.sonatype.com/resources • Thorsten Horn: Maven 3.0: • http://www.torsten-horn.de/techdocs/maven.htm • Smartact Confluence Dokumentation: • https://confluence.slevermann.de/display/SWDEV/Apache+Mav en • Dort ist auch diese Präsentation zu finden. • Enthält insb. unsere Projektspezifische Konfiguration! 24.01.2014 Maven 3 Einführung 25
  • 26. Fragen, Anregungen, Vertiefungswünsche 24.01.2014 Maven 3 Einführung 26