Veröffentlicht am: 23.10.2011
Aktualisiert am: 27.05.2023
Von: JLusiardi
In Kategorie: Programmieren
Einführung
Apache Maven ist laut Wikipedia ein Build-Management-Tool, welches insbesondere geeignet ist, Java-Projekte zu standardisiert zu erstellen und zu verwalten.
Installation
Um mit Maven arbeiten zu können, muss man unter Gnu Debian 6.0 mindestens diese beiden Pakete installieren:
- maven2
- openjdk-6-jdk
Erstes Projekt
Maven verwendet ein standardisiertes Layout für die Projektverzeichnisse.
\projekt - Wurzelverzeichnis des Projekts
\pom.xml - Verwaltungdatei
\src
| \main
| \java - Anwendungscode in Java
| \test
| \java - Testcode in Java
\target - alle erzeugten Dateien landen hier
Das target-Verzeichnis legt Maven dabei bei Bedarf neu an.
Die Datei "pom.xml" beschreibt dabei notwendige Informationen über das Projekt.
<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>de.lusiardi.maven</groupId>
<artifactId>basics1</artifactId>
<packaging>jar</packaging>
<version>0.1</version>
<name>Einfuehrung in Maven</name>
<url>http://wp.lusiardi.de/?p=197</url>
<build>
<plugins>
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-compiler-plugin
</artifactId>
<version>2.1</version>
<configuration>
<source>
1.5
</source>
<target>
1.5
</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Im Einzelnen bedeuten die Einträge folgendes:
- modelVersion: aktuell immer 4.0.0
- groupId: id für die Gruppe, zu der das Artefakt (das Projekt) gehört
- artifactId: id des Artefakts (des Projekts)
- packaging: jar legt fest, dass das Projekt als jar-Datei zusammengepackt werden soll
- version: die Version des Projekts, -SNAPSHOT sagt aus, dass das Projekt noch im Entwicklungszustand ist und regelmässige Änderungen erwartet werden
- name: der ausführliche Name des Projekts
- url: URL zur Projektseite
- build: Maven erlaubt es durch Plugins den Build-Prozess zu erweitern oder zu erweitern, hier wird der Java-Compiler konfiguriert (Java 5 für Annotations).
- dependencies: gibt die Abhängigkeiten des Projekts zu anderen Projekten an. Hier wird beispielsweise JUnit in Version 4.8.2 eingebunden. Auf das Einbinden von Abhängigkeiten wird später noch eingegangen.
Unser eigentlicher Source-Code besteht nur aus einer Datei in src/main/java/b1/Math.java (keine Kommentare zum Sinn des Codes bitte):
package b1;
public class Math {
public static int square(int a) {
return a*a;
}
}
Unsere Testdateien sind ähnlich hochwertig (zu finden in: src/test/java/b1/MathTest.java):
package b1;
import org.junit.Assert;
import org.junit.Test;
import b1.Math;
public class MathTest {
@Test
public void testSqure() {
Assert.assertEquals(16, Math.square(4));
}
}
Wichtige Maven-Kommandos
mvn clean
clean löscht alle durch Maven erzeugten Dateien (inklusive des target-Verzeichnisses)
mvn compile
kompiliert den Quellcode unter src/main
mvn test
kompiliert die Test-Dateien und führt die Tests aus. Die Ergebnisse der Tests landen im Verzeichniss target/surefire-reports.
mvn package
erzeugt ein Paket im angegebenen Format (siehe pom.xml)
mvn install
erzeugt das Paket und installiert es im lokalen Repository. So kann es von anderen Projekten als Abhängigkeit verwendet werde.
Résumé
Natürlich kann man Maven nicht ausführlich auf einer solch kurzen Seite beschreiben und komplett erschöpfen, doch sollte dies ein kleiner Einstieg sein. Weitere Artikel zu Maven werden den Umgang mit Abhängigkeiten, ausführbaren Jar-Dateien und dem Einbinden von ANTLR in den Build-Prozess behandeln.
Update 5. Juni 2018
Die Quellen zu diesem Artikel findet man jetzt unter https://gitea.lusiardi.de/jlusiardi/MavenBasics1. 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 wurde junit
auf Version 4.13.2
aktualisiert. Der angepasste Quellcode
steht im alt bekannten Gitea bereit.