Entwickelt von | Apache Software Foundation |
---|---|
Erste Version | 13. Juli 2004 |
Letzte Version | 3.8.1 (4. April 2021) |
Anzahlung | gitbox.apache.org/repos/asf/maven.git |
Geschrieben in | Java |
Betriebssystem | Multiplattform |
Umgebung | Java virtuelle Maschine |
Art |
Produktionsmaschine Paketmanager |
Lizenz | Apache-Lizenz Version 2.0 |
Webseite | maven.apache.org |
Apache Maven (allgemein als Maven bezeichnet ) ist ein Tool zum Verwalten und Automatisieren der Produktion von Java- Softwareprojekten im Allgemeinen und Java EE im Besonderen. Es wird verwendet, um die kontinuierliche Integration während der Softwareentwicklung zu automatisieren . Maven wird von der Apache Software Foundation- Organisation verwaltet . Das Tool war zuvor ein Zweig der Organisation des Jakarta-Projekts .
Ziel ist es, Software aus ihren Quellen zu produzieren, die zu diesem Zweck ausgeführten Aufgaben zu optimieren und den richtigen Fertigungsauftrag sicherzustellen.
Es kann mit dem make- System unter Unix oder mit dem Ant- Tool verglichen werden .
Maven verwendet ein Paradigma, das als Project Object Model (POM) bekannt ist, um ein Softwareprojekt, seine Abhängigkeiten von externen Modulen und die Reihenfolge, in der es erstellt wird, zu beschreiben. Es enthält eine Vielzahl vordefinierter Aufgaben, z. B. die Kompilierung von Java-Code oder dessen Modularisierung.
Ein Schlüsselelement und ein relativ spezifisches Element von Maven ist seine Fähigkeit, als Netzwerk zu fungieren. Eine der historischen Beweggründe dieses Tools besteht darin, ein Mittel zur Synchronisierung unabhängiger Projekte bereitzustellen: standardisierte Veröffentlichung von Informationen, automatische Verteilung von Glasmodulen . In der Basisversion kann Maven Hardware dynamisch von bekannten Software- Repositorys herunterladen . Es bietet somit eine transparente Synchronisation der notwendigen Module.
Maven1 und Maven2 wurden parallel entwickelt, aber spätere Versionen basieren auf der Struktur der zweiten Version. Die folgenden Teile des Artikels konzentrieren sich auf Maven2. Eine Version 3 von Maven wurde am veröffentlicht8. Oktober 2010. Das Ende der Unterstützung für Version 2 wurde am registriert18. Februar 2014.
Jedes Projekt oder Teilprojekt wird von einem POM konfiguriert, das die Informationen enthält, die Maven zur Verarbeitung des Projekts benötigt (Projektname, Versionsnummer, Abhängigkeiten zu anderen Projekten, für die Kompilierung erforderliche Bibliotheken, Namen der Mitwirkenden usw.). Dieser POM wird durch eine Datei pom.xmlim Stammverzeichnis des Projekts materialisiert . Dieser Ansatz ermöglicht die Vererbung von Eigenschaften aus dem übergeordneten Projekt. Wenn eine Eigenschaft im POM des Projekts neu definiert wird, überlappt sie die im übergeordneten Projekt definierte. Dies führt das Konzept der Wiederverwendung von Konfigurationen ein. Die POM-Datei des Hauptprojekts heißt übergeordnetes POM . Es enthält eine detaillierte Beschreibung Ihres Projekts mit insbesondere Informationen zu Versionsverwaltung und Konfigurationsverwaltung, Abhängigkeiten, Anwendungsressourcen, Tests, Teammitgliedern, Struktur und mehr.
Maven legt eine Baumstruktur und eine Benennung der Projektdateien gemäß dem Konzept der Konvention und nicht der Konfiguration fest . Diese Konventionen reduzieren die Konfiguration von Projekten, solange ein Projekt den Konventionen folgt. Wenn ein Projekt von der Konvention abweichen muss, gibt der Entwickler dies in der Projektkonfiguration an.
Hier ist eine nicht vollständige Liste der Verzeichnisse eines Maven-Projekts:
Die Ziele ( Ziele Englisch) Schlüssellebenszyklus eines Maven Projekts sind:
Die Idee ist, dass für jedes Ziel alle vorgelagerten Ziele ausgeführt werden sollten, es sei denn, sie wurden bereits erfolgreich ausgeführt und seitdem wurden keine Änderungen am Projekt vorgenommen. Wenn wir beispielsweise ausführen mvn install, überprüft Maven, ob der Vorgang mvn packageerfolgreich abgeschlossen wurde (das Glas ist in vorhanden target/). In diesem Fall wird es nicht erneut ausgeführt.
Andere Ziele können außerhalb des Lebenszyklus ausgeführt werden und sind nicht Teil des Standardlebenszyklus von Maven (sie sind nicht erforderlich). Hier sind die wichtigsten:
Sie können dennoch über das POM zum Lebenszyklus hinzugefügt werden.
Im Maven-Tool basiert das Abhängigkeitsmanagement auf zwei Konzepten:
Der Begriff der transitiven Beziehung wird für die Beziehung "abhängig von" und das gesamte Java-Projekt implementiert.
Beispiel: Betrachten Sie drei Projekte (A, B, C). Wenn A von B und B von C abhängt, hängt A von C ab.
In Maven ist die Transitivität standardmäßig als automatisch konfiguriert. Diese Konfiguration kann bei großen Projekten zu Einschränkungen führen:
Bis zu einer Verbesserung des Plugins kann diese Option durch Konfigurieren der bereitgestellten Option deaktiviert werden .
Ein weiterer Beitrag des Maven-Tools ist die Organisation von Projekten und Plugins. Maven verfügt über mehrere Repositorys auf mehreren Ebenen. Der Zweck des Repositorys besteht darin, sowohl verwendete oder geplante Plugins als auch von Maven generierte Projekte zur Verfügung zu stellen. Sie können dort natürlich Projekte installieren, um sie zu verwenden (ohne dass sie von Maven generiert werden). Es gibt drei Repositories:
Um ein Repository für das Unternehmen (oder ein allgemeines Repository im Allgemeinen) zu erstellen, können Sie die Protokolle ftp, scp, file und http verwenden.
Hinweis: Das für das FTP-Protokoll bereitgestellte Plugin kann ein Problem darstellen, da es noch nicht entwickelt wurde.
Um ein JAR im Repository zu installieren (ohne dass es sich um ein Maven-Projekt handelt), müssen Sie das POM damit generieren. Andernfalls versucht Maven, eine Verbindung in den verschiedenen Repositorys herzustellen, um danach zu suchen. Dies ist eine echte Zeitverschwendung, da das Glas in diesen Repositorys nicht vorhanden sein soll.
Eine letzte wichtige Bemerkung: Im Repository gibt es eine klar definierte und unveränderliche Struktur (die es Maven ermöglicht, sich zurechtzufinden), in der die Gläser und Projekte nach der Gruppen-ID, der Artefakt-ID und dann nach der Version organisiert sind.
Sobald eine Erklärung abgegeben wurde (Abhängigkeit oder auf andere Weise), sucht Maven an folgendem Ort:
{Repository-Speicherort} / groupId / artefaktId / version
Die Namen der Pakete lauten wie folgt:
{Artefakt-ID} - {Version}. {Paket}
Und im Gegensatz zum "Ziel" -Verzeichnis, in dem wir den Namen unseres Pakets definieren können, ist es nicht gestattet, die Namen oder die Struktur der Pakete zu ändern, wenn das Paket nicht erkannt wird und daher "BUILD FAILED".
Von Maven erstellte Berichte umfassen:
Die Plugins ermöglichen das Hinzufügen von Funktionen. Diese Plugins sind auf der Maven-Site verfügbar oder können andernfalls entwickelt werden. Um ein Plugin zu verwenden, müssen Sie es nur im POM deklarieren.
Beachten Sie, dass die Deklaration standardmäßig vererbt wird. Die Deklaration erfolgt auf einfache Weise: Gruppen-ID (wenn keine deklariert ist, wird die Standard-org.apache.maven verwendet), Artefakt-ID und möglicherweise die Version (andernfalls wird die letzte Version verwendet).
Nach dieser Deklaration überprüft Maven beim Starten einer Aufgabe ihre Anwesenheit im lokalen Repository. Wenn das Plugin nicht gefunden werden kann, stellt es eine Verbindung zum zentralen Repository her, um es herunterzuladen. Im Falle eines fehlgeschlagenen Wiederherstellungsvorgangs beendet man die Ausführung mit einer Fehlermeldung (man kann dies vermeiden und Maven bitten, fortzufahren und das Ergebnis der Behandlung - mit den Fehlermeldungen - am Ende anzugeben).
Mit Eclipse können Sie Pakete generieren, diese berücksichtigen jedoch nicht die Struktur von Maven und werden auch nicht im Repository installiert. Dies bedeutet, dass ohne die Verwendung eines externen Tools alle generierten Pakete manuell installiert werden müssen.
Es ist ein Maven-Plugin für Eclipse verfügbar, mit dem Eclipse Maven im Hintergrund verwenden und daher Eclipse und Maven zusammen verwenden kann.
Auf diese Weise können Maven-Projekte generiert und im Repository gespeichert werden.
Dies ermöglicht insbesondere die Abhängigkeit von Projekten, die sich im Repository befinden, und daher müssen sie nicht unter Eclipse importiert werden, wie dies bei den vorhandenen Tools der Fall ist. Der Klassenpfad wird von Maven generiert.
Andererseits weist seine Verwendung einige Mängel auf.
Wenn wir den Befehl starten, der den Klassenpfad 'mvn eclipse: eclipse' aus einem übergeordneten POM generiert, müssen alle Module im Arbeitsbereich vorhanden sein. Die Abhängigkeit wird in diesem Bereich erstellt. Um eine Abhängigkeit vom Repository zu erhalten, müssen Sie den Befehl für jedes Modul ausführen.
Ein weiteres Problem (derzeit ohne Lösung) betrifft die Vererbung, wenn die Hierarchie in den Verzeichnissen nicht berücksichtigt wird.
BemerkungenHier ist eine nicht erschöpfende Liste von Continuous Integration Engines , die in Verbindung mit Maven verwendet werden können:
Hier ist eine nicht erschöpfende Liste von Plattformen zur Analyse der Quellcodequalität, die in Verbindung mit Maven verwendet werden können: