Apache Maven

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
Apache Maven

Apache Maven logo.svg
Basisdaten

Entwickler Apache Software Foundation
Erscheinungsjahr 30. März 2002
Aktuelle Version 3.8.1[1][2]
(4. April 2021)
Betriebssystem Plattformunabhängig
Programmiersprache Java[3][4][5]
Kategorie Build-Management-Tool
Lizenz Apache-Lizenz, Version 2.0
maven.apache.org

Maven ist ein auf Java basierendes Build-Management-Tool der Apache Software Foundation, mit dem insbesondere die Erstellung von Java-Programmen standardisiert verwaltet und durchgeführt werden kann.

Der Name Maven kommt aus dem Jiddischen und bedeutet so viel wie „Sammler des Wissens“.[6]

Konzeptionelles[Bearbeiten | Quelltext bearbeiten]

Maven versucht, den Grundgedanken „Konvention vor Konfiguration“ (englisch Convention over Configuration) konsequent für den gesamten Zyklus der Softwareerstellung abzubilden. Dabei sollen Softwareentwickler von der Anlage eines Softwareprojekts über das Kompilieren, Testen und Verpacken bis zum Verteilen der Software so unterstützt werden, dass möglichst viele Schritte automatisiert werden können. Folgt man dabei den von Maven vorgegebenen Standards, braucht man für die meisten Aufgaben des Build-Managements nur sehr wenige Konfigurationseinstellungen vorzunehmen, um den Lebenszyklus eines Softwareprojekts abzubilden.

Mit Maven-Archetypen können Gerüste für unterschiedlichste Arten von Softwareprojekten erstellt werden, deren Struktur dem Standard von Maven entspricht.

Maven-Lebenszyklen[Bearbeiten | Quelltext bearbeiten]

Die Maven-Lebenszyklen sind:

  • clean zum Löschen von Ergebnissen vorheriger Builds, mit den Phasen pre-clean, clean, post-clean,
  • default zum Erstellen des Projekts im Rahmen der unten genannten Phasen,
  • site zum Erstellen von Webseiten zur Projektdokumentation, mit den Phasen pre-site, site, post-site, site-deploy.

Maven geht dabei jeweils von einem Zyklus aus, der bei der Softwareerstellung häufig durchlaufen wird. Es muss aber nicht jedes Softwareprojekt alle Phasen des im Folgenden verkürzt dargestellten default-Zyklus verwenden:

validate (Validieren)
Hier wird geprüft, ob die Projektstruktur gültig und vollständig ist.
compile (Kompilieren)
In dieser Phase wird der Quellcode kompiliert.
test (Testen)
Hier wird der kompilierte Code mit einem passenden Testframework getestet. Maven berücksichtigt dabei in späteren Zyklen, dass Testklassen normalerweise nicht in der auszuliefernden Software vorhanden sind.
package (Verpacken)
Das Kompilat wird – ggf. mit anderen nichtkompilierbaren Dateien – zur Weitergabe verpackt. Häufig handelt es sich dabei um eine JAR-Datei.
integration-test (Integrationstests)
Das Softwarepaket wird auf eine Umgebung (anderer Rechner, anderes Verzeichnis, Anwendungsserver) geladen und seine Funktionsfähigkeit geprüft.
verify (Gültigkeitsprüfung des Softwarepakets)
Prüfungen, ob das Softwarepaket eine gültige Struktur hat und ggf. bestimmte Qualitätskriterien erfüllt.
install (Kopieren ins lokale Maven-Repository)
Kopiert das Softwarepaket ins lokale Maven-Repository, um es dann in anderen lokalen Maven-Projekten verwenden zu können. Dies ist insbesondere für modulare Projekte von Bedeutung.
deploy (Hochladen in ein entferntes Maven-Repository)
Lädt das Softwarepaket in ein entferntes Maven-Repository hoch, wonach es auch anderen Entwicklern zur Verfügung steht, mitunter auch weltweit.

Die Standard-Funktionalität eines jeden Zyklus' kann durch die Einbindung von zusätzlichen Maven-Plug-ins wesentlich erweitert werden.

Die Konfigurationsdatei: pom.xml[Bearbeiten | Quelltext bearbeiten]

Normalerweise werden die Informationen für ein Softwareprojekt, das von Maven unterstützt wird, in einer XML-Datei mit dem Dateinamen pom.xml (für Project Object Model) gespeichert. Diese Datei enthält alle Informationen zum Softwareprojekt und folgt einem standardisierten Format. Wird Maven ausgeführt, prüft es zunächst, ob diese Datei alle nötigen Angaben enthält und ob alle Angaben syntaktisch gültig sind, bevor es weiterarbeitet.

Standard-Verzeichnisstruktur[Bearbeiten | Quelltext bearbeiten]

