Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
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.581 Aufrufe

Veröffentlicht am

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

Veröffentlicht in: Bildung
  • Als Erste(r) kommentieren

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

×