www.wikidata.de-de.nina.az
Apache Maven kurz Maven ist ein in der Programmiersprache Java geschriebenes Kommandozeilenwerkzeug aus der Kategorie der Build Werkzeuge Maven ist ein Top Level Projekt der Apache Software Foundation ASF und unter der freien Apache 2 0 Lizenz veroffentlicht Apache MavenBasisdatenEntwickler Apache Software FoundationErscheinungsjahr 30 Marz 2002Aktuelle Version 3 9 5 1 4 Oktober 2023 Betriebssystem PlattformunabhangigProgrammiersprache Java 2 3 4 Kategorie Build Management ToolLizenz Apache Lizenz Version 2 0maven apache orgIn der offiziellen Dokumentation bezeichnet sich Maven als Projektmanagement Werkzeug da die Funktionen weit uber das Erstellen Kompilieren der binar ausfuhrbaren Artefakte aus dem Quellcode hinausgehen Mit Maven konnen unter anderem auch Qualitatsanalysen von Programmcode und API Dokumentationen erzeugt werden 5 Maven wurde vornehmlich fur die Java Programmierplattform entwickelt und ist in integrierten Entwicklungsumgebungen fur Java z B Apache NetBeans Eclipse IntelliJ IDEA enthalten sodass oftmals keine separate Installation notwendig ist Der Name Maven kommt aus dem Jiddischen und bedeutet so viel wie Sammler des Wissens 5 Inhaltsverzeichnis 1 Geschichte 2 Architektur amp Design 3 Konzeptionelles 3 1 Standard Verzeichnisstruktur 3 2 Automatisiertes Erstellen eines neuen Maven Projektes mit Archetypen 3 3 Die Konfigurationsdatei pom xml 3 4 Auflosung von Abhangigkeiten Dependency Management 3 5 Maven Lebenszyklen Lifecycle 3 6 Teilprojekte 4 Siehe auch 5 Literatur 6 Weblinks 7 EinzelnachweiseGeschichte BearbeitenMaven entstand in der Apache Software Foundation aus Frust uber den Build Prozess von Turbine 6 Es wurde bald zum Top Level Projekt aufgrund der Notwendigkeit die Builds der vielen unterschiedlichen Projekte der Apache Software Foundation moglichst zu vereinheitlichen und somit auch zu vereinfachen Durch die vereinheitlichten Strukturen konnten Mitglieder unterschiedlicher Entwicklungsteams zwischen den einzelnen Teilprojekten wechseln und produktivere Arbeitsergebnisse erzielen Dank der projektubergreifenden Standardisierung war es nicht mehr notwendig sich in komplizierte Prozesse einzuarbeiten um das Projekt ausfuhren und testen zu konnen 7 Die Entwicklung von Maven 1 wurde im Jahr 2003 begonnen und am 13 Juli 2004 als Version 1 0 veroffentlicht Die Umsetzung passierte jedoch sehr schnell sodass einige Eigenheiten nicht bedacht wurden Beispielsweise gab es Performanzprobleme sowie viele Konfigurationsdateien und angaben die es zu beherrschen galt Am 18 Februar 2014 wurde das End of Life EoL von Maven 1 verkundet 8 Die letzte veroffentlichte Version ist 1 1 vom 25 Juni 2007 9 Seit dem Jahr 2005 wurde parallel damit begonnen Maven 2 zu entwickeln welches in Version 2 0 am 19 Oktober 2005 fertiggestellt wurde 10 Mit dem Major Release 2 wurde Maven von Grund auf uberarbeitet und bekannte Probleme aus der Vorgangerversion behoben Aus diesem Grund sind Maven 1 und Maven 2 nicht zueinander kompatibel Am 18 Februar 2014 wurde das End of Life von Maven 2 verkundet 8 Letzte veroffentlichte Version ist 2 2 1 aus November 2009 Die Entwicklung von Maven 3 begann im Jahr 2008 Maven 3 0 wurde am 8 Oktober 2010 veroffentlicht Besonderes Augenmerk lag auf der Kompatibilitat zwischen Maven 2 und 3 In der zweiten Halfte des Jahres 2021 wurden die Arbeiten an Maven 4 begonnen Eine wesentliche Verbesserung wird die stark optimierte Unterstutzung von Multi Modul Projekten 11 Architektur amp Design BearbeitenMaven benotigt zur Ausfuhrung eine Java virtuelle Maschine JVM und ist aufgrund dieses Umstandes plattformunabhangig Daher kann Maven auf jedem Betriebssystem ausgefuhrt werden fur das eine Java VM verfugbar ist Der Kern von Maven ist mit wenigen MB als Download Paket kompakt gehalten Die interne Struktur ist modular aufgebaut Samtliche Funktionen werden uber Erweiterungen sogenannte Plugins bei der erstmaligen Verwendung uber ein offentliches im Internet verfugbares Repository Maven Central genannt nachgeladen und in einem lokalen Repository abgelegt Es wird zwischen offiziellen Plugins 12 die unter der Hoheit des Maven Projektes stehen und anderen Plugins unterschieden Letztere werden unter Umstanden spater auch zu offiziellen Plugins Ende 2021 beispielsweise das maven wrapper plugin 13 Es ist ebenso moglich Maven durch selbst entwickelte Plugins zu erweitern Aufgrund dieses Charakters wird es auch als Plugin Execution Framework bezeichnet Konzeptionelles BearbeitenMaven ist deklarativ und basiert auf den beiden Paradigmen Don t repeat yourself DRY dt Ubers Wiederhole dich nicht selbst bedeutet sinngemass im Kontext von Maven dass nicht bei jedem Projekt dieselben Build Schritte neu definiert werden mussen Konvention vor Konfiguration en Convention over Configuration CoC bezieht sich auf die Konfigurationsdatei POM mit denen Maven Projekte beschrieben werden Durch festgelegte Konventionen haben moglichst viele Konfigurationseintrage gemeingultige Vorbelegungen default Werte die fur die meisten Anwendungsfalle bereits die erwunschten Ergebnisse produzieren Maven folgt den beiden beschriebenen Paradigmen uber dem gesamten Zyklus der Softwareerstellung konsequent Eine wichtige Voraussetzung fur eine erfolgreiche Automatisierung der einzelnen Schritte des Softwareerstellungsprozesses sind strikte Vereinheitlichungen wie sie durch die beiden Paradigmen DRY und CoC geschaffen werden Obwohl Maven bereits sehr viele Vorgaben macht konnen Projekte diese Vorgaben an ihre tatsachlichen Bedurfnisse problemlos anpassen Sowohl fur kunftige neuere Versionen von Maven als auch bei der Anbindung von Drittanbieterprodukten ist es eine bewahrte Praxis moglichst nahe am Maven Standard zu bleiben Im Zusammenhang mit Maven werden wichtige Begriffe verwendet die fur das weitere Verstandnis zunachst erlautert werden mussen Artifact dt Artefakt werden in Maven sowohl Plugins als auch Abhangigkeiten zu externen Programmbibliotheken und die selbst erstellten binaren Programmdateien des eigenen Softwareprojektes bezeichnet Lifecycle dt Lebenszyklus kann auch als Workflow oder Prozess verstanden werden Maven kennt drei Lifecycles clean site und build 14 Phasen werden die einzelnen Schritte innerhalb eines Lifecycle bezeichnet die in festgelegter linearer Reihenfolge durchlaufen werden Der Build Lifecycle default 15 kennt 23 Schritte Goal dt Ziel ist eine einzelne Aktion bzw Funktionalitat die in einem Plugin bereitgestellt wurde Standard Verzeichnisstruktur BearbeitenEin wesentliches Merkmal von Maven Projekten ist eine einheitliche Verzeichnisstruktur die im Nachfolgenden mit ihren wichtigsten Elementen kurz wiedergegeben wird 16 my project Wurzelverzeichnis pom xml Projektbeschreibung Build Logik src alle Eingabedateienmain Eingabedateien fur die Erstellung des eigentlichen Produkts dd java Java Quelltext Dateien dd dd resources Projektdateien die kein Java Quellcode sind aber fur die Ubersetzung oder zur Laufzeit benotigt werden z B Bilder SQL Java Properties Dateien etc dd dd test Eingabedateien die fur automatisierte Testlaufe benotigt werden dd java Testfalle die als Java Quellcode vorliegen z B JUnit Testfalle dd dd resources Zusatzliche Ressourcen fur Testfalle dd dd target Alle durch Maven wahrend des Build Vorgangs erstellten Dateienclasses kompilierte Java Klassen dd Das target Verzeichnis hat eine besondere Rolle inne hier werden alle von Maven wahrend des Build Vorgangs erzeugten Dateien wie beispielsweise Kompilate abgelegt Dieses temporare Verzeichnis wird ublicherweise durch die Projekte aus den Revisionen von Source Control Management Systemen wie Git ausgeklammert Die wichtigsten Verzeichnisse wie beispielsweise das Wurzelverzeichnis basedir oder auch das Ausgabeverzeichnis outputdir konnen uber durch Maven bereits vordefinierte Properties 17 angesprochen werden Diese Praxis sollte gegenuber der Verwendung von festen Verzeichnispfaden bevorzugt werden da dies die Portierbarkeit von Projekten ermoglicht Automatisiertes Erstellen eines neuen Maven Projektes mit Archetypen BearbeitenMit Maven Archetypen 18 archetypes konnen Geruste fur unterschiedlichste Arten von Softwareprojekten erstellt werden deren Struktur dem Standard von Maven entspricht mvn archetype generate Darchetype interactive false DarchetypeGroupId org apache maven archetypes DarchetypeArtifactId maven archetype quickstart DarchetypeVersion 1 4 DgroupId org sample archetypes DartifactId sampleproject Dversion 1 0 SNAPSHOT Dpackage jar Die Konfigurationsdatei pom xml Bearbeiten Die Konfigurationsdatei fur Maven Projekte hat die offizielle Bezeichnung Project Object Model POM 19 und ist als pom xml im Wurzelverzeichnis des Projektes abgelegt Im Kontext des Build Managements ist die pom xml die Build Logik welche von externen Werkzeugen wie dem Automatisierungsserver Jenkins aufgerufen wird Die zwingenden Basisangaben fur ein Maven Projekt innerhalb einer POM sind die sogenannten GAV Parameter zuzuglich des Packagetyps GAV steht fur G groupID A artifactId und V version Die GAV Koordinaten mussen fur jedes Maven Projekt eindeutig sein und durfen nicht mehrfach Verwendung finden lt xml version 1 0 encoding UTF 8 gt lt project gt lt modelVersion gt 4 0 0 lt modelVersion gt lt groupId gt org sample lt groupId gt lt artifactId gt project name lt artifactId gt lt version gt 1 0 SNAPSHOT lt version gt lt packaging gt pom jar war ear lt packaging gt lt project gt Listing1 Minimal POMAuflosung von Abhangigkeiten Dependency Management Bearbeiten Einer der wichtigsten Faktoren fur den Erfolg von Maven ist der einfache Umgang mit fremden Abhangigkeiten sogenannten 3rd Party Libraries Externe Abhangigkeiten werden in der pom xml notiert und uber ihre GAV Koordinaten eindeutig und transitiv aufgelost Die in Maven definierten Abhangigkeiten werden nicht mehr physisch in die Versionsverwaltung mitaufgenommen sondern wahrend des Buildvorgangs im Projekt Ausgabeverzeichnis target bereitgestellt Bei der Verwendung eines Artefaktes pruft Maven ob es bereits lokal im Repository vorhanden ist Das lokale Repository ist ein verstecktes Verzeichnis mit der Bezeichnung m2 repository und findet sich im home Verzeichnis des am Betriebssystem angemeldeten Nutzers Kann Maven das angeforderte Artefakt im lokalen Repository nicht finden wird in einem offentlichen Remote Repository danach gesucht Bei erfolgreicher Suche wird das Artefakt im lokalen Repository verfugbar gemacht Das wichtigste offentlich frei verfugbare Repository fur Java Artefakte lautet Maven Central und wird von dem Unternehmen Sonatype betrieben Es besteht die Moglichkeit einen eigenen Repository Server zu betreiben um selbst erstellte Artefakte im Unternehmen im Intranet fur andere Projekte bereitzustellen oder diese uber das Internet verfugbar zu machen Wichtige Implementierungen zum Hosten eigener Artefakte sind Sonatype Nexus OSS oder JFrog Artifactory fur die es sowohl freie Community Versionen als auch kommerzielle Enterprise Varianten gibt Diese Losungen konnen neben den verschiedenen Java Artefakten auch andere Formate wie beispielsweise Docker Images RubyGems NET nuget oder NPM verwalten Maven Central das grosste Open Source Repository wird mit Nexus OSS betrieben 20 Maven Lebenszyklen Lifecycle Bearbeiten Die Maven Lebenszyklen sind clean zum Loschen von Ergebnissen vorheriger Builds mit den Phasen pre clean clean post cl build default zum Erstellen des Projekts im Rahmen der untengenannten Phasen site zum Erstellen von Webseiten zur Projektdokumentation und Reports mit den Phasen pre site site post site site deploy Maven geht dabei jeweils von einem Zyklus aus der bei der Softwareerstellung im Allgemeinen durchlaufen wird Es muss aber nicht jedes Softwareprojekt alle Phasen des im Folgenden verkurzt dargestellten default Zyklus 15 verwenden Die Standardfunktionalitat kann durch die Einbindung von zusatzlichen Maven Plug ins an die entsprechende Phase erweitert werden validate Validieren Es wird uberpruft ob die pom xml und die Projektstrukturen vollstandig valide und gultig sind compile Kompilieren In dieser Phase wird der Quellcode kompiliert test Testen Hier wird der kompilierte Code durch das eingebundene Unit Test Framework z B JUnit TestNG getestet Maven berucksichtigt dabei in spateren Zyklen dass Testklassen normalerweise nicht in der auszuliefernden Software vorhanden sind package Verpacken Das Kompilat wird ggf mit anderen nicht kompilierbaren Dateien zur Weitergabe verpackt Haufig handelt es sich dabei um eine JAR Datei integration test Integrationstests Bereitstellen der programmatisch erstellten Integrationstests mittels Behavior Driven Development z B Cucumber jGiven verify Gultigkeitsprufung des Softwarepakets Uberprufung der Artefakte ob die festgelegten Spezifikationen erfullt wurden d h die bereitgestellten Integrationstests werden ausgefuhrt install Kopieren ins lokale Maven Repository Kopiert das Softwarepaket ins lokale Maven Repository um es dann in anderen lokalen Maven Projekten verwenden zu konnen Dies ist insbesondere fur modulare Projekte von Bedeutung deploy Hochladen in ein entferntes Maven Repository Ladt das Softwarepaket in ein entferntes Maven Repository hoch wonach es auch anderen Entwicklern zur Verfugung steht mitunter auch weltweit Teilprojekte 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 konnen Antrun ermoglicht es Tasks aus Ant Skripten in Maven 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 fur die Anbindung von Apache an verschiedene Systeme zur Versionsverwaltung wie Git Subversion oder CVS Surefire entwickelt eine Umgebung zum Ausfuhren von Unit Tests in Maven Failsafe entwickelt eine Umgebung zum Ausfuhren von Integrations Tests in Maven Wagon stellt eine Abstraktionsschicht fur Kommunikationsprotokolle wie Dateizugriff HTTP oder FTP bereit Siehe auch BearbeitenApache Ant Gradle konkurrierende Build Tools fur Java Apache Ivy Tool zur Verwaltung von Abhangigkeiten Jenkins Travis CI Automatisierungsserver CI Server Literatur BearbeitenVincent 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 Kai Uwe Bachmann Maven 2 Addison Wesley 2009 ISBN 978 3 8273 2835 9 deutsch 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 Martin Spiller Maven 3 Konfigurationsmanagement mit Java mitp Verlags GmbH amp Co KG 2011 ISBN 978 3 8266 9118 8 deutsch Srirangan Apache Maven 3 Cookbook Packt Publishing 2011 ISBN 978 1 84951 244 2 Balaji Varanasi Introducing Maven A Build Tool for Today s Java Developers 2nd ed edition Apress 2019 ISBN 978 1 4842 5409 7 Weblinks BearbeitenMaven Website englisch Maven Central das zentrale offentliche Maven Repository OSSRH Guide Anleitung zum Veroffentlichen von Artefakten auf Maven Central englisch Einfuhrung in Maven Konferenzvortrag IT Tage Frankfurt 2020 deutsch Plugins auf der Codehaus Homepage englisch Nicht mehr online verfugbar 13 April 2013 archiviert vom Original am 14 April 2013 abgerufen am 22 Juli 2017 Einzelnachweise Bearbeiten Release Notes Maven 3 9 5 www zhihu com The maven2 Open Source Project on Open Hub Languages Page In Open Hub abgerufen am 19 Oktober 2018 projects apache org abgerufen am 8 April 2020 a b What is Maven apache org 5 Januar 2022 abgerufen am 5 Januar 2022 englisch Apache Turbine Web Application Framework Turbine Alumni Apache Software Foundation 21 Dezember 2021 abgerufen am 5 Januar 2022 englisch Maven is an advanced Java Project Management tool originally developed out of the frustration with the Turbine build process Vincent Massol Jason van Zyl Brett Porter John Casey Carlos Sanchez Better Builds with Maven How to Guide for Maven 2 0 August 2007 S 299 a b c Maven Releases History In maven apache org Abgerufen am 21 Dezember 2015 englisch Maven 1 x Homepage mit Verweis auf Maven 2 Memento vom 15 Februar 2012 im Internet Archive Historisches Archiv von Maven Versionen Guide to Working with Multiple Modules in Maven 4 apache org abgerufen am 5 Januar 2022 englisch Maven Plugin Overview apache org abgerufen am 9 Januar 2022 englisch Issue Introduce wrapper lifecycle apache org abgerufen am 5 Januar 2021 englisch Maven Lifecycle Reference apache org abgerufen am 9 Januar 2022 englisch a b Maven Build Lifecycle apache org abgerufen am 9 Januar 2022 englisch Maven Introduction to the Standard Directory Layout In Apache Maven Project Abgerufen am 13 Juli 2009 englisch Apache Maven Properties amp Variables apache org abgerufen am 12 Januar 2022 Introduction to Archetypes apache org abgerufen am 12 Januar 2022 englisch Introduction to the POM apache org abgerufen am 12 Januar 2022 englisch Sonatype OSS Artefact upload fur Maven Central Sonatype abgerufen am 16 Januar 2022 englisch Abgerufen von https de wikipedia org w index php title Apache Maven amp oldid 237295398