Komponenten-basierte Entwicklung Teil 3: Einführung in...

of 46 /46
Komponenten – WS 2014/15 – Teil 3/Maven 20.10.14 1 Komponenten-basierte Entwicklung Teil 3: Einführung in Maven

Embed Size (px)

Transcript of Komponenten-basierte Entwicklung Teil 3: Einführung in...

  • Komponenten WS 2014/15 Teil 3/Maven 20.10.14 1

    Komponenten-basierte Entwicklung

    Teil 3: Einfhrung in Maven

  • Komponenten WS 2014/15 Teil 3/Maven 2

    Literatur und Web

    [3-1] Maven by Examplehttp://www.sonatype.com/resources/books/maven-by-example/download

    Oder die Vorversion: http://www.filibeto.org/~aduritz/truetrue/mvn/maven-by-example-0.7.pdf

    [3-2] Maven the complete Referencehttp://www.sonatype.com/resources/books/maven-the-complete-reference/download

    [3-3] Better Builds with Mavenhttp://www.i-proving.ca/download/Technologies/Maven/Maven+Resources/BetterBuildsWithMaven-1.0.2.pdf

    [3-4] Maven 3.0http://www.torsten-horn.de/techdocs/maven.htm

    [3-5] Behrendt, Mario: Jenkins. Kurz&Gut, O'Reilly, 20111

  • Komponenten WS 2014/15 Teil 3/Maven 3

    Maven Ein Projekt-Management-Werkzeug

    Maven (Sammler des Wissens) In Maven werden die Prozesse zum Generieren von Applikationen

    definiert; dies erfolgt deklarativ.

    Web: http://de.wikipedia.org/wiki/Apache_Maven

    http://maven.apache.org/

    http://mvnrepository.com/ (Repository)

    Aktuelle Version: 3.2.3 Download:

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

    Fr (sehr) viele Anwendungen gibt es Plugins, die die eigentliche Aufgabe realisieren.

  • Komponenten WS 2014/15 Teil 3/Maven 4

    Maven Funktionen I

    Steuerung folgender Prozesse: bersetzen

    Testen

    Zusammensetzen (Build)

    Maven ist unabhngig von der Programmiersprache. Neben der Herstellung einer lauffhigen Version der betreffenden

    Software werden noch Dokumentationen, z.B. javadoc, erzeugt.

    Die Arbeit erfolgt unmittelbar durch Aufruf von mvn ber die Shell-SchnittstelleEs gibt Plugins fr Eclipse und netbeans.

    http://wiki.netbeans.org/Maven

    http://maven.apache.org/eclipse-plugin.html

    Wer ber einen Server dies im Hintergrund ablaufen lassen mchte, was fr groe Projekte geboten ist, der benutze Jenkins.http://jenkins-ci.org/

  • Komponenten WS 2014/15 Teil 3/Maven 5

    Maven Funktionen II

    Beachtung und Verwaltung der Abhngigkeiten(Dependency Management)

    Globales Repository fr Plugins

    Diese werden auch Mojos genanntMojo = Maven (plain) old Java Object

    Notwendige Software-Komponenten in den entsprechenden Versionen, z.B. mockito oder hamcrest

    Aufgrund der Implementierung in Java sind alle Spezifikationen der Software in Maven portabel.

  • Komponenten WS 2014/15 Teil 3/Maven 6

    Installation I - Windows

    Herunterladen der neuesten Version, z.B. 3.2.3 Auspacken und den Ordner an die Stelle bewegen, wo er

    installiert sein soll, z.B. D:\Java\apache-maven-3.2.3".

    Durchsuchpfad fr Kommandos auf den bin-Ordner setzen:am besten global:Systemsteuerung>System>Erweiterte Systemeinstellungen>Umgebungsvariablen>Systemvariablen

  • Komponenten WS 2014/15 Teil 3/Maven 7

    Installation II - Windows

    Die Variablen JAVA_HOME und M2_HOME anlegen: JAVA_HOME anlegen und auf JDK-Ordner setzen

    M2_HOME anlegen und auf Maven-Ordner setzen

    z.B. JAVA_HOME auf C:\Program Files\Java\jdk1.8.0_20

    M2_HOME auf D:\Java\apache-maven-3.2.3

    PATH mit ";%JAVA_HOME%\bin;%M2_HOME%\bin" erweitern Das Ganze wird mit einem neu gestarteten(!) MSDOS-Eingabe-

    Fenster mit dem Kommando set geprft. Im MSDOS-Fenster set eingeben und sehen ob der Pfad gesetzt ist.

  • Komponenten WS 2014/15 Teil 3/Maven 8

    Installation III - Windows

    Prfung von PATH:

    Letzter Test mit mvn -v":

  • Komponenten WS 2014/15 Teil 3/Maven 9

    Installation IV - Linux

    Die Installation auf Linux verluft analog, nur dass der Mechanismus des Setzens der PATH-Variablen anders ist.

    Z.B. fr den bash in .bashrc oder .profile: export JAVA_HOME=...

    export M2_HOME=...

    export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin

    Infos fr beide Betriebssysteme:http://maven.apache.org/download.cgi#Installation

  • Komponenten WS 2014/15 Teil 3/Maven 10

    Archetypes Projekt-Templates

    Es sind Projekt-Templates fr typische Projektarten definiert Diese Templates installieren Basisversionen, die dann weiter

    entwickelt werden

    Es gibt sehr viele archetypes, z.B. fr Web-Anwendungen, Scala-Projekte etc.

    Jedes Projekt kann eigene Templates entwerfen und der Welt zur Verfgung stellen

    Zur Erzeugung wird das Plugin archetype benutzt:mvn archetype:generate

  • Komponenten WS 2014/15 Teil 3/Maven 11

    Hallo world! in Maven I

    In den richtigen Ordner zur Installation gehen. Nach der obigen Eingabe in einer Zeile werden viele Module

    herunter geladen.

    Aus der Liste mit einem fehlerhaften(!) Filter-Parameter wird das Archetyp "maven-archetype-quickstart" ausgewhlt das wird dann als einziges angeboten, wenn das Filtern scheitert (was ja erwnscht ist). Es wird interaktiv 1 eingegeben (Nummern der Archetypen). Es gibt sehr viele Archetypen.

    Ein Bindestrich in der DNS-Adresse muss durch ein _ ersetzt werden.

    mvn archetype:generate -DgroupId=de.htw_berlin.f4.kbe.hallo -DartifactId=hello -Dpackage=de.htw_berlin.f4.kbe -Dversion=1.0-SNAPSHOT -Dfilter=maven-archetype-quickstart

  • Komponenten WS 2014/15 Teil 3/Maven 12

    Erluterungen

    -D leitet einen Parameter ein, der ein Attribut festlegt. Alle in diesem Beispiel aufgefhrten Parameter knnen weggelassen werden; die entsprechenden Werte werden dann interaktiv abgefragt.

    -Dfilter=... definiert einen Parameter, der alle im Repository vorhandenen archtetypen dies sind so ca. 1200 filtert. Nur die gefilterten werden zur Auswahl angeboten.

    Wenn kein Archetyp gefunden wird, wird immer der Archetyp "maven-archetype-quickstart" angeboten was hier gewollt wurde.

    Alle Archetypen haben eine mit der Zeit sich ndernde Nummer, so dass immer interaktiv gearbeitet werden muss.

  • Komponenten WS 2014/15 Teil 3/Maven 13

    Hallo world! in Maven II

    Eingabe 1

    Eingabe 2

    Eingabe 3

  • Komponenten WS 2014/15 Teil 3/Maven 14

    Hallo world! in Maven III

    Und nun der Schluss

  • Komponenten WS 2014/15 Teil 3/Maven 15

    Hallo world! in Maven IV

    Initial aufgebauteOrdnerstruktur

  • Komponenten WS 2014/15 Teil 3/Maven 16

    Hallo world! in Maven V

    package de.htw_berlin.f4.kbe;

    /** * Hello world! * */public class App { public static void main( String[] args ) { System.out.println( "Hello World!" ); }}

    Ordnerinhalt von kbe

  • Komponenten WS 2014/15 Teil 3/Maven 17

    Hallo world! in Maven VI

    Ordnerinhalt von hello

    (01)

    (05) 4.0.0

    Inhalt von pom.xml Erster Teil

  • Komponenten WS 2014/15 Teil 3/Maven 18

    Hallo world! in Maven VII pom.xml

    (06) de.htw_berlin.f4.kbe.hallo(07) hello(08) 1.0-SNAPSHOT(09) jar

    (10) hello(11) http://maven.apache.org

    (12) (13) UTF-8(14)

    (15) (16) (17) junit(18) junit(19) 3.8.1(20) test(21) (22) (23)

    Koordinaten

    Abhngigkeiten

  • Komponenten WS 2014/15 Teil 3/Maven 19

    Erluterungen I

    Zeilen 1-4: Angabe der Grammatik sowie der Namensrume Zeile 5: Version der POM Zeilen 6-9: Identifizierung des Projektes Zeilen 12-13: Angabe der Projekteigenschaften, ohne die

    Kodierung nach UTF-8 kommen Fehlermeldungen, siehe dazu:http://maven.apache.org/general.html

    Zeilen 15-22: Liste der Abhngigkeiten zu anderen Plugins, hier JUnit

  • Komponenten WS 2014/15 Teil 3/Maven 20

    Erluterungen II - Koordinaten

    Koordinaten = Zusammensetzung von Informationen ber das Projekt zur eindeutigen Identifizierung

    Die Koordinaten bestehen aus groupId

    Identifier als Name einer Gruppe/Zusammenfassung mehrerer Artefakte, in der Regel Klassenkomplexe oder Programmeblich ist ein Name hnlich dem Paketnamen in Java

    artifactIdIdentifier als Name des Artifakts, meist eines Programms. Der Dateiname wird meist nach folgendem Schema aufgebaut:-.

    versiongibt die Version nach folgendem Schema an: ..--Fr unfertige Versionen ist der Qualifier SNAPSHOT

    PackagingTyp des Pakets, z.B. jar, ear, war oder pom

  • Komponenten WS 2014/15 Teil 3/Maven 21

    Erluterungen III - Abhngigkeiten

    (16) (17) junit(18) junit(19) 3.8.1(20) test(21)

    Wenn eine Abhngigkeit definiert ist und das entsprechende Zielerreicht werden soll, werden alle fehlende Bibliotheken, POM-Dateienetc. aus den Repository herunter geladen und lokal abgespeichert.Dies dauert beim ersten Mal etwas, danach geht es sehr schnell.

  • Komponenten WS 2014/15 Teil 3/Maven 22

    Hallo world! in Maven VIII

    Es wurde noch im Ordner HOMEDIR/.m2 ein Repository angelegt. Dort sind auch alle zum Start herunter geladenen Dateien

    vorhanden, so dass ein erneutes Laden entfllt.

  • Komponenten WS 2014/15 Teil 3/Maven 23

    Typische Verzeichnisstruktur (Auszug)

    project home = {baseDir}

    Wurzel mit der POM-Datei

    {baseDir}/src/main/java Quellen der Java-Software entsprechend dem Paketnamen in Unterordner verteilt

    {baseDir}/src/main/resources Property-Dateien etc.

    {baseDir}/src/test/java Klassen zum Testen, z.B. Junit-Klassen

    {baseDir}/src/test/resources Property-Dateien und weitere Dateien, die fr das Testen notwendig sind

  • Komponenten WS 2014/15 Teil 3/Maven 24

    Convention over Configuration I

    Maven basiert auf einem allgemeinen fr fast alle Anwendungsflle geeigneten Modell ber den Prozess der Erstellung von Software.

    Bei jedem Teil dieses Modells wurden die Default-Einstellungen so gewhlt, dass keine bis kaum Anpassungen notwendig sind.Das steckt hinter dem Motto Convention over Configuration.

    Die Konfiguration erfolgt durch eine XML-Datei, die an der Wurzel der zu behandelnden Software liegt.

    Diese XML-Datei heit pom.xml.POM = Project Object Modell

  • Komponenten WS 2014/15 Teil 3/Maven 25

    Convention over Configuration II

    Es gibt eine Super-POM-Datei, von der alles geerbt wird. Diese steht auf:

    http://maven.apache.org/guides/introduction/introduction-to-the-pom.html

    %M2_HOME%\lib\maven-model-builder-3.2.3\org\apache\maven\model\pom-4.0.0.xml

    Durch diesen Mechanismus wird viel an der Konfiguration gespart.

    Super-POM

    POM

    Vererbung

    Abhngigkeiten Plugins Entwickler-Informationen

    Vererbt werden...

  • Komponenten WS 2014/15 Teil 3/Maven 26

    Convention over Configuration III

    Es knnen zwischen Projekten beliebige Vererbungshierarchien aufgebaut werden, im einfachsten Fall wie hier 1-stufig.

    Mit mvn help:effective-pom wird angezeigt, welche Werte nach Abarbeitung der Vererbung gelten.

  • Komponenten WS 2014/15 Teil 3/Maven 27

    Lebenszyklen I

    Default dient der eigentlichen Entwicklungvalidate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, preintegration-test, integration-test, post-integration-test, verify, install, deploy

    Clean dient zum Aufrumen der generierten Dateienpre-clean, clean, post-clean

    Site dient zur Generierung der Dokumentationpre-site, site, post-site, site-deploy

  • Komponenten WS 2014/15 Teil 3/Maven 28

    Lebenszyklen II Default (Auszug)

    validate Prfung auf gltige und vollstndige Projektstruktur compile bersetzen test Durchfhren der Tests package Erstellen der erzeugten Pakete verify Prfung der Pakete install Installieren im lokalen Repository deploy - Installieren im globalen Repository

    Die einzelnen Phasen innerhalb des Zyklus haben eine bestimmteReihenfolge, die immer bis zum angegebenen Ziel durchlaufenwird. Oben wurden die am meisten verwendeten Ziele aufgefhrt.

  • Komponenten WS 2014/15 Teil 3/Maven 29

    Lebenszyklen III Default (Auszug)

    validate

    compile

    test-compile

    install

    deploy

    verify

    package

    test

    test

    pack

    age

    ins t

    al l

    Wird als Parametereine Phase angegeben,so wird immer bis einschlielichder angegebenen Phaseder Lebenszyklus durchlaufen

  • Komponenten WS 2014/15 Teil 3/Maven 30

    mvn compile I

  • Komponenten WS 2014/15 Teil 3/Maven 31

    mvn compile II

    Nun ist ein weitererOrdner angelegt: target

  • Komponenten WS 2014/15 Teil 3/Maven 32

    mvn package I

  • Komponenten WS 2014/15 Teil 3/Maven 33

    mvn package II

    Auf das Testen wird noch spter eingegangen.

  • Komponenten WS 2014/15 Teil 3/Maven 34

    mvn package III

  • Komponenten WS 2014/15 Teil 3/Maven 35

    mvn package IV - Ausfhren

    java -cp hello-1.0-SNAPSHOT.jar de.htw_berlin.f4.kbe.Apppause

    Wenn die Manifest-Datei gendert wird, wird der Aufruf einfacher.So ist es am besten, ein bat-File zum Starten zu schreiben.

  • Komponenten WS 2014/15 Teil 3/Maven 36

    Aufrufe I

    mvn -h Hilfe zu dem Kommando

    mvn help:help Hilfe zur Entwicklungsumgebung

    mvn help:effective-settings Anzeige der fr den Lauf gesetzten Parameter

    mvn help:effective-pom Anzeige der fr den Lauf gesetzten POM-Information

    mvn dependency:tree -Dverbose Abhngigkeitsbaum generieren

    mvn compile Nur bersetzen

    mvn test Alles bis zum Test durchfhren

    mvn package Jar-File generieren

    mvn install In lokales Repository kopieren

    mvn site Dokumentation generieren

    mvn clean Alles Generierte wegwerfen

    mvn [options] [phase] | [plugin[:goal]]

  • Komponenten WS 2014/15 Teil 3/Maven 37

    Aufrufe II

    Es knnen Phasen als Parameter angeben werden, z.B. compile. Hinter einer Phase kann noch ein Ziel mit einem Doppelpunkt

    getrennt angegeben werden.Z.B. mvn compile Alles bis einschlielich Phase compile

    mvn compiler:compile genauso, aber compiler ist der Name eines Plugins und compile das Ziel fr dieses Plugin.

    mvn compiler:testCompile Es wird nur die Testsoftware bersetzt

  • Komponenten WS 2014/15 Teil 3/Maven 38

    Jetzt erzeugen wir ein ausfhrbares jar-File I

    org.apache.maven.plugins maven-jar-plugin 2.4 de.htw_berlin.f4.kbe.App true

    Dies wird in das POM-File eingefgt.

  • Komponenten WS 2014/15 Teil 3/Maven 39

    Erluterungen

    bedeutet, dass der eingeschlossene Text sich auf die Build-Phase bezieht.

    leitet eine Liste der Plugins ein hier fr den Build-Prozess ist der Abschnitt mit Parametern fr ein spezielles

    Plugin. Welche Parameter was bedeuten, muss der Plugin-Dokumentation entnommen werden.

    Siehe: http://mvnrepository.com/artifact/org.apache.maven.plugins/maven-

    jar-plugin

    http://maven.apache.org/plugins/maven-jar-plugin/plugin-info.html

    Zum jar-Problem: http://openbook.galileocomputing.de/javainsel/javainsel_19_004.html

    http://www.java-forum.org/java-basics-anfaenger-themen/132539-jar-datei-ausfuehren.html

    http://de.wikihow.com/Eine-.Jar-Java-Datei-ausfhren

  • Komponenten WS 2014/15 Teil 3/Maven 40

    Jetzt erzeugen wir ein ausfhrbares jar-File II

    mvn clean

    mvn package

  • Komponenten WS 2014/15 Teil 3/Maven 41

    Jetzt erzeugen wir ein ausfhrbares jar-File III

    java -jar hello-1.0-SNAPSHOT.jarpause

  • Komponenten WS 2014/15 Teil 3/Maven 42

    Nun soll es sofort ausgefhrt werden I

    ... org.codehaus.mojo exec-maven-plugin 1.2.1 de.htw_berlin.f4.kbe.App Dies wird in das POM-File eingefgt.

    Der Name der Startklasse muss entweder hier angegeben werdenoder als Parameter fr Maven.

  • Komponenten WS 2014/15 Teil 3/Maven 43

    Nun soll es sofort ausgefhrt werden II

    mvn exec:java

    Dies bedeutet, dass das exec-Plugin in derselben Java-Maschine wie mavenausgefhrt werden soll.

  • Komponenten WS 2014/15 Teil 3/Maven 44

    Nun soll es sofort ausgefhrt werden III

    Dokumentation zum Plugin:http://mojo.codehaus.org/exec-maven-plugin/

    Starten ohne Startklasse im POM:mvn exec:java Dexec.mainClass=de.htw_berlin.f4.kbe.App

    Es gibt zwei Quellen fr Plugins: Maven-Projekt

    http://maven.apache.org/plugins/index.html

    Mojo-Codehaus:http://mojo.codehaus.org/plugins.html

    Diesen Quellen sind die Koordinaten sowie die Parameter der Plugins zu entnehmen.

  • Komponenten WS 2014/15 Teil 3/Maven 45

    Die Sache mit den Tests

    package de.htw_berlin.f4.kbe;import junit.framework.*;

    public class AppTest extends TestCase { public AppTest( String testName ) { super( testName ); } public static Test suite() { return new TestSuite( AppTest.class ); } public void testApp() { assertTrue( true ); }}

    Dies ist ein nicht ganz ernst gemeinter Test mit JUnit 3.8.*Die Tests mit der Version 4 sehen etwas anders aus.Wenn diese benutzt werden muss im -Teil die andereVersion benutzt werden.

  • Komponenten WS 2014/15 Teil 3/Maven 46

    Nach dieser Anstrengung etwas Entspannung...