Introduction to Apache Maven 3 (German)

26
Apache Maven 3 Einführung Universität Bremen: Fachbereich 3 – Informatik & Mathematik Bachelor Projekt: Smart Activities Chris Michael Klinger 24.01.2014

Transcript of Introduction to Apache Maven 3 (German)

Page 1: Introduction to Apache Maven 3 (German)

Apache Maven 3Einführung

Universität Bremen: Fachbereich 3 – Informatik & Mathematik

Bachelor Projekt: Smart Activities

Chris Michael Klinger

24.01.2014

Page 2: Introduction to Apache Maven 3 (German)

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 2Maven 3 Einführung

Page 3: Introduction to Apache Maven 3 (German)

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 3Maven 3 Einführung

Page 4: Introduction to Apache Maven 3 (German)

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 4Maven 3 Einführung

Page 5: Introduction to Apache Maven 3 (German)

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

Page 6: Introduction to Apache Maven 3 (German)

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 6Maven 3 Einführung

Page 7: Introduction to Apache Maven 3 (German)

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

24.01.2014 7

<?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

Page 8: Introduction to Apache Maven 3 (German)

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

24.01.2014 8

<?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

Page 9: Introduction to Apache Maven 3 (German)

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!

24.01.2014 9

<?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

Page 10: Introduction to Apache Maven 3 (German)

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

24.01.2014 10

<?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

Page 11: Introduction to Apache Maven 3 (German)

Aufbau eines Maven-Projektes

• Maven fördert Best-Practices der SW-Entwicklung durch einen standardisierten Aufbau der Verzeichnisse:

24.01.2014 11

Artifact Source FilesArtifact Ressource FilesTest Source FilesTest Ressource FilesWeitere Source Files (z.B. Web)Arbeitsverzeichnis (unbedingt: .gitignore!)pom-Datei im Root!

Maven 3 Einführung

Page 12: Introduction to Apache Maven 3 (German)

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 12Maven 3 Einführung

Page 13: Introduction to Apache Maven 3 (German)

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:perfomBenö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 13Maven 3 Einführung

Page 14: Introduction to Apache Maven 3 (German)

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 14Maven 3 Einführung

Page 15: Introduction to Apache Maven 3 (German)

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)

24.01.2014 15

<?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

Page 16: Introduction to Apache Maven 3 (German)

Maven Repositories

• Abhängigkeiten werden aus Repositories geladen:• HTTP(S) Protokoll

• Alle Downloads werden im lokal Benutzer-Repository zwischengespeichert:• Normalerweise zu finden unter %USERPROFILE%\.m2\repository

• 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 16Maven 3 Einführung

Page 17: Introduction to Apache Maven 3 (German)

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 17Maven 3 Einführung

Page 18: Introduction to Apache Maven 3 (German)

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

24.01.2014 18Maven 3 Einführung

<?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>

Page 19: Introduction to Apache Maven 3 (German)

Verwendung Dep. Management

• Dependency Management wird in der Regel ausgelagert: Parent-POM und 3rd-Party POM

24.01.2014 19Maven 3 Einführung

<project>

...

<dependencyManagement>

<dependencies>

<dependency>

<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>

</dependency> <!-- look: no version defined, inherit from base! -->

</dependencies>

</project>

de.uni_bremen.smartactivities.pom:smartact-base-pom:1.0-SNAPSHOT

de.uni_bremen.smartactivities:my-artefact:1.0-SNAPSHOT

Page 20: Introduction to Apache Maven 3 (German)

smartact: Dependencies, Modules und Vererbung „in Action“

24.01.2014 20Maven 3 Einführung

smartact-base-pom

smartact-3rdparty-pom smartact-sync

smartact-runtime

smartact-backend-parent

smartact-backend-data

smartact-backend-service

smartact-backend-gui

openhab-core

Parent-BeziehungAbhängigkeit

Module

Version von openhab-core wird im DependencyManagement von samrtact-3rdparty-pom festgelegt und steht in smartact-runtime über Parent & Abhängigkeitsbeziehungen zur Verfügung!

DRAFT 23.01.2014 – Änderungen möglich

Page 21: Introduction to Apache Maven 3 (German)

IDE Integration (Eclipse)

• Muss zunächst installiert werden:

24.01.2014 21Maven 3 Einführung

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)

Page 22: Introduction to Apache Maven 3 (German)

IDE Integration (Eclipse) - Tools

24.01.2014 22Maven 3 Einführung

Page 23: Introduction to Apache Maven 3 (German)

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%\.m2\repository“ löschen.

24.01.2014 Maven 3 Einführung 23

Page 24: Introduction to Apache Maven 3 (German)

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%\.m2\repository“ löschen.

24.01.2014 Maven 3 Einführung 24

Page 25: Introduction to Apache Maven 3 (German)

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 25Maven 3 Einführung

Page 26: Introduction to Apache Maven 3 (German)

Fragen, Anregungen,

Vertiefungswünsche

24.01.2014 Maven 3 Einführung 26