Komponenten-basierte Entwicklung Teil 3: Einführung in...
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...