Apache Maven

Apache Maven
Apache Maven
Maven logo.gif
Entwickler Apache Software Foundation
Aktuelle Version 3.0.3[1]
(3. März 2011)
Betriebssystem plattformübergreifend
Programmier­sprache Java
Kategorie Build-Management-Tool
Lizenz Apache-Lizenz 2.0
maven.apache.org

Maven ist ein Build-Management-Tool der Apache Software Foundation und basiert auf Java. Mit ihm kann man insbesondere Java-Programme standardisiert erstellen und verwalten.

Inhaltsverzeichnis

Konzeptionelles

Maven versucht, den Grundgedanken „Konvention vor Konfiguration“ (englisch Convention over Configuration) konsequent für den gesamten Zyklus der Softwareerstellung abzubilden. Dabei sollen Software-Entwickler von der Anlage eines Softwareprojekts über das Kompilieren, Testen und „Packen“ bis zum Verteilen der Software auf Anwendungsrechnern 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 zu hinterlegen, um den Lebenszyklus eines Softwareprojekts abzubilden.

Der Standard-Lebenszyklus

Maven geht von einem Zyklus aus, den Software, die mit Unterstützung von Maven erstellt wird, häufig durchläuft. Dabei wird nicht unterstellt, dass jedes Softwareprojekt alle Phasen des folgend dargestellten Zyklus verwendet:

  • archetype (Scaffolding): Damit kann ein Template für ein Softwareprojekt erstellt werden. Abhängigkeiten werden aufgelöst und bei Bedarf heruntergeladen.
  • 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 (Test der Integrationsmöglichkeit): Das Softwarepaket wird auf eine Umgebung (anderer Rechner, anderes Verzeichnis, Anwendungsserver) geladen und seine Funktionsfähigkeit geprüft.
  • verify (Gültigkeitsprüfung des Software-Pakets): Prüfungen, ob das Softwarepaket eine gültige Struktur hat und ggf. bestimmte Qualitätskriterien erfüllt.
  • install (Installieren im lokalen Maven-Repository): Installiere das Softwarepaket in dem lokalen Maven-Repository, um es in anderen Projekten verwenden zu können, die von Maven verwaltet werden. Dies ist insbesondere für modulare Projekte interessant.
  • deploy (Installieren im entfernten Maven-Repository): Stabile Versionen der Software werden auf einem entfernten Maven-Repository installiert und stehen damit in Umgebungen mit mehreren Entwicklern allen zur Verfügung.

Dieser Lebenszyklus kann noch wesentlich durch Maven-Plugins und Maven-Archetypen (engl. Archetypes) erweitert werden. Mit Maven-Archetypen können Gerüste für unterschiedlichste Softwareprojekte erstellt werden, die der Standardstruktur von Maven entsprechen.

Maven-Plugins ermöglichen neue Verarbeitungsschritte zu verwenden (z.B. Verteilung auf einen Anwendungsserver) und/oder die Schritte im Standard-Lebenszyklus zu erweitern.

Die Konfigurationsdatei: pom.xml

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

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 Plugins, 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.[2]

  • src: alle Eingabedateien
    • src/main: Eingabedateien für die Erstellung des eigentlichen Produkts
    • 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: compilierte Java-Klassen

Auflösung von Abhängigkeiten, zentrale Repositories

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-Repositories sind Apache, Ibiblio, Codehaus oder Java.Net. Firmenweite über das Intranet ansprechbare Maven-Repositories dienen dazu, selbst entwickelte oder gekaufte Bibliotheken und Frameworks firmenweit allen Projekten zur Verfügung zu stellen. Diese Repositories werden üblicherweise mittels Software wie Apache Archiva, Nexus, Artifactory, Proximity, Codehaus Maven Proxy oder Dead Simple Maven Proxy realisiert.

Individualisierbarkeit

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, Compiler für andere Sprachen verwenden (sofern von Plugins unterstützt).

Unterstützung in Entwicklungsumgebungen

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

Teilprojekte

Die Entwicklung von Maven ist in verschiedene Teilprojekte untergliedert.

  • Maven 1.x pflegt die älteren Versionen von Maven.
  • Maven 2 entwickelt die aktuelle Produktlinie von Maven weiter.
  • Plugins entwickelt die meisten Maven-Plugins.
  • 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, 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 CVS oder Subversion.
  • Surefire entwickelt ein Testframework für Maven.
  • Wagon stellt eine Abstraktionsschicht für Kommunikationsprotokolle wie „Dateizugriff“, HTTP oder FTP bereit.

