Veröffentlicht am: 24.10.2011
Aktualisiert am: 27.05.2023
Von: JLusiardi
In Kategorie: Programmieren
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
Update 27. Mai 2023
Mit der Verwendung von Maven 3.6.3 ist als source
und target
Version mindestens 1.7
zu
verwenden. Ebenso wurden junit
auf Version 4.13.2
und jline
auf 2.14.6
aktualisiert.
Auf eine aktualisierung von jline
auf Version 3.x
wurde verzichtet, da hier der Quellcode
stärker hätte angepasst werden müssen. Der angepasste Quellcode steht im alt bekannten Gitea bereit.
Praktische Ergänzung: mvn versions:display-dependency-updates
listet alle Dependencies, von
denen neue Version vorhanden sind übersichtlich auf. Somit können diese entsprechend aktualisiert
werden. Es empfiehlt sich die Changelogs der entsprechenden Projekte zu studieren, um keine
Überraschungen zu erleben.