Ein wesentliches Element des Prinzips Convention over Configuration ist die Standard-Verzeichnisstruktur von Maven. Sofern ein Projekt sich daran hält, müssen die Pfadnamen nicht spezifiziert werden, was die zentrale Konfigurationsdatei pom.xml stark vereinfacht. Auf oberster Stufe gibt es die beiden Verzeichnisse src und target. src enthält alle Dateien, die als Eingabe für den Verarbeitungsprozess dienen und in target werden automatisch alle erzeugten Dateien abgelegt. Auch weitere Verzeichnisstufen sind standardisiert und Plug-ins, die neue Arten von Eingabedateien verarbeiten oder neue Arten von Ausgabedateien erzeugen, geben dafür Standardpfade vor.

Die folgende Struktur zeigt einige der wichtigsten Verzeichnisse.[7]

src
alle Eingabedateien
src/main
Eingabedateien für die Erstellung des eigentlichen Produkts
src/main/java
Java-Quelltext
src/main/resources
andere Dateien, die für die Übersetzung oder zur Laufzeit benötigt werden, beispielsweise Java-Properties-Dateien
src/test
Eingabedateien, die für automatisierte Testläufe benötigt werden
src/test/java
JUnit-Testfälle für automatisierte Tests
target
alle erzeugten Dateien
target/classes
kompilierte Java-Klassen

Auflösung von Abhängigkeiten, zentrale Repositories[Bearbeiten | Quelltext bearbeiten]

In der pom.xml werden Softwareabhängigkeiten angegeben, die ein von Maven unterstütztes Softwareprojekt zu anderen Softwareprojekten hat. Diese Abhängigkeiten werden aufgelöst, indem Maven zunächst ermittelt, ob die benötigten Dateien in einem lokalen Verzeichnis, dem lokalen Maven-Repository, bereits vorhanden sind. Sind sie es, verwendet Maven z. B. beim Kompilieren die lokal vorhandene Datei von dort, also ohne sie in das Projektverzeichnis zu kopieren.

Kann die Abhängigkeit nicht lokal aufgelöst werden, versucht Maven, sich mit einem konfigurierten Maven-Repository im Intranet oder Internet zu verbinden und von dort die Dateien in das lokale Repository zu kopieren, um sie von nun an lokal verwenden zu können. Bekannte öffentliche Maven-Repositorys sind Apache, Ibiblio, Codehaus oder Java.Net. Firmenweite über das Intranet ansprechbare Maven-Repositorys dienen dazu, selbst entwickelte oder gekaufte Bibliotheken und Frameworks firmenweit allen Projekten zur Verfügung zu stellen. Diese Repositorys werden üblicherweise mittels Software wie Apache Archiva, Nexus, Artifactory, Proximity, Codehaus Maven Proxy oder Dead Simple Maven Proxy realisiert.

Individualisierbarkeit[Bearbeiten | Quelltext bearbeiten]

Fast alle Vorgaben, die Maven macht, können individuell geändert werden, bis auf die Struktur der Projektdatei (pom.xml): Man kann unterschiedliche Projektpfade wählen oder beispielsweise Compiler für andere Sprachen verwenden (sofern von Plug-ins unterstützt).

Unterstützung in Entwicklungsumgebungen[Bearbeiten | Quelltext bearbeiten]

Für die gängigsten Entwicklungsumgebungen (z. B. Eclipse, IntelliJ IDEA oder NetBeans) sind Plug-ins vorhanden, über die sich Maven direkt aus der Entwicklungsumgebung heraus bedienen lässt. Zusätzlich sind Maven-Plug-ins vorhanden, die Dateien erzeugen, welche den Import eines reinen Maven-Projekts in die Entwicklungsumgebung ermöglichen (siehe auch Beispiele).

Teilprojekte[Bearbeiten | Quelltext bearbeiten]

Die Entwicklung von Maven ist in verschiedene Teilprojekte untergliedert:

  • Maven 1 und Maven 2 werden seit Februar 2014 nicht mehr weiterentwickelt.[8]
  • Maven 3 stellt den aktuellen Entwicklungszweig der Core-Entwicklung dar.
  • Plugins entwickelt die meisten Maven-Plug-ins.
  • Shared Components stellt Softwarekomponenten bereit, die von den anderen Teilprojekten verwendet werden können.
  • Ant Tasks ermöglicht es, Maven-Funktionalität aus Ant-Skripten heraus zu verwenden.
  • Doxia ist ein Framework zum Generieren von Content aus den Formaten Almost Plain Text (APT), Confluence, DocBook, FML (FAQ Markup Language), LaTeX, Markdown, Rich Text Format (RTF), TWiki, XDoc und XHTML.
  • SCM (Source Code Management) entwickelt Software für die Anbindung von Apache an verschiedene Systeme zur Versionsverwaltung wie Git, Subversion oder CVS.
  • Surefire entwickelt ein Testframework für Maven.
  • Wagon stellt eine Abstraktionsschicht für Kommunikationsprotokolle wie „Dateizugriff“, HTTP oder FTP bereit.

Design[Bearbeiten | Quelltext bearbeiten]

