Introduction to Apache Maven 3 (German)
-
Upload
chris-michael-klinger -
Category
Education
-
view
156 -
download
3
Transcript of 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
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
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
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
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 6Maven 3 Einführung
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
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
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
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
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
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
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
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
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
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
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
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>
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
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
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)
IDE Integration (Eclipse) - Tools
24.01.2014 22Maven 3 Einführung
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
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
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
Fragen, Anregungen,
Vertiefungswünsche
24.01.2014 Maven 3 Einführung 26