[3-1] Maven by Example

Ähnliche Dokumente
Komponenten-basierte Entwicklung Teil 3: Einführung in Maven

Programmieren II. Exkurs: Apache Maven. Institut für Angewandte Informatik. KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft

Programmieren in Java

Der Weisheit letzter Schluss:

Einführung in Maven und GWT

Buildsystem. Maven & Scons. Controls Entwicklungsforum Januar 2012

Automatischer Build mit Maven 2

1 Welches Problem löst Maven?

Seminar - Bericht. Maven Project Management & Comprehension. Fachhochschargau Departement Technik Studiengang Informatik. Gruppe Jonas Weibel

Maven 2 Softwareprojekte mit Kultur

Literatur und Links. Webtechnologien SS 2017 Teil 1/Entwicklung

Softwareprojekte mit Kultur

Verteilte Systeme (WS 2013/14) Übung 0: Einführung in Maven und Git. Oliver Kleine Institut für Telematik, Universität zu Lübeck

Das Build Tool Ant. Sebastian Mancke,

Build Management. Präsentation von Daniel Mies

Webtechnologien Teil 1: Entwicklungsumgebung(en)

Maven 2.0. DRV Jahrestagung Java Würzburg Rainer Vehns, codecentric GmbH codecentric GmbH

Installationsanleitung

Praktikum 1: Einführung, BMI Rechner

Die Scala Entwicklungsumgebung. L. Piepmeyer: Funktionale Programmierung - Die Scala Entwicklungsumgebung

Martin. Spiller. Maven 3. Konfigurationsmanagement mit Java

Buildwerkzeuge für Javaprojekte. Christian Bunse Institut für Informatik

Buildmanagement. Konstantin Domoratskyy

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

ANT. Kurzvortrag von Manuel Schulze.

Version 0.3. Installation von MinGW und Eclipse CDT

Software-Engineering Grundlagen des Software-Engineering

SEW Übung EMFText. 1 Aufgabe. 2 Domänenbeschreibung. 3 Installation von Eclipse/EMFText. 4 Schritt-für-Schritt Anleitung. 4.

Einführung in das Programmieren

Software-Engineering 2: Automatische Build-Werkzeuge

Vom lokalen Build zum Deployment

Eclipse Tutorial.doc

Vorlesung Informatik II

Kurzanleitung Eclipse

Referent: Thomas Storch (FI für Anwendungsentwicklung, 1. Lj.) Vortrag: Apache Maven. Datum: Deutsche Software Engineering & Research GmbH

Eclipse und Java Einheit 06: Building Eclipse Projete mit Ant

Praktikum Softwarearchitektur. Apache Maven. Klaus-Christian Saalfeld. 18. Juni FernUniversität in Hagen

1.3.1 Java-Compiler installieren

Eclipse 3.0 (Windows)

AKTUEL ZU JAVA 8 PROGRAMMIEREN IN JAVA. 7. Auflage. Im Internet: Alle Beispielprogramme und Lösungen

Kurzanleitung zu XML2DB

1 Vorraussetzungen. 2 Installiere Eclipse. FS 2015 Herausgabe: Dr. A. L. Schüpbach, D. Sidler, Z. István Departement Informatik, ETH Zurich

Java Kurs für Anfänger LMU SS09 Einheit 1 Javaumgebung

Einführung in die Programmierung 1

Installation von Java-JDK, BlueJ und SuM Eine Schritt-für-Schritt-Anleitung

Anleitung zur Webservice Entwicklung unter Eclipse

Persönliche Build-Höllen für Jedermann Andreas Hartmann & Dr. Halil-Cem Gürsoy

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

JUnit. Software-Tests

Hochschule Niederrhein Grundlagen der Prof. Dr. Nitsche Fachbereich 03 Java Programmierung Bachelor Informatik SS 2015 Übung 1. Grundlagen von Java

Build-Prozesse für Geschäftsanwendungen mit Apache Maven

Continuous Integration mit TravisCI u.a. Jan Steemann

Programmieren I. Dokumentation mit Javadoc Heusch 10.4 Ratz Institut für Angewandte Informatik

Objektorientierte Programmierung OOP Programmieren mit Java

Vorkurs Informatik WiSe 17/18

1. Vorbereiten das Host, folgende Software Pakete müssen installiert werden: gnome-devel bison flex texinfo libncurses5-dev git codeblocks putty

Programmieren von Java Smartcards

Apps-Entwicklung mit Netbeans

