Apache Maven - Dependencies (Permalink)

Im zweiten Teil der Serie über Apache Maven (hier geht es zum ersten Teil) geht es diesmal um Repositories und Dependencies.

Dependencies

Als Beispiel einer Dependency war im ersten Teil bereits JUnit aufgefallen (Ausschnitt pom.xml):

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.8.2</version>
</dependency>

Das reicht aus, um Maven zu sagen: bitte binde doch mal JUnit in Version 4.8.2 in den ClassPath ein. Maven lädt die notwendigen JARs dabei automatisch aus dem Netz herunter. Dazu dienen eine Reihe von Standardrepositories.

Repositories

Nicht alle Dependencies sind in den Standardrepositories vorhanden. Ist für eine Bibliothek ein eigenes Repository notwendig, so kann das wie folgt in der pom.xml angegeben werden:

<repositories>
    <repository>
        <id>jline</id>
        <name>JLine Project Repository</name>
        <url>http://jline.sourceforge.net/m2repo</url>
    </repository>
</repositories>

Hat man die notwendigen Repositories aktiviert kann man weitere Abhängigkeiten festlegen:

<dependency>
    <groupId>jline</groupId>
    <artifactId>jline</artifactId>
    <version>0.9.9</version>
</dependency>

Beispielprogramm

Ergänzen wir das Projekt aus Teil 1 um die Datei src/main/java/b1/Main.java:

package b1;

import java.io.IOException;
import java.io.PrintWriter;

import jline.ConsoleReader;

public class Main {
    public static void main(String[] args) throws IOException{
        ConsoleReader reader = new ConsoleReader();
        String line;
        PrintWriter out = new PrintWriter(System.out);
        while ((line = reader.readLine("number or quit> ")) != null) {
            if (line.equalsIgnoreCase("quit"))
                break;
            int i = Integer.parseInt(line);
            System.out.println(
                Math.square(i)+" ist " + i + " quadriert");
            out.flush();
        }
    }
}

Übersetzen und in ein JAR-File einpacken mit

mvn package

Testweise ausführen kann man das Programm nun einfach mit:

mvn exec:java -Dexec.mainClass="b1.Main"

Résumé

Dieser Teil der Serie hat das Einbinden von Abhängigkeiten vorgestellt. Sucht man für eine Bibliothek die notwendigen Angaben helfen Seiten wie http://mvnrepository.com. So hilft einem Maven durch das automatische Herunterladen schnell zu einer Menge von mächtigen Bibliotheken.

Update 23. Juli 2013

Die Quellen zu diesem Artikel kann man nun auch bei GitHub herunterladen oder forken.

Update 5. Juni 2018

Die Quellen zu diesem Artikel findet man jetzt unter https://git.lusiardi.de/jlusiardi/MavenBasics2. Maven 3.3 kann in einem Docker-Container mit folgendem Kommando zum Build benutzt werden:

docker run -it --rm -v "$(pwd)":/usr/src/mymaven   
 -w /usr/src/mymaven maven:3.3-jdk-8 mvn clean install