Apache Maven 3 
Einführung 
Universität Bremen: Fachbereich 3 – Informatik & Mathematik 
Bachelor Projekt: Smart Activitie...
Inhalt 
1. Vorstellung Apache Maven 
2. Installation von Maven 
3. Maven POM-Dateien 
4. Abhängigkeiten 
5. Maven Smartact...
Maven Background 
• Maven ist ein Build-Management-Tool: 
• “Apache Maven is a software project management and 
comprehens...
Funktionen von Maven 
• Verwaltung von Abhängigkeiten 
• Mehre Module umfassende Builds (Multi-Module) 
• Konsistente Buil...
Maven besorgen und installieren 
• Voraussetzungen: 
• Installiertes, funktionstüchtiges JDK, inkl. %JAVA_HOME% 
• Downloa...
Die Maven POM Dateien 
• POM steht für „Project Object Model“ 
• Verwendet XML als Beschreibungssprache 
• Beschreiben ein...
Artefakt Identifizierung 
• Maven identifiziert Projekte eindeutig anhand: 
• groupID: 
• Frei wählbarer Identifier für di...
Projektname & Packaging 
• Projekte können einen beschreibenden Namen haben 
• Art des Builds wird als <packaging> im POM ...
Vererbung zwischen Projekten 
• POM Dateien können ihre Werte vererben 
• GroupID, Version 
• Abhängigkeiten 
• Pluginkonf...
Multi-Modul Projekte 
• Maven verfügt über eine sehr gute Multi-Modul 
Unterstützung über folgendes Pattern: 
• Jedes Mave...
Aufbau eines Maven-Projektes 
• Maven fördert Best-Practices der SW-Entwicklung durch 
einen standardisierten Aufbau der V...
Maven Build Lifecycle 
• Es gibt drei eingebaute Build Lifecyle: default, clean und site 
• Phasen des default-cycle: 
• v...
Maven Goals (Beispiele) 
• Maven ist ein wird über die Kommandozeile mit dem Befehl mvn und 
einem „Goal“ gestartet: 
• mv...
Maven und Abhängigkeiten 
• Maven hat das Management von Abhängigkeiten in Java 
revolutioniert 
• Kein Einchecken von Bib...
Abhängigkeit definieren 
• Eine Abhängigkeit besteht aus: 
• Eindeutiger Identifizierung (vgl. Artefakt Identifizierung) 
...
Maven Repositories 
• Abhängigkeiten werden aus Repositories geladen: 
• HTTP(S) Protokoll 
• Alle Downloads werden im lok...
Proxy-Repositories 
• Es gibt ein zentrales Maven Community Repository: 
• http://repo1.maven.org/maven2 
• Jeder kann eig...
Dependency Management 
• Wie mit Versionskonflikten umgehen: 
• Java kann nicht mit zwei Versionen einer Bibliothek umgehe...
Verwendung Dep. Management 
• Dependency Management wird in der Regel ausgelagert: Parent- 
POM und 3rd-Party POM 
<projec...
smartact: Dependencies, Modules und Vererbung „in Action“ 
smartact-base-pom 
Parent-Beziehung 
Abhängigkeit 
smartact-3rd...
IDE Integration (Eclipse) 
• Muss zunächst installiert werden: 
Persönliche Empfehlung: Statt Eclipse lieber direkt SPRING...
IDE Integration (Eclipse) - Tools 
24.01.2014 Maven 3 Einführung 22
Tipps und Tricks: 
• Ihr sucht ein Artefakt? Das Central Repository kann unter 
http://search.maven.org durchsucht werden....
Tipps und Tricks: 
• Ihr sucht ein Artefakt? Das Central Repository kann unter 
http://search.maven.org durchsucht werden....
Literatur 
• Homepage Apache Maven: 
• http://maven.apache.org 
• Sonatype Resources: 
• http://www.sonatype.com/resources...
Fragen, 
Anregungen, 
Vertiefungswünsche 
24.01.2014 Maven 3 Einführung 26
Nächste SlideShare
Wird geladen in …5
×

Introduction to Apache Maven 3 (German)

1.270 Aufrufe

Veröffentlicht am

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

Veröffentlicht in: Bildung
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
1.270
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
8
Aktionen
Geteilt
0
Downloads
8
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Introduction to Apache Maven 3 (German)

  1. 1. Apache Maven 3 Einführung Universität Bremen: Fachbereich 3 – Informatik & Mathematik Bachelor Projekt: Smart Activities Chris Michael Klinger 24.01.2014
  2. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 22. IDE Integration (Eclipse) - Tools 24.01.2014 Maven 3 Einführung 22
  23. 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. 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. 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. 26. Fragen, Anregungen, Vertiefungswünsche 24.01.2014 Maven 3 Einführung 26

×