Webtests mit Selenium, Groovy, TestNG und Maven

Bau dir dein eigenes Eclipse

Einstieg in die Informatik mit Java

Handbuch für die Erweiterbarkeit

Modulare Anwendungen und die Lookup API. Geertjan Wielenga NetBeans Team Deutschsprachige Überarbeitung, Aljoscha Rittner NetBeans Dream Team

Merkblatt System-C Installation Linux

Grundlagen der Informatik Übungen 1.Termin

Programmieren I. Dokumentation mit javadoc Heusch 10.4 Ratz Institut für Angewandte Informatik

Erste Schritte mit Eclipse

Virtueller Campus. Virtueller Campus Horw mit interaktiver Steuerung. HowTo: Externe Bibliotheken

JCoverage. Uni Kassel Projektarbeit Software Engineering Markus Pilsl & Marko Medved

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:

Praktikum Spring MVC Spring integrieren In der pom.xml Einträge für Spring hinzufügen.

Zum Abschluss wird gezeigt, wie aus einem C++ Quell-Programm ein ausführbares Programm erzeugt wird. 1. Installation von NetBeans...

Anleitung zur Installation und Verwendung von eclipseuml 2.1.0

Builddreikampf: Ant, Maven und Gradle. Sven Bunge / Carl Düvel

Java Einführung Programmcode

Software Engineering II

Übung 1: Installation + Test von Eclipse. Übung 2: Hello World

Build-Management. Der Einsatz von Make, Ant und Maven und Co. Prof. Dr. Nikolaus Wulff

Literatur und Links. Webtechnologien WS 2015/16 Teil 1/Entwicklung

JDroidLib mit Eclipse (Mac/Linux/Windows)

Renée Bäcker. Perl $foo Magazin

CI von Eclipse RCP Anwendungen mit Gradle/Jenkins

Installation einer C++ Entwicklungsumgebung unter Windows --- TDM-GCC und Eclipse installieren

Welches hätten Sie denn gerne? Markus Stäuble, CTO, namics (deutschland) GmbH

Eclipse Tomcat Plugin Starthilfe

SCHRITT 0 ( Nur falls Java noch nicht installiert ist! )

Remote Method Invocation

Literatur und Links. Webtechnologien SS 2015 Teil 1/Entwicklung

Java: Kapitel 1. Überblick. Programmentwicklung WS 2008/2009. Holger Röder Holger Röder

Apps-Entwicklung mit Eclipse

Einstieg in die Informatik mit Java

Predictive Analytics Client. Installationsanleitung

Installation von NetBeans inkl. Glassfish Anwendungs-Server

Programmieren I. Entwicklungsumgebungen Eclipse, NetBeans und IntelliJ IDEA. Institut für Angewandte Informatik

B) Klassenbibliotheken Turtle und Util (GPanel, Console) installieren Ein Unterverzeichnis classes auf der Festplatte erstellen, z.b.

Transkript:

Literatur und Web [3-1] Maven by Example http://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 Reference http://www.sonatype.com/resources/books/maven-the-completereference/download [3-3] Better Builds with Maven http://www.iproving.ca/download/technologies/maven/maven+resources/betterbuilds WithMaven-1.0.2.pdf [3-4] Maven 3.0 http://www.torsten-horn.de/techdocs/maven.htm [3-5] Behrendt, Mario: Jenkins. Kurz&Gut, O'Reilly, 20111 2

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 Für (sehr) viele Anwendungen gibt es Plugins, die die eigentliche Aufgabe realisieren. 3 Maven Funktionen I Steuerung folgender Prozesse: Übersetzen Testen Zusammensetzen (Build) Maven ist unabhängig von der Programmiersprache. Neben der Herstellung einer lauffähigen Version der betreffenden Software werden noch Dokumentationen, z.b. javadoc, erzeugt. Die Arbeit erfolgt unmittelbar durch Aufruf von mvn über die Shell-Schnittstelle Es gibt Plugins für Eclipse und netbeans. http://wiki.netbeans.org/maven http://maven.apache.org/eclipse-plugin.html Wer über einen Server dies im Hintergrund ablaufen lassen möchte, was für große Projekte geboten ist, der benutze Jenkins. http://jenkins-ci.org/ 4

