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]