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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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. 
• 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
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
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
Fragen, 
Anregungen, 
Vertiefungswünsche 
24.01.2014 Maven 3 Einführung 26

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. VorstellungApache 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 undinstallieren • 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 POMDateien • 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 • Esgibt 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, Modulesund 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 • HomepageApache 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