Maven Funktionen II Beachtung und Verwaltung der Abhängigkeiten (Dependency Management) Globales Repository für Plugins Diese werden auch Mojos genannt Mojo = 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. 5 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 für Kommandos auf den bin-ordner setzen: am besten global: Systemsteuerung>System> Erweiterte Systemeinstellungen> Umgebungsvariablen> Systemvariablen 6

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 geprüft. Im MSDOS-Fenster set eingeben und sehen ob der Pfad gesetzt ist. 7 Installation III - Windows Prüfung von PATH: Letzter Test mit mvn -v": 8

Installation IV - Linux Die Installation auf Linux verläuft analog, nur dass der Mechanismus des Setzens der PATH-Variablen anders ist. Z.B. für den bash in.bashrc oder.profile: export JAVA_HOME=... export M2_HOME=... export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin Infos für beide Betriebssysteme: http://maven.apache.org/download.cgi#installation 9 Archetypes Projekt-Templates Es sind Projekt-Templates für typische Projektarten definiert Diese Templates installieren Basisversionen, die dann weiter entwickelt werden Es gibt sehr viele archetypes, z.b. für Web-Anwendungen, Scala- Projekte etc. Jedes Projekt kann eigene Templates entwerfen und der Welt zur Verfügung stellen Zur Erzeugung wird das Plugin archetype benutzt: mvn archetype:generate 10

Hallo world! in Maven I 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 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" ausgewählt das wird dann als einziges angeboten, wenn das Filtern scheitert (was ja erwünscht 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. 11 Erläuterungen -D leitet einen Parameter ein, der ein Attribut festlegt. Alle in diesem Beispiel aufgeführten Parameter können 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. 12

Hallo world! in Maven II Eingabe 1 Eingabe 2 Eingabe 3 13 Hallo world! in Maven III Und nun der Schluss 14

Hallo world! in Maven IV Initial aufgebaute Ordnerstruktur 15 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 16

Hallo world! in Maven VI Ordnerinhalt von hello Inhalt von pom.xml Erster Teil (01) <project xmlns="http://maven.apache.org/pom/4.0.0" (02) xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" (03) xsi:schemalocation="http://maven.apache.org/pom/4.0.0 (04) http://maven.apache.org/xsd/maven-4.0.0.xsd"> (05) <modelversion>4.0.0</modelversion> 17 Hallo world! in Maven VII pom.xml (06) <groupid>de.htw_berlin.f4.kbe.hallo</groupid> (07) <artifactid>hello</artifactid> (08) <version>1.0-snapshot</version> (09) <packaging>jar</packaging> Koordinaten (10) <name>hello</name> (11) <url>http://maven.apache.org</url> (12) <properties> (13) <project.build.sourceencoding>utf-8</project.build.sourceencoding> (14) </properties> (15) <dependencies> (16) <dependency> (17) <groupid>junit</groupid> (18) <artifactid>junit</artifactid> (19) <version>3.8.1</version> (20) <scope>test</scope> (21) </dependency> (22) </dependencies> (23) </project> Abhängigkeiten 18

Erläuterungen I Zeilen 1-4: Angabe der Grammatik sowie der Namensräume 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 Abhängigkeiten zu anderen Plugins, hier JUnit 19 Erläuterungen 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 Programme Üblich ist ein Name ähnlich dem Paketnamen in Java artifactid Identifier als Name des Artifakts, meist eines Programms. Der Dateiname wird meist nach folgendem Schema aufgebaut: <artifactid>-<version>.<packaging> version gibt die Version nach folgendem Schema an: <Major>.<Minor>.<Bugfix>-<Qualifier>-<Buildnumber> Für unfertige Versionen ist der Qualifier SNAPSHOT Packaging Typ des Pakets, z.b. jar, ear, war oder pom 20

Erläuterungen III - Abhängigkeiten (16) <dependency> (17) <groupid>junit</groupid> (18) <artifactid>junit</artifactid> (19) <version>3.8.1</version> (20) <scope>test</scope> (21) </dependency> Wenn eine Abhängigkeit definiert ist und das entsprechende Ziel erreicht werden soll, werden alle fehlende Bibliotheken, POM-Dateien etc. aus den Repository herunter geladen und lokal abgespeichert. Dies dauert beim ersten Mal etwas, danach geht es sehr schnell. 21 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 entfällt. 22

