LAKO Kreativpreis_2024_Startnummer_02_(LFS_LA).pdf
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
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
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