2.3. Maven-Grundlagen


2.3.1. Überblick

Dieser Abschnitt liefert eine kurze Einführung in einige grundlegende Konzepte von Maven, die Ihnen dabei helfen, die fundamentalen Ideen des Maven Build-Systems zu verstehen.

2.3.2. Build von Lebenszyklus-Phasen

Maven definiert einen Standardsatz von Phasen im Build-Lebenszyklus, wobei die genaue Abfolge von Phasen davon abhängt, für welches Paket der Build erfolgt. Ein JAR-Paket zum Beispiel beinhaltet (unter anderem) die Phasen: compile, test, package und install.
Beim Ausführen von Maven wird die Phase in der Regel als ein Argument des mvn Befehls festgelegt um anzugeben, wie weit der Build voranschreiten soll. Hier sind ein paar der am häufigsten verwendeten Maven-Befehle:
  • Führen Sie den Build des Projekts durch, führen Sie die Einheitentests aus und installieren Sie das resultierende Paket im lokalen Maven Repository:
    mvn install
  • Bereinigen Sie das Projekt (indem Sie temporäre und intermediäre Dateien löschen):
    mvn clean
  • Führen Sie den Build des Projekts und die Einheitentests durch:
    mvn test
  • Build und Installation des Projekts, wobei Einheitentests übersprungen werden:
    mvn install -Dmaven.test.skip=true
  • Den Build des Projekts im Offline-Modus durchführen
    mvn -o install
    Der Offline-Modus (ausgewählt durch die -o Option) ist in denjenigen Fällen hilfreich, in denen Sie wissen, dass Sie bereits alle erforderlichen Abhängigkeiten in Ihrem lokalen Repository haben. Er hindert Maven daran (unnötig) auf Aktualisierungen für SNAPSHOT-Abhängigkeiten zu prüfen, so dass der Build schneller voranschreitet.

2.3.3. Maven-Verzeichnisstruktur

Beispiel 2.1, »Standard Maven Verzeichnislayout« zeigt das Standard-Verzeichnislayout von Maven. Am wichtigsten ist die Maven POM-Datei, pom.xml, die den Build für dieses Maven-Projekt konfiguriert.

Beispiel 2.1. Standard Maven Verzeichnislayout

ProjectDir/
    pom.xml
    src/
        main/
            java/
                ...
            resources/
                META-INF/
                    spring/
                        *.xml
                OSGI-INF/
                    blueprint/
                        *.xml
        test/
            java/
            resources/
    target/
        ...
Die Java-Quelldateien des Projekts müssen unter ProjectDir/src/main/java/ gespeichert und alle Ressourcendateien sollten unter ProjectDir/src/main/resources/ gespeichert werden. Insbesondere Spring XML-Dateien (die mit dem Muster *.xml übereinstimmen) sollten unter dem folgenden Verzeichnis gespeichert werden:
ProjectDir/src/main/resources/META-INF/spring/
Blueprint XML Dateien (die mit dem Muster *.xml übereinstimmen), sollten unter dem folgenden Verzeichnis gespeichert werden:
ProjectDir/src/main/resources/OSGI-INF/blueprint/

2.3.4. Konvention vor Konfiguration

Ein wichtiges Prinzip ist bei Maven das der Konvention vor Konfiguration. Dies bedeutet, dass Mavens Funktionen und Plugins mit vernünftigen Standardkonventionen initialisiert werden, so dass die grundlegende Funktionalität von Maven nur wenig oder keine Konfiguration erfordert.
Insbesondere der Speicherort der Dateien innerhalb von Mavens standardmäßigem Verzeichnis-Layout bestimmt effektiv, wie diese verarbeitet werden. Wenn Sie zum Beispiel ein Maven Projekt für den Build eines JAR haben, so werden alle Java-Dateien im src/main/java Verzeichnis automatisch kompiliert und dem JAR hinzugefügt. Alle Ressourcen-Dateien im src/main/resources Verzeichnis werden ebenfalls dem JAR hinzugefügt.
Anmerkung
Obwohl es möglich ist, die Standardkonventionen von Maven zu ändern, wird davon dringend abgeraten. Die Verwendung von nicht standardmäßigen Maven Konventionen macht die Konfiguration Ihrer Projekte schwieriger und schwerer verständlich.

