Einführung in das Build-Werkzeug Maven, Prof. Knabe, © 2009

Werbung
Einführung in das Build-Werkzeug Maven, Prof. Knabe, © 2009, 2012-04-27, Seite 1/3
Für die Erzeugung einer auslieferungsfähigen Version eines Softwaresystems benutzt man ein BuildWerkzeug. In der Java-Welt sind populär:
ANT als prozedurales Werkzeug: In welchen Schritten wird das Ziel zusammengebaut.
Maven als deskriptives Werkzeug: Aus welchen Teilen besteht das Ziel. Maven baut dieses dann in
einem standardisierten Verfahren.
Wir wenden hier Maven einführend zum Bau des Diagrammeditors an. Eine ausführlichere Einführung
findet sich in http://maven.apache.org/guides/MavenQuickReferenceCard.pdf
Zentrale Begriffe
pom.xml: Project Object Model: Die zentrale Datei zur Beschreibung des Aufbaus eines Projekts.
Ein Lifecycle besteht aus verschiedenen Phasen; der Default-Lifecycle aus unter anderem:
validate → compile → test → package → integration-test → verify → install → deploy
Eine Gruppe kann mehrere Artefakte publizieren. Diese werden identifiziert durch eine weltweit
eindeutige groupId und durch eine zusätzliche artifactId mit einer version.
Ein Plugin ist ein Artefakt, das Funktionalität für Maven bereitstellt. Ein Plugin kann mehrere Goals
anbieten. Ein Goal kann an eine Lifecycle-Phase gebunden werden.
Ein Repository stellt Plugins oder andere Artefakte bereit. Es gibt das zentrale Maven-Repository unter
http://repo1.maven.org/maven2/
Zunächst folgen wir der Anleitung
http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html
Installieren Sie ein aktuelles JDK. Die Umgebungsvariable JAVA_HOME muss auf das JDK, nicht auf
das JRE zeigen, damit auch der Java-Compiler von Maven aus aufgerufen werden kann!
Download und Installation von Maven ab Version 2 siehe:
http://maven.apache.org/download.html Dies bedeutet auch, die Umgebungsvariablen M2 und
M2_HOME zu setzen. Erweitern Sie die Umgebungsvariable PATH am Anfang um %M2%; um das mvnKommando einfach aufrufen zu können.
Maven 2 legt bei der ersten Benutzung ein lokales Repository im Home-Verzeichnis des Benutzers an.
Bei mir auf Ubuntu-Linux liegt dieses im Verzeichnis
/home/knabe/.m2/repository
Dieses kann schnell viele Megabyte erreichen. Im SWE-Labor ist das lokale Repository voreingestellt auf
Z:/m2-repo, damit es beim Login/Logout nicht mit dem restlichen Profile hin und herkopiert wird.
Im Repository werden die Dateien für eine Gruppe org.g1.g2 für das Artefakt a für die Versionsvariante m.n-v abgelegt
im Verzeichnis org/g1/g2/a/m.n-v/ Die Dateien heißen a-m.n-v.jar und a-m.n-v-sources.jar und so
weiter.
Ein leeres Maven-Projekt für den Diagrammeditor (de) erzeugen Sie über den Archetyp create:
mvn archetype:create -DgroupId=knabe -DartifactId=de -DarchetypeVersion=1.0
Dabei ist archetype ein Plugin, create ein davon bereitgestelltes Goal. Eine Option -Dname=wert
definiert (wie beim java-Kommando) eine System Property name mit dem Wert wert.
Dieses Kommando erzeugt ein Verzeichnis de/src/main/java/knabe mit einer Datei
App.java sowie ein paralleles Verzeichnis de/src/test/java/knabe mit einer
Testtreiberdatei AppTest.java. Ebenso eine Datei de/pom.xml.
Gehen Sie mittels cd de in das neue Projektverzeichnis hinein und rufen Sie mvn package auf.
Dies bewirkt die Ausführung aller Phasen des Default-Lifecycle bis einschließlich package. Maven
erzeugt ein Verzeichnis target, wo alle generierten Ergebnisse abgelegt werden. Dann werden u.a. die
Phasen compile, test und package durchgeführt. Ergebnis ist eine Datei target/de-1.0SNAPSHOT.jar. Sie können diese ausführen mittels
java -classpath target/de-1.0-SNAPSHOT.jar knabe.App
Es erscheint das übliche Hello World!
Einführung in das Build-Werkzeug Maven, Prof. Knabe, © 2009, 2012-04-27, Seite 2/3
Für den Diagrammeditor löschen Sie die Paketverzeichnisse knabe in src/main/java und
test/main/java sowie das Ausgabeverzeichnis target. Legen Sie sowohl in src/main/java
als auch src/test/java die Paketverzeichnisse diagr und figuren an und platzieren Sie die
bisherigen Java-Quelldateien in die entsprechenden Verzeichnisse. Dabei kommen Bestandteile des
Endprodukts unterhalb von main, die Testtreiber unterhalb von test.
Anpassung der vom Archetyp create generierten Datei pom.xml:
Statt <name>de</name> ausführlicher: <name>Diagrammeditor</name>
Statt <url>http://maven.apache.org</url> korrekter
<url>http://public.beuth-hochschule.de/~knabe/fach/pr2/aufgabe/</url>
Unterstützung von Java 6 aktivieren: Am Ende vor </project> einfügen:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>6</source>
<target>6</target>
</configuration>
</plugin>
</plugins>
</build>
Für die Benutzung des Ausnahmebehandlungs-Rahmenwerkes MulTEx:
1. Abhängigkeit davon eintragen hinter <dependencies>:
<dependency>
<groupId>de.tfh-berlin.knabe</groupId>
<artifactId>multex</artifactId>
<version>8.3</version>
</dependency>
2. Am Ende zwischen </build> und </project> das Knabe-Repository, von welchem MulTEx
bezogen wird, eintragen:
<repositories>
<repository>
<!-- Für MulTEx: -->
<id>tfh-knabe-repository</id>
<name>BHT Knabe Maven 2 repository</name>
<url>http://public.beuth-hochschule.de/~knabe/mvn-repo/</url>
</repository>
</repositories>
Für die Verwendung eines aktuellen JUnit 4:
Im Element <version> in der <dependency> für junit die Angabe 3.8.1 ersetzen durch 4.4
Verpacken in eine ausführbare .jar-Datei
Um die generierten .class-Dateien und die benötigten .jar-Dateien handlich in eine ausführbare
.jar-Datei zu verpacken, benötigen wir das OneJar-Maven-Plugin.
Dieses fordern wir innerhalb von <build> <plugins> wie folgt an. Dabei muss unter
<mainClass> der vollständige Name der Startklasse diagr.Editor angegeben sein.:
Einführung in das Build-Werkzeug Maven, Prof. Knabe, © 2009, 2012-04-27, Seite 3/3
<plugin>
<groupId>org.dstovall</groupId>
<artifactId>onejar-maven-plugin</artifactId>
<version>1.4.1</version>
<executions>
<execution>
<configuration>
<mainClass>diagr.Editor</mainClass>
</configuration>
<goals>
<goal>one-jar</goal>
</goals>
</execution>
</executions>
</plugin>
Dieses Plugin lagert ebenfalls nicht im Maven Central Repository. Daher vor </project> einfügen:
<pluginRepositories>
<pluginRepository>
<id>onejar-maven-plugin.googlecode.com</id>
<url>http://onejar-maven-plugin.googlecode.com/svn/mavenrepo</url>
</pluginRepository>
</pluginRepositories>
Import in die Entwicklungsumgebung
Die IDEs NetBeans und IDEA kommen mit eingebauter Maven-Unterstützung. In Eclipse 3.7 muss man
das Plugin «Maven Integration» (m2e) von http://www.eclipse.org/m2e/ installieren. Dann
File > Import > Maven > Existing Maven Projects > Root Directory.
Dort das Verzeichnis, welches die Datei pom.xml enthält auswählen und fertigstellen.
Unter Window > Preferences > Maven angeben: "Download Artifact" für Sources und Javadoc.
Mann kann jetzt im Quellcode in die benutzten Bibliotheken MulTEx und JUnit navigieren!
Man kann sogar in die «Java Stack Trace Console» Stack Traces einfügen und dann in jede dort
angegebene Quelltextzeile springen.
Ein Maven-Projekt kann problemlos in die gängigen IDEs importiert werden.
Build ausführen
Jetzt aufrufen: mvn package
Dadurch werden die Klassen kompiliert, getestet und in eine
Datei target/de-1.0-SNAPSHOT.jar verpackt. Diese wird zusammen mit den benötigten .jarDateien in target/de-1.0-SNAPSHOT.one-jar.jar verpackt. Diese kann man einfach starten mittels
java -jar target/de-1.0-SNAPSHOT.one-jar.jar oder indem man sie im Explorer mit „Java
Platform SE binary“ öffnet.
Die vollständige Datei pom.xml, die für Kompilation, Test und Zusammenbau des Diagrammeditors
taugt, ist im Aufgabenverzeichnis abgelegt:
http://public.beuth-hochschule.de/~knabe/fach/pr2/aufgabe/aufg05aufbau/
[/home/knabe/beuth-knabe/Java/pr2/08w_DiagrammEditor/MavenEinfuehrung.odt]
Herunterladen