Maven und die POM.xml

Image licensed by Ingram Image/adpic

Was ist Maven?

Maven, ein Wort, das im Yiddish „Sammler von Wissen“ bedeutet, ist ein leistungsstarkes Projektmanagement-Werkzeug, das in erster Linie für Java-Projekte entwickelt wurde. Sein Hauptziel ist es, den Build-Prozess zu vereinfachen und zu standardisieren. Maven übernimmt den gesamten Lebenszyklus eines Softwareprojekts, von der Kompilierung über das Testen bis hin zum Verpacken und der Verteilung.
Weitere Infos

Was ist POM (bzw. die pom.xml Datei)?

POM steht für „Project Object Model“. Die pom.xml Datei ist das Herzstück eines Maven-Projekts. Sie beschreibt das Projekt, seine Abhängigkeiten, Plugins, Ziele und viele andere wichtige Aspekte. Durch die Deklaration von Abhängigkeiten sorgt Maven dafür, dass die benötigten Bibliotheken zur Laufzeit bereitstehen und das Projekt korrekt gebaut wird.
Mehr dazu

Quick Start: Maven Installation

Bevor Sie mit Maven arbeiten können, sollten Sie sicherstellen, dass es auf Ihrem System installiert ist. Hier finden Sie eine schnelle Anleitung zur Installation von Maven auf verschiedenen Betriebssystemen.

Auf Linux (Ubuntu/Debian)

  1. Paketdatenbank aktualisieren

    sudo apt update
  2. Maven installieren

    sudo apt install maven
  3. Überprüfen der Installation

    mvn -v

    Wenn alles geklappt hat, sollten Sie eine Ausgabe sehen, die mit der Maven-Version beginnt.

Auf Windows

  1. JDK installierenStellen Sie sicher, dass das Java Development Kit (JDK) auf Ihrem System installiert ist. Sie können es von Oracle oder AdoptOpenJDK herunterladen.
  2. Maven herunterladenLaden Sie die neueste Version von der Maven-Website herunter und entpacken Sie das Archiv an einem geeigneten Ort (z.B. C:\Program Files\Apache Maven).
  3. Umgebungsvariablen setzen

    • Fügen Sie den Pfad zum bin-Verzeichnis von Maven zu Ihrer PATH-Umgebungsvariable hinzu.
    • Setzen Sie die M2_HOME und MAVEN_HOME Variablen auf den Pfad, an dem Sie Maven entpackt haben.
  4. Überprüfen der Installation

    mvn -v

    Öffnen Sie die Eingabeaufforderung und geben Sie den obenstehenden Befehl ein. Sie sollten eine Ausgabe mit der Maven-Version sehen, wenn die Installation erfolgreich war.

Beispiel: pom.xml

Dies ist ein einfaches Beispiel für eine pom.xml-Datei. Hier werden die GAV-Koordinaten definiert: GAV steht für GroupId, ArtifactId, Version, und diese drei Elemente sind entscheidend, um Abhängigkeiten in Maven-Projekten zu definieren.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>MeinProjekt</artifactId>
  <version>1.0</version>
</project>
  • GroupId: Diese ID identifiziert ein Projekt eindeutig im Kontext aller anderen Projekte. Häufig wird sie genutzt, um den Namespace des Projekts anzugeben, und ist oft ähnlich wie der Domainname der Organisation strukturiert. Ein Beispiel könnte com.organisationname sein.
  • ArtifactId: Dies ist der Name des JARs, welches durch das Projekt erzeugt wird. In der Regel entspricht dies dem Projektnamen. Wenn ein Projekt beispielsweise eine Bibliothek zur Finanzberechnung ist, könnte die ArtifactId finanzberechnungsbibliothek lauten.
  • Version: Die Versionsangabe des Projekts. Sie ist entscheidend, um verschiedene Entwicklungsstadien einer Anwendung oder Bibliothek zu unterscheiden. Beispiele für Versionsangaben sind 1.0.0, 2.0.3, oder 1.0.1-SNAPSHOT.

Zusammengefasst bilden diese drei Elemente die Koordinaten, die Maven nutzt, um Abhängigkeiten zu identifizieren, zu lokalisieren und zu verwalten. Bei der Hinzufügung einer Abhängigkeit in der pom.xml-Datei eines Maven-Projekts werden genau diese GAV-Koordinaten angegeben. Maven übernimmt daraufhin die Aufgaben, wie das Herunterladen und die Integration der entsprechenden Bibliothek in das Projekt.

Mehr erfahren

Ein weiteres Beispiel: pom.xml mit Dependencies (Abhängigkeiten)

Das folgende Beispiel zeigt eine typische pom.xml für ein Java-Projekt, das die JUnit-Bibliothek für Tests und die Log4j-Bibliothek für Logging verwendet.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!-- Grundlegende Informationen zum Projekt -->
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <!-- Projektgruppe, oft der Unternehmensname -->
  <artifactId>MyAwesomeApp</artifactId>
  <!-- Projektname -->
  <version>1.0-SNAPSHOT</version>
  <!-- Version des Projekts -->
  <!-- Abhängigkeiten für dieses Projekt -->
  <dependencies>
    <!-- JUnit für Unit Tests -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
      <!-- Nur für Test-Phasen benötigt -->
    </dependency>
    <!-- Log4j für Logging -->
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>2.14.1</version>
    </dependency>
  </dependencies>
  <!-- Build und Plugin-Konfiguration -->
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.0</version>
        <configuration>
          <source>1.8</source>
          <!-- Java-Version für den Quellcode -->
          <target>1.8</target>
          <!-- Java-Version für das kompilierte Artefakt -->
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

PROJEKTSTRUKTUR

Maven setzt auf eine klare Struktur und Namenskonventionen. Einige davon sind:

  • src/main/java: Hier wird der Haupt-Code des Projekts abgelegt.
  • src/main/resources: Hier finden sich die nicht-code Ressourcen wie Konfigurationsdateien.
  • src/test/java: Hier liegen die JUnit-Tests oder andere Testklassen.
  • target: Das Verzeichnis, in dem Maven den kompilierten Bytecode ablegt.

Durch diese Konventionen können Entwickler leicht von einem Maven-Projekt zum anderen wechseln, ohne sich jedes Mal neu orientieren zu müssen.
Mehr erfahren

LEBENSZYKLUS

Der Build-Lebenszyklus in Maven ist eine geordnete Folge von Phasen, durch die ein Projekt gehen kann. Einige der wichtigsten Phasen sind:

  • validate: Überprüft, ob alle notwendigen Informationen vorhanden sind.
  • compile: Kompiliert den Quellcode.
  • test: Führt Tests mit einem geeigneten Unit-Testing-Framework aus.
  • package: Packt den Code in ein verteilbares Format, z. B. JAR.
  • install: Installiert das Paket im lokalen m2 Repository.
  • deploy: Veröffentlicht das Paket in einem Remote-Repository.

Mehr erfahren

Maven-Befehle

mvn clean package // Bereinigt das „target“-Verzeichnis und erstellt das Paket
mvn install // Installiert das Paket im lokalen Repository
mvn test // Führt die Tests aus

ZUSAMMENFASSUNG

Zusammengefasst, Maven und die pom.xml Datei automatisieren und vereinfachen den Build-Prozess eines Java-Projekts erheblich. Mit seinen klaren Konventionen, dem definierten Lebenszyklus und dem flexiblen Plugin-System macht Maven das Leben eines Java-Entwicklers um einiges leichter.