„Apache Maven“ – Versionsunterschied
[gesichtete Version] | [gesichtete Version] |
Inhalt gelöscht Inhalt hinzugefügt
GünniX (Diskussion | Beiträge) K Tippfehler korrigiert |
-haznK (Diskussion | Beiträge) Linkvorschlag-Funktion: 3 Links hinzugefügt. |
||
(23 dazwischenliegende Versionen von 14 Benutzern werden nicht angezeigt) | |||
Zeile 18:
| Sonstiges =
}}
'''Apache Maven''' (kurz ''Maven'') ist ein in der Programmiersprache [[Java (Programmiersprache)|Java]] geschriebenes [[Kommandozeile
In der offiziellen Dokumentation bezeichnet sich Maven als Projektmanagement
Maven wurde vornehmlich für die [[Java-Technologie|Java
Der Name ''Maven'' kommt aus dem [[Jiddisch]]en und bedeutet so viel wie „Sammler des Wissens“.<ref name="WhatIsMaven" />
== Geschichte ==
Maven entstand in der Apache Software Foundation aus Frust über den [[Erstellungsprozess|Build-Prozess]] von Turbine<ref>{{Internetquelle |url=https://turbine.apache.org/ |titel=Apache Turbine™ Web Application Framework |titelerg=Turbine Alumni |hrsg=Apache Software Foundation |datum=2021-12-21 |sprache=en |abruf=2022-01-05
Durch die vereinheitlichten Strukturen konnten Mitglieder
Die Entwicklung von '''Maven 1''' wurde im
Seit dem
Die Entwicklung von '''Maven 3''' 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.
In der zweiten Hälfte des Jahres 2021 wurden die Arbeiten an '''Maven 4''' begonnen. Eine wesentliche Verbesserung wird die stark optimierte Unterstützung von Multi-Modul
== Architektur & Design ==
Maven benötigt zur Ausführung eine Java [[virtuelle Maschine]] (JVM) und ist
Der Kern von Maven ist mit wenigen MB als Download-Paket kompakt gehalten. Die interne Struktur ist [[Modularität|modular]] aufgebaut. Sämtliche Funktionen werden über Erweiterungen, sogenannte Plugins, bei der erstmaligen Verwendung über ein öffentliches im Internet verfügbares [[Repository]], Maven Central genannt, nachgeladen und in einem lokalen Repository abgelegt.
Es wird zwischen offiziellen Plugins<ref>{{Internetquelle |url=https://maven.apache.org/plugins/ |titel=Maven Plugin Overview |hrsg=apache.org |sprache=en |abruf=2022-01-09
Es ist ebenso möglich, Maven durch selbst entwickelte Plugins zu erweitern.
== Konzeptionelles ==
# [[Don’t repeat yourself]] (DRY; dt. Übers.: Wiederhole dich nicht
# [[Konvention vor Konfiguration]] (en: Convention over Configuration; CoC) bezieht sich auf die Konfigurationsdatei (POM), mit denen Maven-Projekte beschrieben werden. Durch festgelegte Konventionen haben möglichst viele Konfigurationseinträge gemeingültige Vorbelegungen (default
Maven folgt den beiden beschriebenen Paradigmen über dem gesamten Zyklus der Softwareerstellung konsequent. Eine wichtige Voraussetzung für 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, können Projekte diese Vorgaben an ihre tatsächlichen Bedürfnisse problemlos anpassen.
Im Zusammenhang mit Maven werden wichtige Begriffe verwendet, die für das weitere Verständnis
; [[Artifact]] (dt. [[Artefakt (Technik)|Artefakt]]): werden in ''Maven'' sowohl Plugins
; Lifecycle (dt. Lebenszyklus): kann auch als [[Arbeitsablauf|Workflow]] oder [[Prozess (Informatik)|Prozess]] verstanden werden. Maven kennt drei
; Phasen: werden die einzelnen Schritte innerhalb eines Lifecycle bezeichnet, die in festgelegter linearer Reihenfolge durchlaufen werden. Der Build-Lifecycle (default)
; Goal (dt. Ziel): ist eine einzelne Aktion bzw. Funktionalität, die in einem Plugin bereitgestellt wurde.
=== Standard-Verzeichnisstruktur ===
Ein
<div style="margin-left:2em"><code>my-project/</code>
<div style="margin-left:4em"><code>pom.xml</code> – Projektbeschreibung (Build-Logik)</div>
<div style="margin-left:4em"><code>src/</code> – alle Eingabedateien</div>
<div style="margin-left:6em"><code>main/</code> – Eingabedateien für die Erstellung des eigentlichen Produkts</div>
<div style="margin-left:8em"><code>java/</code> – [[Java (Programmiersprache)|Java-Quelltext-Dateien]]</div>
<div style="margin-left:8em"><code>resources/</code> – Projektdateien, die kein Java-Quellcode sind, aber für die Übersetzung oder zur Laufzeit benötigt werden, z. B. Bilder, SQL, [[Java-Properties-Datei]]en etc.</div>
<div style="margin-left:6em"><code>test/</code> – Eingabedateien, die für automatisierte Testläufe benötigt werden</div>
<div style="margin-left:8em"><code>java/</code> – Testfälle, die als Java-Quellcode vorliegen, z. B. [[JUnit]]-Testfälle</div>
<div style="margin-left:4em"><code>target/</code> – Alle durch Maven während des Build-Vorgangs erstellten Dateien</div>
<div style="margin-left:6em"><code>classes/</code> – kompilierte Java-Klassen</div>
Das ''target''
Die wichtigsten Verzeichnisse wie beispielsweise das [[Stammverzeichnis|Wurzelverzeichnis]] (${basedir}) oder auch das Ausgabeverzeichnis (${outputdir}) können über durch Maven bereits vordefinierte [[Variable (Programmierung)|Properties]]<ref>{{Internetquelle |url=https://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Project_Interpolation |titel=Apache Maven Properties & Variables |hrsg=apache.org |abruf=2022-01-12}}</ref> angesprochen werden. Diese Praxis sollte gegenüber der Verwendung von festen Verzeichnispfaden
Mit Maven-Archetypen<ref>{{Internetquelle |url=https://maven.apache.org/guides/introduction/introduction-to-archetypes.html |titel=Introduction to Archetypes |hrsg=apache.org |sprache=
<syntaxhighlight lang="shell" line="1">
▲+-- resources/ : Zusätzliche Ressourcen für Testfälle
▲Das ''target'' Verzeichnis hat eine besondere Rolle inne, hier werden alle von Maven während des [[Compiler|Build-Vorgang]]s erzeugten Dateien wie beispielsweise Kompilate abgelegt. Dieses temporäre Verzeichnis wird üblicherweise durch die Projekte aus den Revisionen von Source Control Management Systemen wie [[Git]] ausgeklammert.
▲Die wichtigsten Verzeichnisse wie beispielsweise das [[Stammverzeichnis|Wurzelverzeichnis]] (${basedir})oder auch das Ausgabeverzeichnis (${outputdir}) können über durch Maven bereits vordefinierte [[Variable (Programmierung)|Properties]]<ref>{{Internetquelle |url=https://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Project_Interpolation |titel=Apache Maven Properties & Variables |hrsg=apache.org |abruf=2022-01-12}}</ref> angesprochen werden. Diese Praxis sollte der Verwendung von festen Verzeichnispfaden gegenüber bevorzugt werden, da dies die [[Portable Software|Portierbarkeit]] von Projekten ermöglicht.
▲=== Automatisiertes Erstellen eines neue Maven Projektes mit Archetypes ===
▲Mit Maven-Archetypen<ref>{{Internetquelle |url=https://maven.apache.org/guides/introduction/introduction-to-archetypes.html |titel=Introduction to Archetypes |hrsg=apache.org |sprache=englisch |abruf=2022-01-12}}</ref> (archetypes) können Gerüste für unterschiedlichste Arten von Softwareprojekten erstellt werden, deren Struktur dem Standard von Maven entspricht.<syntaxhighlight lang="shell" line="1">
mvn archetype:generate \
-Darchetype.interactive=false \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DarchetypeVersion=1.4 \
-DgroupId=org.sample.archetypes \
Zeile 107 ⟶ 100:
=== {{Anker|POM}} Die Konfigurationsdatei: pom.xml ===
Die Konfigurationsdatei für Maven
Die zwingenden Basisangaben für ein Maven
<syntaxhighlight lang="xml" line="1"> <?xml version="1.0" encoding="UTF-8"?>
<project>
Zeile 119 ⟶ 113:
<packaging>pom | jar | war | ear </packaging>
</project>
</syntaxhighlight>
'''Listing1''': Minimal POM === Auflösung von Abhängigkeiten (Dependency Management) ===
Einer der wichtigsten Faktoren für den Erfolg von Maven ist der einfache Umgang mit fremden Abhängigkeiten, sogenannten [[Programmbibliothek|3rd Party Libraries]]. Externe Abhängigkeiten werden in der pom.xml notiert und über ihre GAV
Bei der Verwendung eines Artefaktes prüft Maven, ob
Kann Maven das angeforderte Artefakt im
Es besteht die Möglichkeit,
Wichtige [[Implementierung
=== Maven-Lebenszyklen (Lifecycle) ===
Zeile 137 ⟶ 132:
* <code>clean</code> zum Löschen von Ergebnissen vorheriger Builds, mit den Phasen <code>pre-clean</code>, <code>clean</code>, <code>post-cl</code>
* <code>build (default)</code> zum Erstellen des Projekts im Rahmen der
* <code>site</code> zum Erstellen von Webseiten zur Projektdokumentation und Reports, mit den Phasen <code>pre-site</code>, <code>site</code>, <code>post-site</code>, <code>site-deploy</code>.
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 verkürzt dargestellten ''default''-Zyklus<ref name="lifecycle" /> verwenden. Die
; {{lang|en|validate}} ([[Extensible Markup Language|Validieren]])
: Es wird überprüft, ob die pom.xml und die Projektstrukturen [[Vollständigkeit (Logik)|vollständig]], [[Validität|valide]] und [[Verifizierung|gültig]] sind.
; {{lang|en|compile}} ([[Compiler|Kompilieren]])
:
; {{lang|en|test}} ([[Modultest|Testen]])
: Hier wird der kompilierte Code
; {{lang|en|package}} ([[Programmpaket|Verpacken]])
: Das Kompilat wird – ggf. mit anderen nicht kompilierbaren Dateien – zur Weitergabe verpackt. Häufig handelt es sich dabei um eine [[Java Archive|JAR]]-Datei.
; {{lang|en|integration-test}} ([[Integrationstest]]s)
: Bereitstellen der programmatisch erstellten Integrationstests mittels [[Behavior Driven Development]] (z.
; {{lang|en|verify}} (Gültigkeitsprüfung des Softwarepakets)
: Überprüfung der Artefakte,
; {{lang|en|install}} (Kopieren ins lokale Maven-[[Repository#Software-Repository|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.
Zeile 163 ⟶ 158:
Die Entwicklung von Maven ist in verschiedene Teilprojekte untergliedert:
* ''Maven 1'' und ''Maven 2'' werden seit Februar 2014 nicht mehr weiterentwickelt.<ref name="maven history">{{Internetquelle |url=https://maven.apache.org/docs/history.html |titel=Maven Releases History |werk=maven.apache.org |sprache=en |abruf=2015-12-21
* ''Maven 3'' stellt den aktuellen Entwicklungszweig der Core-Entwicklung dar.
* ''Plugins'' entwickelt die meisten Maven-Plug-ins.
Zeile 171 ⟶ 166:
* ''SCM'' (Source Code Management) entwickelt Software für die Anbindung von Apache an verschiedene Systeme zur [[Versionsverwaltung]] wie [[Git]], [[Apache Subversion|Subversion]] oder [[Concurrent Versions System|CVS]].
* ''Surefire'' entwickelt eine Umgebung zum Ausführen von [[Modultest|Unit-Tests]] in Maven.
* ''Failsafe'' entwickelt eine Umgebung zum Ausführen von [[Integrationstest|Integrations-Tests]] in Maven.
* ''Wagon'' stellt eine Abstraktionsschicht für Kommunikationsprotokolle wie „Dateizugriff“, [[Hypertext Transfer Protocol|HTTP]] oder [[File Transfer Protocol|FTP]] bereit.
Zeile 177 ⟶ 172:
* [[Apache Ant]], [[Gradle]] konkurrierende Build Tools für Java
* [[Apache Ivy]], Tool zur Verwaltung von Abhängigkeiten
* [[Jenkins (Software)|Jenkins]], [[Travis CI]], Automatisierungsserver (CI Server)
== Literatur ==
Zeile 186 ⟶ 181:
|TitelErg=How-to Guide for Maven 2.0
|Datum=2007-08
|Online=[https://wiki.doit.wisc.edu/confluence/download/attachments/20316166/DLFE-52.pdf wisc.edu]
|Format=PDF
|KBytes=}}
* Kai Uwe Bachmann, Maven 2, Addison-Wesley, 2009, ISBN 978-3-8273-2835-9, (deutsch).
* {{Literatur
|Autor=Tim O’Brien, Jason van Zyl, Brian Fox, John Casey, Juven Xu, Thomas Locher
Zeile 209 ⟶ 204:
* Martin Spiller, Maven 3: Konfigurationsmanagement mit Java, mitp Verlags GmbH & 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
== Weblinks ==
* [https://maven.apache.org/ Maven Website] (englisch)
* [https://search.maven.org/ Maven Central, das zentrale öffentliche Maven-Repository]
* [https://central.sonatype.org/publish/publish-guide/ OSSRH Guide], Anleitung zum Veröffentlichen von Artefakten auf Maven Central (englisch)
* [https://www.bitchute.com/video/dtbjwQ9Z6YEg/ Einführung in Maven], Konferenzvortrag [[IT-Tage|IT-Tage Frankfurt 2020]] (deutsch)
* {{Internetquelle
|url=http://mojo.codehaus.org/plugins.html
|titel=Plugins auf der Codehaus-Homepage (englisch)
|datum=2013-04-13
|offline=1
|archiv-url=http://archive.is/20130414194646/http://mojo.codehaus.org/plugins.html
|archiv-datum=2013-04-14
|abruf=2017-07-22}}
== Einzelnachweise ==
|