Maven basiert auf einer Plug-in-Architektur, die es ermöglicht, Plug-ins für verschiedene Anwendungen (compile, test, build, deploy, checkstyle, pmd, scp-transfer) auf das Projekt anzuwenden, ohne diese explizit installieren zu müssen. Die Anzahl an Plug-ins ist mittlerweile sehr umfangreich: Die Bandbreite reicht von Plug-ins, die es ermöglichen, direkt aus Maven heraus eine Webanwendung zu starten, um sie im Browser zu testen, über welche, die es ermöglichen, Datenbanken zu testen oder zu erstellen, bis hin zu solchen, die Web Services generieren. Die dafür nötigen Tätigkeiten beschränken sich häufig nur darauf, das gewünschte Plug-in zu ermitteln und einzusetzen.

Beispiele[Bearbeiten | Quelltext bearbeiten]

Die folgenden Beispiele lassen sich nach der Installation ausführen. Maven wird beim erstmaligen Ausführen der angegebenen Befehle versuchen, diverse Dateien („Artefakte“) aus dem Internet oder einem internen Repository zu laden.

Ein Softwareprojekt erstellen[Bearbeiten | Quelltext bearbeiten]

Eingabe

Auf der Kommandozeile eingeben:

mvn archetype:generate -DgroupId=org.example -DartifactId=meine-anwendung

Ergebnis

Ein Unterverzeichnis meine-anwendung wird im aktuellen Verzeichnis erstellt. In diesem Verzeichnis finden sich neben der Datei pom.xml (s. o.) Verzeichnisse, die der standardmäßigen Verzeichnisstruktur von Maven entsprechen.

Einen Qualitätsreport mit PMD erstellen[Bearbeiten | Quelltext bearbeiten]

Eingabe

Im Wurzelverzeichnis des Softwareprojekts eingeben:

mvn pmd:pmd

Ergebnis

Die Software PMD wird aus dem Internet geladen, das Projekt wird analysiert und automatisch eine Berichtsseite erstellt.

Versionsgeschichte[Bearbeiten | Quelltext bearbeiten]

Die erste Version, Maven 1.x, wurde im Jahre 2003 eingeführt und am 13. Juli 2004 als Version 1.0 fertiggestellt. Die Umsetzung passierte jedoch sehr schnell, sodass einige Eigenheiten nicht bedacht wurden. Beispielsweise gab es Performanceprobleme und zu viele Konfigurationsdateien und -angaben.

Deshalb wurde das Konzept überarbeitet und seit dem Jahre 2005 parallel begonnen, Maven 2.x zu entwickeln, welches in Version 2.0 am 19. Oktober 2005 fertiggestellt wurde.[9]

Die Entwicklung von Maven 3.x begann im Jahr 2008. Maven 3.0 wurde am 8. Oktober 2010 veröffentlicht. Besonderes Augenmerk lag auf der Kompatibilität zwischen Maven 2 und 3.

Am 18. Februar 2014 wurde das End of Life von Maven 1.x verkündet.[8] Letzte veröffentlichte Version ist Maven 1.1 vom 25. Juni 2007.[10]

Am 18. Februar 2014 wurde das End of Life von Maven 2.x verkündet.[8] Letzte veröffentlichte Version ist Maven 2.2.1 aus dem November 2009.

Siehe auch[Bearbeiten | Quelltext bearbeiten]

Literatur[Bearbeiten | Quelltext bearbeiten]

  • Vincent Massol, Jason van Zyl, Brett Porter, John Casey, Carlos Sanchez: Better Builds with Maven. How-to Guide for Maven 2.0. Hrsg.: Exist Global. August 2007 (wisc.edu [PDF]).
  • Tim O’Brien, Jason van Zyl, Brian Fox, John Casey, Juven Xu, Thomas Locher: Maven: By Example. An Introduction to Apache Maven. Hrsg.: Sonatype. Mountain View, California 2010, ISBN 978-0-9842433-3-4 (sonatype.com).
  • Tim O’Brien, Jason van Zyl, Brian Fox, John Casey, Juven Xu, Thomas Locher: Maven: The Complete Reference. Hrsg.: Sonatype. Mountain View, California 2010, ISBN 978-0-9842433-4-1 (sonatype.com).

Weblinks[Bearbeiten | Quelltext bearbeiten]

Einzelnachweise[Bearbeiten | Quelltext bearbeiten]

  1. Maven Release Notes – Maven 3.8.1. (abgerufen am 8. April 2021).
  2. Apache Maven 3.8.1 Released. 4. April 2021 (englisch, abgerufen am 8. April 2021).
  3. www.zhihu.com.
  4. The maven2 Open Source Project on Open Hub: Languages Page. In: Open Hub. (abgerufen am 19. Oktober 2018).
  5. projects.apache.org. (abgerufen am 8. April 2020).
  6. What is Maven? maven.apache.org
  7. Maven – Introduction to the Standard Directory Layout. In: Apache Maven Project. Abgerufen am 13. Juli 2009.
  8. a b c Maven Releases History. In: maven.apache.org. Abgerufen am 21. Dezember 2015 (englisch).
  9. Historisches Archiv von Maven Versionen
  10. Maven 1.x Homepage mit Verweis auf Maven 2 (Memento vom 15. Februar 2012 im Internet Archive)