2.3.5. Maven Packtyp

Maven definiert eine Vielfalt an Packtypen, die das Build-Grundverhalten bestimmen. Die gängigsten Packtypen lauten wie folgt:
jar
(Default) Dieser Packtyp wird für JAR-Dateien verwendet und ist der Standard-Packtyp in Maven.
bundle
Dieser Packtyp wird für OSGi-Bündel verwendet. Um diesen Packtyp zu verwenden, müssen Sie auch den maven-bundle-plugin in der POM-Datei konfigurieren.
war
Dieser Packtyp wird für WAR-Dateien verwendet. Um diesen Packtyp zu verwenden, müssen Sie auch den maven-war-plugin in der POM-Datei konfigurieren.
pom
Beim Build mit diesem Packtyp wird die POM-Datei selbst im lokalen Maven-Repository installiert. Dieser Packtyp wird in der Regel für übergeordnete POM-Dateien verwendet.

2.3.6. Maven Artifakte

Das Endprodukt eines Maven-Builds ist ein Maven Artifakt (zum Beispiel eine JAR-Datei). Maven Artifakte werden normalerweise in einem Maven-Repository installiert, von wo aus auf diese zugegriffen werden kann und wo diese als Bausteine für andere Maven-Projekte verwendet werden können (indem sie als Abhängigkeiten deklariert werden).

2.3.7. Maven Koordinaten

Artifakte werden durch einen Tupel von Maven Koordinaten eindeutig identifiziert, die in der Regel aus groupId:artifactId:version bestehen. Bei der Bereitstellung eines Maven Artifakts in den Red Hat JBoss Fuse Container, können Sie es mit einem Maven URI der Form mvn:groupId/artifactId/version referenzieren.
Weitere Informationen zu Maven Koordinaten finden Sie unter Bereitstellung in den Container.

2.3.8. Maven Abhängigkeiten

Die häufigste Änderung, die Sie an der POM-Datei Ihres Projekts werden vornehmen müssen ist das Hinzufügen oder Entfernen von Maven Abhängigkeiten. Eine Abhängigkeit ist einfach eine Referenz zu einem Maven Artifakt (in der Regel eine JAR-Datei), das benötigt wird, um Ihr Projekt auszuführen. Genau genommen übernimmt die Verwaltung der Collection von Abhängigkeiten im Kontext eines Maven Builds den Platz der Verwaltung der Collection von JAR-Dateien in einem Klassenpfad.
Der folgende Schnipsel aus einer POM-Datei zeigt, wie eine Abhängigkeit am camel-blueprint Artifakt festgelegt wird:
<project ...>
    ...
    <dependencies>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-blueprint</artifactId>
            <version>2.15.1.redhat-621084</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
    ...
</project>

2.3.9. »dependency« Element

Das dependency Element deklariert eine Abhängigkeit vom Maven Artifakt mit Koordinaten org.apache.camel:camel-blueprint:6.2.1.redhat-084. Sie können so viele dependency Elemente wie Sie möchten innerhalb des dependencies Elements hinzufügen.

2.3.10. »dependency/scope« Element

Das scope-Element ist optional und liefert zusätzliche Informationen darüber, wann diese Abhängigkeit benötigt wird. Es wird standardmäßig angenommen (mit weggelassenem scope Element), dass die Abhängigkeit beim Build, dem Testen der Einheit und zur Runtime benötogt wird. Mit am Wert eingestelltem scope provided, hängt die Auswirkung davon ab, welche Art von Artifakt erstellt wird:
  • OSGi Bündel—(wenn das packaging Element von POM als bundle festgelegt ist), so hat die provided Bereichseinstellung keine Wirkung.

2.3.11. Transitive Abhängigkeiten

Um die Liste von Abhängigkeiten in Ihrem POM zu vereinfachen und nicht jede einzelne Abhängigkeit explizit auflisten zu müssen, bietet Maven einen rekursiven Algorithmus, um die für Ihr Projekt erforderlichen Abhängigkeiten zu ermitteln.
Wenn Ihr Projekt A zum Beispiel von B1 und B2 abhängt, B1 von C1, C2 und C3 und B2 von D1 und D2 abhängt, so zieht sich Maven zum Zeitpunkt des Build automatisch alle explizit und implizit benötigten Abhängigkeiten und erstellt einen Klassenpfad, der die Abhängigkeiten B1, B2, C1, C2, C3, D1 und D2 beinhaltet. Von diesen Abhängigkeiten erscheinen nur B1 und B2 explizit in As POM-Datei. Der Rest der Abhängigkeiten—die von Maven herausgefunden werden—sind als transitive Abhängigkeiten bekannt.