Typische Verzeichnisstruktur (Auszug) project home = {basedir} {basedir}/src/main/java Wurzel mit der POM-Datei 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 für das Testen notwendig sind 23 Convention over Configuration I Maven basiert auf einem allgemeinen für fast alle Anwendungsfälle geeigneten Modell über den Prozess der Erstellung von Software. Bei jedem Teil dieses Modells wurden die Default-Einstellungen so gewählt, 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 heißt pom.xml. POM = Project Object Modell 24

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-thepom.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 Vererbung Vererbt werden... Abhängigkeiten Plugins Entwickler-Informationen POM 25 Convention over Configuration III Es können 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. 26

Lebenszyklen I Default dient der eigentlichen Entwicklung validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-testresources, process-test-resources, test-compile, process-testclasses, test, prepare-package, package, preintegration-test, integration-test, post-integration-test, verify, install, deploy Clean dient zum Aufräumen der generierten Dateien pre-clean, clean, post-clean Site dient zur Generierung der Dokumentation pre-site, site, post-site, site-deploy 27 Lebenszyklen II Default (Auszug) validate Prüfung auf gültige und vollständige Projektstruktur compile Übersetzen test Durchführen der Tests package Erstellen der erzeugten Pakete verify Prüfung der Pakete install Installieren im lokalen Repository deploy - Installieren im globalen Repository Die einzelnen Phasen innerhalb des Zyklus haben eine bestimmte Reihenfolge, die immer bis zum angegebenen Ziel durchlaufen wird. Oben wurden die am meisten verwendeten Ziele aufgeführt. 28

Lebenszyklen III Default (Auszug) validate Wird als Parameter eine Phase angegeben, so wird immer bis einschließlich der angegebenen Phase der Lebenszyklus durchlaufen compile test-compile test test package install package verify install deploy 29

mvn compile II Nun ist ein weiterer Ordner angelegt: target 31

mvn package III 34

mvn package IV - Ausführen java -cp hello-1.0-snapshot.jar de.htw_berlin.f4.kbe.app pause Wenn die Manifest-Datei geändert wird, wird der Aufruf einfacher. So ist es am besten, ein bat-file zum Starten zu schreiben. 35 Aufrufe I mvn [options] [phase] [plugin[:goal]] mvn -h mvn help:help mvn help:effective-settings mvn help:effective-pom mvn dependency:tree -Dverbose mvn compile mvn test mvn package mvn install mvn site mvn clean Hilfe zu dem Kommando Hilfe zur Entwicklungsumgebung Anzeige der für den Lauf gesetzten Parameter Anzeige der für den Lauf gesetzten POM-Information Abhängigkeitsbaum generieren Nur Übersetzen Alles bis zum Test durchführen Jar-File generieren In lokales Repository kopieren Dokumentation generieren Alles Generierte wegwerfen 36

Aufrufe II Es können 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 einschließlich Phase compile mvn compiler:compile genauso, aber compiler ist der Name eines Plugins und compile das Ziel für dieses Plugin. mvn compiler:testcompile Es wird nur die Testsoftware übersetzt 37 Jetzt erzeugen wir ein ausführbares jar-file I <build> <plugins> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-jar-plugin</artifactid> <version>2.4</version> <configuration> <archive> <manifest> <mainclass>de.htw_berlin.f4.kbe.app</mainclass> <addclasspath>true</addclasspath> </manifest> </archive> </configuration> </plugin> </plugins> Dies wird in das POM-File eingefügt. </build> 38

Erläuterungen <build> bedeutet, dass der eingeschlossene Text sich auf die Build- Phase bezieht. <plugins> leitet eine Liste der Plugins ein hier für den Build-Prozess <configuration> ist der Abschnitt mit Parametern für ein spezielles Plugin. Welche Parameter was bedeuten, muss der Plugin-Dokumentation entnommen werden. Siehe: http://mvnrepository.com/artifact/org.apache.maven.plugins/mavenjar-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-ausführen 39

Jetzt erzeugen wir ein ausführbares jar-file III java -jar hello-1.0-snapshot.jar pause 41 Nun soll es sofort ausgeführt werden I <build> <plugins>... <plugin> <groupid>org.codehaus.mojo</groupid> <artifactid>exec-maven-plugin</artifactid> <version>1.2.1</version> <configuration> <mainclass>de.htw_berlin.f4.kbe.app</mainclass> </configuration> </plugin> </plugins> </build> Dies wird in das POM-File eingefügt. Der Name der Startklasse muss entweder hier angegeben werden oder als Parameter für Maven. 42

Nun soll es sofort ausgeführt 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 für 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. 44

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 <dependency>-teil die andere Version benutzt werden. 45 Nach dieser Anstrengung etwas Entspannung... 46