Design

Maven basiert auf einer Plugin-Architektur, die es ermöglicht, Plugins 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 Plugins ist mittlerweile sehr umfangreich: Die Bandbreite reicht von Plugins, 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 Tätigkeit der mit der Softwareentwicklung betrauten Person beschränkt sich häufig nur darauf, das gewünschte Plugin zu ermitteln und einzusetzen.

Beispiele

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 lokalen Repository zu laden.

Ein Softwareprojekt erstellen

Eingabe
An der Kommandozeile eingeben:

mvn archetype:generate -DgroupId=org.beispielurl -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.

Unterstützung für die Entwicklungsumgebung

Nachdem ein Maven-Projekt erstellt wurde, möchte man dieses in einer Entwicklungsumgebung (hier: Eclipse) weiterbearbeiten. An der Kommandozeile wechselt man in das Wurzelverzeichnis des Projekts.

Eingabe

mvn eclipse:eclipse

Ergebnis

Die Dateien .project und .classpath werden – abhängig von den Einstellungen in der Datei pom.xml – erzeugt. Das Projekt lässt sich nun in Eclipse importieren. Ist ein entsprechendes Eclipse-Plugin vorhanden, können weitere Abhängigkeiten zu Maven-Artefakten auch über die grafische Benutzerschnittstelle hinzugefügt werden.

Einen Qualitätsreport mit PMD erstellen

Eingabe
Im Wurzelverzeichnis des Softwareprojekts eingeben:

 mvn pmd:pmd

Ergebnis
Die Software PMD wird aus dem Internet geladen, das Projekt wird analysiert und automatisch wird eine Report-Seite erstellt.

Versionsgeschichte

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 gibt 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.[3]

Maven 1.x wird nicht mehr weiterentwickelt und beschränkt sich auf Support und Bugfixes. Die letzte Version von Maven 1.x (Version 1.1) wurde am 25. Juni 2007 ausgeliefert.[4]

Die Entwicklung von Maven 3.0 begann im Jahr 2008. Nach acht Alpha-Releases, wurde die erste Beta-Version von Maven 3.0 in April 2010 veröffentlicht. Besonderes Augenmerk lag auch auf der Kompatibilität zwischen Maven 2 und 3.

Siehe auch

  • Apache Ant, konkurrierendes Build Tool für Java
  • Apache Ivy, Tool zur Verwaltung von Abhängigkeiten

Literatur

Weblinks

Einzelnachweise

  1. Maven 3.0.3 Release Notes
  2. Maven - Introduction to the Standard Directory Layout. In: Apache Maven Project. Abgerufen am 13. Juli 2009.
  3. Historisches Archiv von Maven Versionen
  4. Maven 1.x Homepage mit Verweis auf Maven 2

Wikimedia Foundation.

Игры ⚽ Поможем написать реферат

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Apache Maven — Тип Автоматизация сборки Разработчик …   Википедия

  • Apache Maven — Developer(s) Apache Software Foundation Stable release 3.0.3[1] / March 3, 2011 …   Wikipedia

  • Apache Maven — Pour les articles homonymes, voir Maven. Apache Maven …   Wikipédia en Français

  • Maven — Desarrollador Apache Software Foundation http://maven.apache.org …   Wikipedia Español

  • Apache Ant — (Another Neat Tool) Тип Билд утилиты Разработчик …   Википедия

  • Apache Ivy — Entwickler Apache Software Foundation Aktuelle Version 2.2.0 (30. September 2010 [1]) Betriebssystem plattformübergreifend …   Deutsch Wikipedia

  • Maven — ist ein Wort der englischen Sprache mit hebräisch jiddischen Wurzeln und bezeichnet einen, meist selbsternannten Experten eines einzelnen Wissensbereiches, der versucht, sein Wissen an andere weiterzugeben. Als Teil des Produktnamens wird es… …   Deutsch Wikipedia

  • Apache Incubator — is the gateway for Open source projects intended to become fully fledged Apache Software Foundation projects.The Incubator project was created in October 2002 to provide an entry path to the Apache Software Foundation for projects and codebases… …   Wikipedia

  • Apache CXF — Entwickler Apache Software Foundation Aktuelle Version 2.4.0 (18. April 2011) Betriebssystem plattformübergreifend Programmier­sprache Java …   Deutsch Wikipedia

  • MAVEN — Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom. Maven peut désigner : Apache Maven, un outil logiciel libre pour la gestion et l automatisation de production des projets logiciels Java MAVEN, une… …   Wikipédia en Français

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”