2.3.12. Maven Repositories

Ein Maven Repository ist ein Ort, an dem Maven nach Artifakten suchen kann. Da Maven Repositorys überall sein können—und das beinhaltet überall im Internet—ist das Maven Build-System inhärent distribuiert. Nachfolgend sehen Sie die Hauptkategorien des Maven Repository:
  • Lokales Repository—das lokepale Rository (standardmäßig, gespeichert unter ~/.m2/repository auf *NIX oder C:\Documents and Settings\UserName\.m2\repository auf Windows) wird von Maven wie folgt verwendet:
    • Erster Suchort—das lokale Repository ist der erste Ort, an dem Maven nach einer Abhängigkeit sucht.
    • Cache heruntergeladener Abhängigkeiten—jegliche Artifakte, die von einem entfernten Speicherort heruntergeladen wurden, sind dauerhaft im lokalen Repository gespeichert, damit sie schnell abgerufen werden können, wenn sie das nächste Mal benötigt werden.
    • Speicher lokal erstellter Artifakte—bei jedem Build eines lokalen Projekts (mittels mvn install), wird das resultierende Artifakt in Ihrem lokalen Repository gespeichert.
  • Remote Repository—Maven kann auch nach Artifakten in entfernten Repositorys suchen und diese herunterladen. Standardmäßig versucht Maven automatisch ein Artifakt von entfernten Repositorys herunterzuladen, wenn es das Artifakt nicht im lokalen Repository finden kann (Sie können dieses Verhalten durch Festlegen des -o Flag unterdrücken—zum Beispiel mvn -o install).
  • System Repository—(nur Red Hat JBoss Fuse Container; wird nicht vom mvn Befehlszeilen-Tool verwendet) zur Runtime kann der Red Hat JBoss Fuse Container auf Artifakte vom JBoss Fuse System Repository unter InstallDir/system/ zugreifen.
Weitere Informationen zu Maven Repositories finden Sie unter Bereitstellung in den Container.

2.3.13. Festlegen entfernter Repositorys

Falls Sie die Maven zugänglichen Remote Repositories anpassen müssen, so müssen Sie zunächst die Speicherorte für die Build- und Runtime Repositorys wie folgt separat konfigurieren:
  • Build-Zeitpunkt—um die benutzerdefinierten Repositorys, auf die zum Zeitpunkt des Build zugegriffen werden kann, anzupassen (beim Ausführen des mvn Befehls), bearbeiten Sie die Maven settings.xml Datei an folgendem Speicherort:
    • *Nix: standardmäßiger Speicherort ist ~/.m2/settings.xml.
    • Windows: standardmäßiger Speicherort ist C:\Documents and Settings\UserName\.m2\settings.xml.
  • Runtime—um die zur Runtime zugänglichen entfernten Repositorys anzupassen (von innerhalb des Red Hat JBoss Fuse Containers), bearbeiten Sie die Einstellungen der relevanten Eigenschaften in InstallDir/etc/org.ops4j.pax.url.mvn.cfg.
Red Hat logoGithubRedditYoutubeTwitter

Lernen

Testen, kaufen und verkaufen

Communitys

Über Red Hat Dokumentation

Wir helfen Red Hat Benutzern, mit unseren Produkten und Diensten innovativ zu sein und ihre Ziele zu erreichen – mit Inhalten, denen sie vertrauen können.

Mehr Inklusion in Open Source

Red Hat hat sich verpflichtet, problematische Sprache in unserem Code, unserer Dokumentation und unseren Web-Eigenschaften zu ersetzen. Weitere Einzelheiten finden Sie in Red Hat Blog.

Über Red Hat

Wir liefern gehärtete Lösungen, die es Unternehmen leichter machen, plattform- und umgebungsübergreifend zu arbeiten, vom zentralen Rechenzentrum bis zum Netzwerkrand.

© 2024 Red Hat, Inc.