Apache Maven - klaus- ?· Apache Maven Klaus-Christian Saalfeld 1. Einf uhrung in Maven Maven (deutsch:…

  • View
    213

  • Download
    0

Embed Size (px)

Transcript

  • Praktikum Softwarearchitektur

    Apache Maven

    Klaus-Christian Saalfeld

    18. Juni 2011

    FernUniversitat in Hagen

  • Apache Maven Klaus-Christian Saalfeld

    Inhaltsverzeichnis

    1. Einfuhrung in Maven 1

    2. Grundlagen 12.1. Erste Schritte mit Maven . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.2. Struktur und Beschreibung eines Projektes . . . . . . . . . . . . . . . . . . 22.3. Build Lifecycles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.4. Repositories und Dependency Management . . . . . . . . . . . . . . . . . . 52.5. Plugins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

    3. Exemplarische Anwendung 73.1. Ein ANT Projekt als Fallbeispiel . . . . . . . . . . . . . . . . . . . . . . . . 73.2. Vergleich zwischen ANT und Maven . . . . . . . . . . . . . . . . . . . . . 73.3. Portierung des ANT Projektes . . . . . . . . . . . . . . . . . . . . . . . . . 9

    3.3.1. Erzeugung eines neuen Maven Projektes . . . . . . . . . . . . . . . 93.3.2. Hinzufugen der Java Quellen . . . . . . . . . . . . . . . . . . . . . 103.3.3. Portierung der Unit-Tests . . . . . . . . . . . . . . . . . . . . . . . 103.3.4. Hinzufugen der C Quellen . . . . . . . . . . . . . . . . . . . . . . . 123.3.5. Erzeugung eines .jar Archivs . . . . . . . . . . . . . . . . . . . . . . 15

    4. Architektur 154.1. Plugin-Architektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

    4.1.1. Maven als Plugin-Framework . . . . . . . . . . . . . . . . . . . . . 154.1.2. Entwicklung eines Plugins . . . . . . . . . . . . . . . . . . . . . . . 164.1.3. Integration in den Maven Build . . . . . . . . . . . . . . . . . . . . 18

    4.2. Dependency Injection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214.3. Plexus als Dependency Injection Framework . . . . . . . . . . . . . . . . . . 23

    5. Zusammenfassung und Ausblick 255.1. Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255.2. Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

    A. Anhang 27A.1. build.xml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27A.2. Makefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27A.3. JniCompilerPluginMojo.java . . . . . . . . . . . . . . . . . . . . . . . . . . 28A.4. pom.xml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

    Literaturverzeichnis 36

    i

  • Apache Maven Klaus-Christian Saalfeld

    1. Einfuhrung in Maven

    Maven (deutsch: Experte) ist ein Build Management System fur Java Projekte. Es kombi-niert Funktionalitat zum Programmbau mit zusatzlichen Aspekten zum Management vonAbhangigkeiten. Maven wird von der Apache Software Foundation als Open Source Softwareentwickelt und unter der Apache Software License lizensiert.

    2. Grundlagen

    2.1. Erste Schritte mit Maven

    Maven kann von der Webseite der Apache Software Foundation heruntergeladen werden. Diejeweils aktuelle Version findet sich auf:

    http://maven.apache.org/download.html

    Fur alle Beispiele in dieser Ausarbeitung wird Version 3.0.3 benutzt. Fur die Nutzung vonMaven ist die Binar-Distribution (apache-maven-3.0.3-bin.zip) ausreichend.

    Zur Installation von Maven wird das heruntergeladene Archiv in ein beliebiges Verzeichnisentpackt. Damit Maven auf der Shell verfugbar ist, muss anschlieend das Unterverzeichnisbin zum Suchpfad des Systems hinzugefugt werden. Dazu ist die Umgebungsvariable PATHentsprechend zu modifizieren.

    Da Maven selbst auf Java basiert muss ein Java SDK installiert sein. Ein reines Java Runtime(JRE) ist nicht ausreichend. Fur die Beispiele in dieser Ausarbeitung wird das Java SDKVersion 6 Update 25 verwendet. Dieses kann von der Webseite von Oracle bezogen werden:

    http://www.oracle.com/technetwork/java/javase/downloads

    Fur gangige Betriebssysteme werden Installer angeboten. Die Installation kann in ein belie-biges Verzeichnis erfolgen. Nach der Installation muss jedoch ggf. die UmgebungsvariableJAVA_HOME angepat werden. Diese muss auf das Verzeichnis der Java SDK Installation zei-gen.

    Die korrekte Installation von Maven kann auf der Shell mit folgender Eingabe gepruft werden:

    mvn --help

    Bei einer erfolgreichen Installation fuhrt dies zu der (gekurzten) Ausgabe:

    usage: mvn [options] [] []

    Options:

    -am,--also-make If project list is specified, also

    build projects required by the

    list

    ...

    1

    http://maven.apache.org/download.htmlhttp://www.oracle.com/technetwork/java/javase/downloads

  • Apache Maven Klaus-Christian Saalfeld

    Uber das Kommando mvn konnen Maven Projekte gebaut und verwaltet werden. Alle, fur diepraktische Nutzung von Maven notwendigen, Operationen lassen sich daruber ausfuhren.

    Eine typische Operation ware beispielsweise das Compilieren aller .java Quellen eines Pro-jektes und das anschlieende Packen in einem .jar Archiv. Mit Maven wird das, fur einProjekt im aktuellen Verzeichnis, wie folgt erreicht:

    mvn package

    Maven benotigt Zugang zum Internet. Sofern ein Proxy verwendet wird, ist es notwendig dieKonfiguration von Maven entsprechend anzupassen. Dies geschieht uber einen Eintrag in derDatei settings.xml:

    true

    http

    proxy.company.de

    8080

    myusername

    mypassword

    Diese befindet sich im Verzeichnis:

    ~/.m2/

    Vergleiche [Tim OBrien et al., 2010, A.2.4, Proxies, Seite 248].

    2.2. Struktur und Beschreibung eines Projektes

    Vergleiche [Vincent Massol et al., 2008, Seite 28], [Tim OBrien et al., 2008, Kapitel 3.4,Seite 34f] und [Tim OBrien et al., 2010, Kapitel 3, The Project Object Model, Seite 17ff].

    Ein Maven Projekt wird uber das Project Object Model (kurz: POM) beschrieben. Die Be-schreibung erfolgt fur jedes Projekt im XML Format in der Datei pom.xml. Diese kann alsAnalogie zu build.xml (ANT) oder zum Makefile (Make) verstanden werden. Als Unter-schied enthalt sie aber, wie in Kapitel 3.2 noch beschrieben wird, keine Beschreibung derBuild-Schritte, sondern eine rein deklarative Beschreibung des Projektes.

    Ein minimales Beispiel1 einer pom.xml Datei kann wie folgt aussehen:

    1Vergleiche [Tim OBrien et al., 2010, Kapitel 3.2.2, The Simplest POM, Seite 22]

    2

  • Apache Maven Klaus-Christian Saalfeld

    4.0.0

    com.company.project

    SampleJavaProject

    1.0

    Als erste Information enthalt sie die Coordinate des Projektes in Form der Tags groupId,artifactId und version. Die Coordinate dient als eindeutiger Bezeichner fur das Projekt2.Projekte mussen in Maven eindeutig identifizierbar sein, damit das Dependency Managementund die Verwaltung der Maven Repositories funktioniert (siehe Kapitel 2.4).

    Die zweite Information in der gezeigten pom.xml Datei ist die Object Model Version, diedurch den Tag modelVersion gegeben ist [Vincent Massol et al., 2008, Seite 29]. Diesewahlt indirekt die Super POM des Projektes. In Maven gibt es fur POMs das Prinzip derVererbung. Jedes POM erbt implizit die Informationen aus dieser Super POM. Dies funk-tioniert analog zur Vererbung in der objektorientierten Programmierung (OOP). Wahrendjedoch in der OOP Felder und Methoden vererbt werden, werden in Maven POM Informa-tionen in Gestalt von XML Daten weitervererbt.

    Durch die Vererbung wird das Konzept Convention Over Configuration von Maven unter-stutzt. Dieses wird in [Vincent Massol et al., 2008, Kapitel 1.2.1] beschrieben. Fur Mavenbedeutet es, dass fur alle Einstellungen sinnvolle Standardwerte vorgegeben sind, die erst beiNotwendigkeit geandert werden mussen. Solche Einstellungen werden zum Teil durch Verer-bung aus der Super POM, in die POM des jeweiligen Projektes, implizit ubertragen. Nebendieser impliziten Vererbung aus der Super POM, konnen auch eigene POMs erstellt werden,von denen explizit geerbt werden kann. Ein Beispiel dazu findet sich in [Vincent Massol etal., 2008, Kapitel 3.3].

    Das gezeigte Beispiel kann, obwohl es nur das Notigste enthalt, bereits genutzt werden, um einJava Projekt mit Maven zu bauen. Dem Prinzip Convention Over Configuration folgend, istdie Struktur des Projektes dabei durch die Super POM vorgegeben. Die Java Quellen mussen,fur einen erfolgreichen Bau, in das Unterverzeichnis src/main/java3 kopiert werden. Furgewohnlich ist es nicht notwendig und sinnvoll von dieser Vorgabe abzuweichen. Wie folgendesBeispiel zeigt, konnte es bei Bedarf aber getan werden:

    4.0.0

    com.company.project

    SampleJavaProject

    1.0

    2Der Sinn des Wortes Coordinate kann, wie in [Tim OBrien et al., 2008, Seite 45] dargestellt, verstandenwerden: Analog zu einem Punkt in einem Koordinatensystem, kann jedes Projekt im Maven Space durcheine Coordinate eindeutig identifiziert werden.

    3Die aus dem Package resultierenden Verzeichnisstrukturen mussen hinzugefugt werden.

    3

  • Apache Maven Klaus-Christian Saalfeld

    source/java

    Das Beispiel uberschreibt die Vorgaben aus der Super POM und legt source/java als neuesVerzeichnis fur Java Quellen fest. Das uberschriebene Element ware andernfalls durch dieSuper POM wie folgt definiert worden:

    src/main/java

    2.3. Build Lifecycles

    Vergleiche [Tim OBrien et al., 2010, Kapitel 4, Seite 47ff], [Vincent Massol et al., 2008,Seite 30] und [Tim OBrien et al., 2008, Kapitel 3.5.2, Seite 38ff].

    Ein wichtiges Konzept in Maven entspringt der Beobachtung, dass der Bau eines Projektes inimmer gleichen Schritten mit einer wohldefinierten Reihenfolge erfolgt: Es mussen beispiels-weise erst alle Quellen compiliert werden, bevor diese mit einem Unit-Test getestet werdenkonnen. Erst nachdem der Unit-Test erfolgreich war, kann das Projekt veroffentlicht oderanderen Nutzern zur Verfugung gestellt werden.