SlideShare une entreprise Scribd logo
1  sur  26
Apache Maven 3 
Einführung 
Universität Bremen: Fachbereich 3 – Informatik & Mathematik 
Bachelor Projekt: Smart Activities 
Chris Michael Klinger 
24.01.2014
Inhalt 
1. Vorstellung Apache Maven 
2. Installation von Maven 
3. Maven POM-Dateien 
4. Abhängigkeiten 
5. Maven Smartact Infrastruktur 
6. IDE Integration 
Diese Präsentation verwendet Windows für die Benennung von 
Umgebungsvariablen und referenziert diese als %VAR%. Bei Unix-Artigen Systemen 
müssen entsprechende Abweichungen beachtet werden! 
24.01.2014 Maven 3 Einführung 2
Maven Background 
• Maven ist ein Build-Management-Tool: 
• “Apache Maven is a software project management and 
comprehension tool.” 
• Insbesondere für Java-Projekte, basiert selbst auf Java 
• Apache Open Source Project, u.a. unterstützt von Sonatype 
• Geschichte 
• Maven 1 (2003) 
• Erste Maven Version 
• Perfomance-Probleme, viele Eigenheiten nicht bedacht 
• Inzwischen End of Life, kein Support mehr 
• Maven 2 (2005) 
• Komplette Neuentwicklung 
• Nicht kompatibel zu Maven 1 
• Maven 3 (2010) 
• Kompatibel zu Maven 2, verbesserte Usability und Stabilität 
24.01.2014 Maven 3 Einführung 3
Funktionen von Maven 
• Verwaltung von Abhängigkeiten 
• Mehre Module umfassende Builds (Multi-Module) 
• Konsistente Build Model Beschreibung 
• Fördert Best-Practices der Software-Entwicklung 
• Erweiterbar durch Plugins 
• Release Management 
• Generierung von Projektberichten 
24.01.2014 Maven 3 Einführung 4
Maven besorgen und installieren 
• Voraussetzungen: 
• Installiertes, funktionstüchtiges JDK, inkl. %JAVA_HOME% 
• Download unter: 
• http://maven.apache.org/download.cgi 
• In Archivformen (tar.gz, zip) 
• Empfohlen: Version 3.0.X (Buildserver) 
• Archiv entpacken, wo ist eigentlich fast egal 
• /usr/bin bzw. C:Programme oder Java-Unterordner sind gängig, ggf. auch 
%USERPROFILE% 
• Version in Ordner am besten bestehen lassen 
• Umgebungsvariablen: 
• %M2_HOME%: Auf den Maven Ordner Setzen 
• %M2%: Auf %M2_HOME%bin setzten 
• %PATH%: Um %M2% erweitern 
• Optional: %MAVEN_OPST%: JVM Parameter, z.B. „ -Xms256m -Xmx512m“ 
• In Konsole „mvn --version“ ausführen. 
Komplette Referenz: http://maven.apache.org/download.cgi 
24.01.2014 Maven 3 Einführung 5
Die Maven POM Dateien 
• POM steht für „Project Object Model“ 
• Verwendet XML als Beschreibungssprache 
• Beschreiben ein Projekt: 
• Name und Version 
• Abhängigkeiten 
• Quellcode Repository 
• Plugins die für das Projekt benötigt werden 
• Profile (z.B. Alternative Build Konfigurationen) 
24.01.2014 Maven 3 Einführung 6
Artefakt Identifizierung 
• Maven identifiziert Projekte eindeutig anhand: 
• groupID: 
• Frei wählbarer Identifier für die Gruppe (keine Leerzeichen oder 
Doppelpunkte) 
• i.d.R. wird das Java Package eines Projektes als groupID verwendet. 
• artifactID: 
• Frei wählbarer Identifier für den Projektnamen (keine Leerzeichen oder 
Doppelpunkte) 
• version: 
• Format: {major}.{minor}.{maintenance} 
• -SNAPSHOT für die Kennzeichnung von Entwicklungsversionen 
<?xml version="1.0" encoding="UTF-8"?> 
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_ 
0_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://maven.apache.org/POM/4.0.0"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>de.uni_bremen.smartactivities.pom</groupId> 
<artifactId>smartact-base-pom</artifactId> 
<version>1.0-SNAPSHOT</version> 
</project> 
Maven 3 Einführung 
24.01.2014 7
Projektname & Packaging 
• Projekte können einen beschreibenden Namen haben 
• Art des Builds wird als <packaging> im POM definiert 
• Wie soll Maven das Projekt bauen 
• Beispiele: pom, jar, war, … 
• Standard ist jar 
<?xml version="1.0" encoding="UTF-8"?> 
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_ 
0_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://maven.apache.org/POM/4.0.0"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>de.uni_bremen.smartactivities.pom</groupId> 
<artifactId>smartact-base-pom</artifactId> 
<version>1.0-SNAPSHOT</version> 
<name>Smart Activities Basis POM Datei</name> 
<packaging>pom</packaging> 
</project> 
Maven 3 Einführung 
24.01.2014 8
Vererbung zwischen Projekten 
• POM Dateien können ihre Werte vererben 
• GroupID, Version 
• Abhängigkeiten 
• Pluginkonfiguration 
• … 
• Dadurch zentrale Definition von Werten, Doppelungen werden vermieden 
und Änderungen können schnell in die komplette Tiefe „propagiert“ 
werden. 
• Werte können lokal überschrieben werden! 
<?xml version="1.0" encoding="UTF-8"?> 
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_ 
0_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://maven.apache.org/POM/4.0.0"> 
<modelVersion>4.0.0</modelVersion> 
<parent> 
<groupId>de.uni_bremen.smartactivities.pom</groupId> 
<artifactId>smartact-base-pom</artifactId> 
<version>1.0-SNAPSHOT</version> 
</parent> 
<artifactId>smartact-mycoolsoftwaremodule</artifactId> 
<packaging>jar</packaging> 
</project> 
Maven 3 Einführung 
24.01.2014 9
Multi-Modul Projekte 
• Maven verfügt über eine sehr gute Multi-Modul 
Unterstützung über folgendes Pattern: 
• Jedes Maven-Projekt erzeugt ein Artefakt 
• Parent-POM: Gruppiert mehrere Artefakte zu einer Software 
<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_ 
0_0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>de.unibremen.nosuchgroup</groupId> 
<artifactId>easylearncards-server</artifactId> 
<version>0.9-SNAPSHOT</version> 
<packaging>pom</packaging> 
<name>EasyLearnCards Serveranwendung (Parent-POM)</name> 
<modules> 
<module>easylearncards-server-data</module> 
<module>easylearncards-server-service</module> 
<module>easylearncards-server-webapp</module> 
<module>easylearncards-server-rest</module> 
</modules> 
</project> 
Maven 3 Einführung 
24.01.2014 10
Aufbau eines Maven-Projektes 
• Maven fördert Best-Practices der SW-Entwicklung durch 
einen standardisierten Aufbau der Verzeichnisse: 
Artifact Source Files 
Artifact Ressource Files 
Test Source Files 
Test Ressource Files 
Weitere Source Files (z.B. Web) 
Arbeitsverzeichnis (unbedingt: .gitignore!) 
pom-Datei im Root! 
Maven 3 Einführung 
24.01.2014 11
Maven Build Lifecycle 
• Es gibt drei eingebaute Build Lifecyle: default, clean und site 
• Phasen des default-cycle: 
• validate: validate the project is correct and all necessary information is available 
• compile: compile the source code of the project 
• test: test the compiled source code using a suitable unit testing framework. These 
tests should not require the code be packaged or deployed 
• package: take the compiled code and package it in its distributable format, such 
as a JAR. 
• integration-test: process and deploy the package if necessary into an 
environment where integration tests can be run 
• verify: run any checks to verify the package is valid and meets quality criteria 
• install: install the package into the local repository, for use as a dependency in 
other projects locally 
• deploy: done in an integration or release environment, copies the final package 
to the remote repository for sharing with other developers and projects. 
• clean-Lifecycle zum Zurücksetzen des Arbeitsverzeichnisses 
• Site-Lifecyle zum Generierten von Dokumentation (Seiten) 
Komplette Referenz: http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html 
24.01.2014 Maven 3 Einführung 12
Maven Goals (Beispiele) 
• Maven ist ein wird über die Kommandozeile mit dem Befehl mvn und 
einem „Goal“ gestartet: 
• mvn install 
• Führt ein validate, compile, test, package, integration-test, verify und install aus: Am Ende 
liegt im Erfolgsfall das JAR im lokalen Repository vor. 
• mvn deploy 
• Führt ein validate, compile, test, package, integration-test, verify und install und deploy aus: 
Am Ende liegt im Erfolgsfall das JAR im lokalen und geteilten Repository vor. 
• mvn clean 
• Leert das lokale Arbeitsverzeichnis 
• mvn clean install 
• Leert zunächst das lokale Arbeitsverzeichnis, führt dann ein install wie oben beschrieben 
durch 
• mvn clean test 
• Leert zunächst das lokale Arbeitsverzeichnis, führt dann ein test-Cycle durch 
• mvn test clean 
• Führt zunächst einen Test-Cycle durch und löscht dann das Arbeitsverzeichnis 
• mvn release:prepare release:perfom 
Benötigt eine Release Plugin Configuration: Bereitet einen Release vor und führt 
diesen durch: Zunächst werden entsprechende SCM Tags erstellt, anschließend 
komplettes install mit deploy, POM wird auf neue Entwicklungsversion umgestellt 
24.01.2014 Maven 3 Einführung 13
Maven und Abhängigkeiten 
• Maven hat das Management von Abhängigkeiten in Java 
revolutioniert 
• Kein Einchecken von Bibliotheken in Versionskotrolle mehr nötig 
• Zentrale Kommunikation von Abhängigkeiten und Versionen im 
POM 
• Repository Konzept für (vorkompilierte) Bibliotheken 
• Mit Maven Central „ein“ zentrales Repository 
• Häufig auch Auslieferung von Source und JavaDoc mit 
Artefakt: 
• Debugging & Entwicklung vereinfacht 
24.01.2014 Maven 3 Einführung 14
Abhängigkeit definieren 
• Eine Abhängigkeit besteht aus: 
• Eindeutiger Identifizierung (vgl. Artefakt Identifizierung) 
• Scope: compile, test, provided (Standard: compile) 
• Type: jar, pom, war, ear, zip (Standard: jar) 
<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_ 
0_0.xsd"> 
... 
<dependencies> 
<dependency> 
<groupId>javax.validation</groupId> 
<artifactId>validation-api</artifactId> 
<version>1.0.0.GA</version> 
<scope>compile</scope> 
</dependency> 
</dependencies> 
</project> 
Maven 3 Einführung 
24.01.2014 15
Maven Repositories 
• Abhängigkeiten werden aus Repositories geladen: 
• HTTP(S) Protokoll 
• Alle Downloads werden im lokal Benutzer-Repository 
zwischengespeichert: 
• Normalerweise zu finden unter %USERPROFILE%.m2repository 
• Intuitive Verzeichnis Struktur: 
• {groupID}/{artifactID}/{version}/{artifactID}- 
{version}.{jar|pom|..} 
• „.“ wird in {groupID} durch „/“ ersetzt: org.openhab wird also zu 
org/openhab (Unterverzeichnisse) 
• SNAPSHOTS haben häufig noch einen Timestamp im 
Dateinamen. 
24.01.2014 Maven 3 Einführung 16
Proxy-Repositories 
• Es gibt ein zentrales Maven Community Repository: 
• http://repo1.maven.org/maven2 
• Jeder kann eigenes Repository als Proxy betreiben: 
• Artefakt Cache im lokalen LAN 
• Kombination von Repositories 
• Eigenes Management, damit bessere Kontrolle 
• smartact nutzt Sonartype Nexus OSS als Repository 
Manager 
• Erreichbar unter: https://nexus.slevermann.de 
• Keine Cache Konfiguration, da kein LAN 
• Aber zentrales Entwickler-Repository 
• Einrichten von Repositories: Siehe Literatur 
24.01.2014 Maven 3 Einführung 17
Dependency Management 
• Wie mit Versionskonflikten umgehen: 
• Java kann nicht mit zwei Versionen einer Bibliothek umgehen, da 
teilweise gleiche Identifier… 
(Mit OSGI ist das teilweise möglich … aber wir betrachten mal den 
einfachen Fall) 
• Lösungen: 
• Maven die Verwaltung überlassen: Komplex und nicht wirklich 
vorhersagbar 
• Besser: Selbst übernehmen 
<?xml version="1.0" encoding="UTF-8"?> 
<project> 
... 
<dependencyManagement> 
<dependencies> 
<dependency> 
<groupId>javax.validation</groupId> 
<artifactId>validation-api</artifactId> 
<version>1.0.0.GA</version> 
</dependency> 
</dependencies> 
<dependencyManagement> 
</project> 
24.01.2014 Maven 3 Einführung 18
Verwendung Dep. Management 
• Dependency Management wird in der Regel ausgelagert: Parent- 
POM und 3rd-Party POM 
<project> 
... 
<dependencyManagement> 
<dependencies> 
<dependency> 
de.uni_bremen.smartactivities.pom: 
smartact-base-pom:1.0-SNAPSHOT 
<groupId>org.springframework</groupId> 
<artifactId>spring-core</artifactId> 
<version>${spring.version}</version> <!– version management in property! --> 
</dependency> 
</dependencies> 
<dependencyManagement> 
</project> 
<project> 
<parent> 
<groupId>de.uni_bremen.smartactivities.pom</groupId> 
<artifactId>smartact-base-pom</artifactId> 
<version>1.0-SNAPSHOT</version> 
</parent> 
... 
<dependencies> 
<dependency> 
<groupId>javax.validation</groupId> 
<artifactId>validation-api</artifactId> 
de.uni_bremen.smartactivities: 
my-artefact:1.0-SNAPSHOT 
</dependency> <!-- look: no version defined, inherit from base! --> 
</dependencies> 
</project> 
24.01.2014 Maven 3 Einführung 19
smartact: Dependencies, Modules und Vererbung „in Action“ 
smartact-base-pom 
Parent-Beziehung 
Abhängigkeit 
smartact-3rdparty-pom smartact-sync 
smartact-runtime 
smartact-backend-parent 
smartact-backend-data 
smartact-backend-service 
smartact-backend-gui 
openhab-core 
Module 
Version von openhab-core wird im Dependency 
Management von samrtact-3rdparty-pom festgelegt 
und steht in smartact-runtime über Parent & 
Abhängigkeitsbeziehungen zur Verfügung! 
DRAFT 23.01.2014 – Änderungen möglich 
24.01.2014 Maven 3 Einführung 20
IDE Integration (Eclipse) 
• Muss zunächst installiert werden: 
Persönliche Empfehlung: Statt Eclipse lieber direkt SPRING TOOL SUITE 
nutzen, dort sind viele nützliche Plugins bereits integriert: 
http://spring.io/tools 
• Anschließend: Import-Dialog 
(Datei->Import) 
24.01.2014 Maven 3 Einführung 21
IDE Integration (Eclipse) - Tools 
24.01.2014 Maven 3 Einführung 22
Tipps und Tricks: 
• Ihr sucht ein Artefakt? Das Central Repository kann unter 
http://search.maven.org durchsucht werden. 
• Manche Dinge gibt es dort nicht (z.B. openHab), dann selber 
bauen und für alle anderen ins Repository einchecken. 
• „Es geht nicht“ 
• mvn clean bewirkt in vielen Fällen Wunder! 
• Insb. bei der IDE-Integration Projekt aktualisieren 
• Konsole statt IDE verwenden 
• Wenn gar nichts mehr geht das lokale Repository unter 
„%USERPROFILE%.m2repository“ löschen. 
24.01.2014 Maven 3 Einführung 23
Tipps und Tricks: 
• Ihr sucht ein Artefakt? Das Central Repository kann unter 
http://search.maven.org durchsucht werden. 
• Manche Dinge gibt es dort nicht (z.B. openHab), dann selber 
bauen und für alle anderen ins Repository einchecken. 
• „Es geht nicht“ 
• mvn clean bewirkt in vielen Fällen Wunder! 
• Insb. bei der IDE-Integration Projekt aktualisieren 
• Konsole statt IDE verwenden 
• Wenn gar nichts mehr geht das lokale Repository unter 
„%USERPROFILE%.m2repository“ löschen. 
24.01.2014 Maven 3 Einführung 24
Literatur 
• Homepage Apache Maven: 
• http://maven.apache.org 
• Sonatype Resources: 
• http://www.sonatype.com/resources 
• Thorsten Horn: Maven 3.0: 
• http://www.torsten-horn.de/techdocs/maven.htm 
• Smartact Confluence Dokumentation: 
• https://confluence.slevermann.de/display/SWDEV/Apache+Mav 
en 
• Dort ist auch diese Präsentation zu finden. 
• Enthält insb. unsere Projektspezifische Konfiguration! 
24.01.2014 Maven 3 Einführung 25
Fragen, 
Anregungen, 
Vertiefungswünsche 
24.01.2014 Maven 3 Einführung 26

Contenu connexe

Tendances

Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
inovex GmbH
 
EntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloadedEntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloaded
René Winkelmeyer
 

Tendances (20)

Fix & fertig: Best Practises für "XPages-Migranten"
Fix & fertig: Best Practises für "XPages-Migranten"Fix & fertig: Best Practises für "XPages-Migranten"
Fix & fertig: Best Practises für "XPages-Migranten"
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
Perl Renaissance Reloaded
Perl Renaissance ReloadedPerl Renaissance Reloaded
Perl Renaissance Reloaded
 
Ant im Detail
Ant im DetailAnt im Detail
Ant im Detail
 
Jenkins Acceleration
Jenkins AccelerationJenkins Acceleration
Jenkins Acceleration
 
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
 
Vagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenVagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und Architekten
 
Continuous Integration mit Hudson (JUG Stuttgart, 11.02.2010)
Continuous Integration mit Hudson (JUG Stuttgart, 11.02.2010)Continuous Integration mit Hudson (JUG Stuttgart, 11.02.2010)
Continuous Integration mit Hudson (JUG Stuttgart, 11.02.2010)
 
Test-Automation mit Selenium WebDriver - ein Artikel der iks im dotnetpro
Test-Automation mit Selenium WebDriver - ein Artikel der iks im dotnetproTest-Automation mit Selenium WebDriver - ein Artikel der iks im dotnetpro
Test-Automation mit Selenium WebDriver - ein Artikel der iks im dotnetpro
 
Entwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, PuppetEntwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, Puppet
 
EntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloadedEntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloaded
 
Continuous Integration mit Hudson (JUG Mannheim, 27.01.2010)
Continuous Integration mit Hudson (JUG Mannheim, 27.01.2010)Continuous Integration mit Hudson (JUG Mannheim, 27.01.2010)
Continuous Integration mit Hudson (JUG Mannheim, 27.01.2010)
 
Docker - Automatisches Deployment für Linux-Instanzen
Docker - Automatisches Deployment für Linux-Instanzen Docker - Automatisches Deployment für Linux-Instanzen
Docker - Automatisches Deployment für Linux-Instanzen
 
Deploy Magento Shops with Capistrano v3
Deploy Magento Shops with Capistrano  v3Deploy Magento Shops with Capistrano  v3
Deploy Magento Shops with Capistrano v3
 
C++ Dependency Management 2.0
C++ Dependency Management 2.0C++ Dependency Management 2.0
C++ Dependency Management 2.0
 
Testing tools
Testing toolsTesting tools
Testing tools
 
systemd & Docker
systemd & Dockersystemd & Docker
systemd & Docker
 
Deployment 2.0
Deployment 2.0Deployment 2.0
Deployment 2.0
 
Containerized End-2-End Testing - JUG Saxony Day
Containerized End-2-End Testing - JUG Saxony DayContainerized End-2-End Testing - JUG Saxony Day
Containerized End-2-End Testing - JUG Saxony Day
 
JAX 2015 - Continuous Integration mit Java & Javascript
JAX 2015 - Continuous Integration mit Java & JavascriptJAX 2015 - Continuous Integration mit Java & Javascript
JAX 2015 - Continuous Integration mit Java & Javascript
 

Similaire à Introduction to Apache Maven 3 (German)

Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrant
s0enke
 
Entwicklung mit Chef und Vagrant - PHPUG HH
Entwicklung mit Chef und Vagrant - PHPUG HHEntwicklung mit Chef und Vagrant - PHPUG HH
Entwicklung mit Chef und Vagrant - PHPUG HH
Florian Holzhauer
 
Serverprovisioning in einer dynamischen Infrastruktur
Serverprovisioning in einer dynamischen InfrastrukturServerprovisioning in einer dynamischen Infrastruktur
Serverprovisioning in einer dynamischen Infrastruktur
inovex GmbH
 
Auszug Seminarunterlagen "Tomcat 6.x"
Auszug Seminarunterlagen "Tomcat 6.x"Auszug Seminarunterlagen "Tomcat 6.x"
Auszug Seminarunterlagen "Tomcat 6.x"
schellsoft
 
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Ralf Sigmund
 

Similaire à Introduction to Apache Maven 3 (German) (20)

Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)
 
BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...
BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...
BASTA Spring 2016: Test- und Releaseumgebungen der nächsten Generation mit TF...
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrant
 
Entwicklung mit Chef und Vagrant - PHPUG HH
Entwicklung mit Chef und Vagrant - PHPUG HHEntwicklung mit Chef und Vagrant - PHPUG HH
Entwicklung mit Chef und Vagrant - PHPUG HH
 
Serverprovisioning in einer dynamischen Infrastruktur
Serverprovisioning in einer dynamischen InfrastrukturServerprovisioning in einer dynamischen Infrastruktur
Serverprovisioning in einer dynamischen Infrastruktur
 
openFrameworks workshops_07122013_erst
openFrameworks workshops_07122013_erstopenFrameworks workshops_07122013_erst
openFrameworks workshops_07122013_erst
 
Von Test nach Live mit Rex
Von Test nach Live mit RexVon Test nach Live mit Rex
Von Test nach Live mit Rex
 
Von Test nach live mit Rex
Von Test nach live mit RexVon Test nach live mit Rex
Von Test nach live mit Rex
 
Composer und TYPO3
Composer und TYPO3Composer und TYPO3
Composer und TYPO3
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
Node.js
Node.jsNode.js
Node.js
 
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling am Beispiel von AngrybirdCloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird
 
Auszug Seminarunterlagen "Tomcat 6.x"
Auszug Seminarunterlagen "Tomcat 6.x"Auszug Seminarunterlagen "Tomcat 6.x"
Auszug Seminarunterlagen "Tomcat 6.x"
 
Robustes Testen mit Selenium
Robustes Testen mit SeleniumRobustes Testen mit Selenium
Robustes Testen mit Selenium
 
Service Orchestrierung mit Apache Mesos
Service Orchestrierung mit Apache MesosService Orchestrierung mit Apache Mesos
Service Orchestrierung mit Apache Mesos
 
Scala - OSGi Bundles from Outer (Java) Space
Scala - OSGi Bundles from Outer (Java) SpaceScala - OSGi Bundles from Outer (Java) Space
Scala - OSGi Bundles from Outer (Java) Space
 
Arquillian
ArquillianArquillian
Arquillian
 
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
 
Einführung in Docker
Einführung in DockerEinführung in Docker
Einführung in Docker
 
Proxtalks 2016 - Migration zu Proxmox VE
Proxtalks 2016 - Migration zu Proxmox VEProxtalks 2016 - Migration zu Proxmox VE
Proxtalks 2016 - Migration zu Proxmox VE
 

Dernier (7)

Angewandte Philosophie an der Universität Duisburg-Essen.
Angewandte Philosophie an der Universität Duisburg-Essen.Angewandte Philosophie an der Universität Duisburg-Essen.
Angewandte Philosophie an der Universität Duisburg-Essen.
 
Angewandte Kognitions- und Medienwissenschaft an der Universität Duisburg_Essen
Angewandte Kognitions- und Medienwissenschaft an der Universität Duisburg_EssenAngewandte Kognitions- und Medienwissenschaft an der Universität Duisburg_Essen
Angewandte Kognitions- und Medienwissenschaft an der Universität Duisburg_Essen
 
1029-Danh muc Sach Giao Khoa khoi 12.pdf
1029-Danh muc Sach Giao Khoa khoi 12.pdf1029-Danh muc Sach Giao Khoa khoi 12.pdf
1029-Danh muc Sach Giao Khoa khoi 12.pdf
 
Welche KI-Kompetenzen brauchen Lehrpersonen?!
Welche KI-Kompetenzen brauchen Lehrpersonen?!Welche KI-Kompetenzen brauchen Lehrpersonen?!
Welche KI-Kompetenzen brauchen Lehrpersonen?!
 
Wirtschaftsingenieurwesen an der Universität Duisburg-Essen
Wirtschaftsingenieurwesen an der Universität Duisburg-EssenWirtschaftsingenieurwesen an der Universität Duisburg-Essen
Wirtschaftsingenieurwesen an der Universität Duisburg-Essen
 
1029-Danh muc Sach Giao Khoa khoi 11.pdf
1029-Danh muc Sach Giao Khoa khoi 11.pdf1029-Danh muc Sach Giao Khoa khoi 11.pdf
1029-Danh muc Sach Giao Khoa khoi 11.pdf
 
LAKO Kreativpreis_2024_Startnummer_02_(LFS_LA).pdf
LAKO Kreativpreis_2024_Startnummer_02_(LFS_LA).pdfLAKO Kreativpreis_2024_Startnummer_02_(LFS_LA).pdf
LAKO Kreativpreis_2024_Startnummer_02_(LFS_LA).pdf
 

Introduction to Apache Maven 3 (German)

  • 1. Apache Maven 3 Einführung Universität Bremen: Fachbereich 3 – Informatik & Mathematik Bachelor Projekt: Smart Activities Chris Michael Klinger 24.01.2014
  • 2. Inhalt 1. Vorstellung Apache Maven 2. Installation von Maven 3. Maven POM-Dateien 4. Abhängigkeiten 5. Maven Smartact Infrastruktur 6. IDE Integration Diese Präsentation verwendet Windows für die Benennung von Umgebungsvariablen und referenziert diese als %VAR%. Bei Unix-Artigen Systemen müssen entsprechende Abweichungen beachtet werden! 24.01.2014 Maven 3 Einführung 2
  • 3. Maven Background • Maven ist ein Build-Management-Tool: • “Apache Maven is a software project management and comprehension tool.” • Insbesondere für Java-Projekte, basiert selbst auf Java • Apache Open Source Project, u.a. unterstützt von Sonatype • Geschichte • Maven 1 (2003) • Erste Maven Version • Perfomance-Probleme, viele Eigenheiten nicht bedacht • Inzwischen End of Life, kein Support mehr • Maven 2 (2005) • Komplette Neuentwicklung • Nicht kompatibel zu Maven 1 • Maven 3 (2010) • Kompatibel zu Maven 2, verbesserte Usability und Stabilität 24.01.2014 Maven 3 Einführung 3
  • 4. Funktionen von Maven • Verwaltung von Abhängigkeiten • Mehre Module umfassende Builds (Multi-Module) • Konsistente Build Model Beschreibung • Fördert Best-Practices der Software-Entwicklung • Erweiterbar durch Plugins • Release Management • Generierung von Projektberichten 24.01.2014 Maven 3 Einführung 4
  • 5. Maven besorgen und installieren • Voraussetzungen: • Installiertes, funktionstüchtiges JDK, inkl. %JAVA_HOME% • Download unter: • http://maven.apache.org/download.cgi • In Archivformen (tar.gz, zip) • Empfohlen: Version 3.0.X (Buildserver) • Archiv entpacken, wo ist eigentlich fast egal • /usr/bin bzw. C:Programme oder Java-Unterordner sind gängig, ggf. auch %USERPROFILE% • Version in Ordner am besten bestehen lassen • Umgebungsvariablen: • %M2_HOME%: Auf den Maven Ordner Setzen • %M2%: Auf %M2_HOME%bin setzten • %PATH%: Um %M2% erweitern • Optional: %MAVEN_OPST%: JVM Parameter, z.B. „ -Xms256m -Xmx512m“ • In Konsole „mvn --version“ ausführen. Komplette Referenz: http://maven.apache.org/download.cgi 24.01.2014 Maven 3 Einführung 5
  • 6. Die Maven POM Dateien • POM steht für „Project Object Model“ • Verwendet XML als Beschreibungssprache • Beschreiben ein Projekt: • Name und Version • Abhängigkeiten • Quellcode Repository • Plugins die für das Projekt benötigt werden • Profile (z.B. Alternative Build Konfigurationen) 24.01.2014 Maven 3 Einführung 6
  • 7. Artefakt Identifizierung • Maven identifiziert Projekte eindeutig anhand: • groupID: • Frei wählbarer Identifier für die Gruppe (keine Leerzeichen oder Doppelpunkte) • i.d.R. wird das Java Package eines Projektes als groupID verwendet. • artifactID: • Frei wählbarer Identifier für den Projektnamen (keine Leerzeichen oder Doppelpunkte) • version: • Format: {major}.{minor}.{maintenance} • -SNAPSHOT für die Kennzeichnung von Entwicklungsversionen <?xml version="1.0" encoding="UTF-8"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_ 0_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"> <modelVersion>4.0.0</modelVersion> <groupId>de.uni_bremen.smartactivities.pom</groupId> <artifactId>smartact-base-pom</artifactId> <version>1.0-SNAPSHOT</version> </project> Maven 3 Einführung 24.01.2014 7
  • 8. Projektname & Packaging • Projekte können einen beschreibenden Namen haben • Art des Builds wird als <packaging> im POM definiert • Wie soll Maven das Projekt bauen • Beispiele: pom, jar, war, … • Standard ist jar <?xml version="1.0" encoding="UTF-8"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_ 0_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"> <modelVersion>4.0.0</modelVersion> <groupId>de.uni_bremen.smartactivities.pom</groupId> <artifactId>smartact-base-pom</artifactId> <version>1.0-SNAPSHOT</version> <name>Smart Activities Basis POM Datei</name> <packaging>pom</packaging> </project> Maven 3 Einführung 24.01.2014 8
  • 9. Vererbung zwischen Projekten • POM Dateien können ihre Werte vererben • GroupID, Version • Abhängigkeiten • Pluginkonfiguration • … • Dadurch zentrale Definition von Werten, Doppelungen werden vermieden und Änderungen können schnell in die komplette Tiefe „propagiert“ werden. • Werte können lokal überschrieben werden! <?xml version="1.0" encoding="UTF-8"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_ 0_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>de.uni_bremen.smartactivities.pom</groupId> <artifactId>smartact-base-pom</artifactId> <version>1.0-SNAPSHOT</version> </parent> <artifactId>smartact-mycoolsoftwaremodule</artifactId> <packaging>jar</packaging> </project> Maven 3 Einführung 24.01.2014 9
  • 10. Multi-Modul Projekte • Maven verfügt über eine sehr gute Multi-Modul Unterstützung über folgendes Pattern: • Jedes Maven-Projekt erzeugt ein Artefakt • Parent-POM: Gruppiert mehrere Artefakte zu einer Software <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_ 0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>de.unibremen.nosuchgroup</groupId> <artifactId>easylearncards-server</artifactId> <version>0.9-SNAPSHOT</version> <packaging>pom</packaging> <name>EasyLearnCards Serveranwendung (Parent-POM)</name> <modules> <module>easylearncards-server-data</module> <module>easylearncards-server-service</module> <module>easylearncards-server-webapp</module> <module>easylearncards-server-rest</module> </modules> </project> Maven 3 Einführung 24.01.2014 10
  • 11. Aufbau eines Maven-Projektes • Maven fördert Best-Practices der SW-Entwicklung durch einen standardisierten Aufbau der Verzeichnisse: Artifact Source Files Artifact Ressource Files Test Source Files Test Ressource Files Weitere Source Files (z.B. Web) Arbeitsverzeichnis (unbedingt: .gitignore!) pom-Datei im Root! Maven 3 Einführung 24.01.2014 11
  • 12. Maven Build Lifecycle • Es gibt drei eingebaute Build Lifecyle: default, clean und site • Phasen des default-cycle: • validate: validate the project is correct and all necessary information is available • compile: compile the source code of the project • test: test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed • package: take the compiled code and package it in its distributable format, such as a JAR. • integration-test: process and deploy the package if necessary into an environment where integration tests can be run • verify: run any checks to verify the package is valid and meets quality criteria • install: install the package into the local repository, for use as a dependency in other projects locally • deploy: done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects. • clean-Lifecycle zum Zurücksetzen des Arbeitsverzeichnisses • Site-Lifecyle zum Generierten von Dokumentation (Seiten) Komplette Referenz: http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html 24.01.2014 Maven 3 Einführung 12
  • 13. Maven Goals (Beispiele) • Maven ist ein wird über die Kommandozeile mit dem Befehl mvn und einem „Goal“ gestartet: • mvn install • Führt ein validate, compile, test, package, integration-test, verify und install aus: Am Ende liegt im Erfolgsfall das JAR im lokalen Repository vor. • mvn deploy • Führt ein validate, compile, test, package, integration-test, verify und install und deploy aus: Am Ende liegt im Erfolgsfall das JAR im lokalen und geteilten Repository vor. • mvn clean • Leert das lokale Arbeitsverzeichnis • mvn clean install • Leert zunächst das lokale Arbeitsverzeichnis, führt dann ein install wie oben beschrieben durch • mvn clean test • Leert zunächst das lokale Arbeitsverzeichnis, führt dann ein test-Cycle durch • mvn test clean • Führt zunächst einen Test-Cycle durch und löscht dann das Arbeitsverzeichnis • mvn release:prepare release:perfom Benötigt eine Release Plugin Configuration: Bereitet einen Release vor und führt diesen durch: Zunächst werden entsprechende SCM Tags erstellt, anschließend komplettes install mit deploy, POM wird auf neue Entwicklungsversion umgestellt 24.01.2014 Maven 3 Einführung 13
  • 14. Maven und Abhängigkeiten • Maven hat das Management von Abhängigkeiten in Java revolutioniert • Kein Einchecken von Bibliotheken in Versionskotrolle mehr nötig • Zentrale Kommunikation von Abhängigkeiten und Versionen im POM • Repository Konzept für (vorkompilierte) Bibliotheken • Mit Maven Central „ein“ zentrales Repository • Häufig auch Auslieferung von Source und JavaDoc mit Artefakt: • Debugging & Entwicklung vereinfacht 24.01.2014 Maven 3 Einführung 14
  • 15. Abhängigkeit definieren • Eine Abhängigkeit besteht aus: • Eindeutiger Identifizierung (vgl. Artefakt Identifizierung) • Scope: compile, test, provided (Standard: compile) • Type: jar, pom, war, ear, zip (Standard: jar) <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_ 0_0.xsd"> ... <dependencies> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.0.0.GA</version> <scope>compile</scope> </dependency> </dependencies> </project> Maven 3 Einführung 24.01.2014 15
  • 16. Maven Repositories • Abhängigkeiten werden aus Repositories geladen: • HTTP(S) Protokoll • Alle Downloads werden im lokal Benutzer-Repository zwischengespeichert: • Normalerweise zu finden unter %USERPROFILE%.m2repository • Intuitive Verzeichnis Struktur: • {groupID}/{artifactID}/{version}/{artifactID}- {version}.{jar|pom|..} • „.“ wird in {groupID} durch „/“ ersetzt: org.openhab wird also zu org/openhab (Unterverzeichnisse) • SNAPSHOTS haben häufig noch einen Timestamp im Dateinamen. 24.01.2014 Maven 3 Einführung 16
  • 17. Proxy-Repositories • Es gibt ein zentrales Maven Community Repository: • http://repo1.maven.org/maven2 • Jeder kann eigenes Repository als Proxy betreiben: • Artefakt Cache im lokalen LAN • Kombination von Repositories • Eigenes Management, damit bessere Kontrolle • smartact nutzt Sonartype Nexus OSS als Repository Manager • Erreichbar unter: https://nexus.slevermann.de • Keine Cache Konfiguration, da kein LAN • Aber zentrales Entwickler-Repository • Einrichten von Repositories: Siehe Literatur 24.01.2014 Maven 3 Einführung 17
  • 18. Dependency Management • Wie mit Versionskonflikten umgehen: • Java kann nicht mit zwei Versionen einer Bibliothek umgehen, da teilweise gleiche Identifier… (Mit OSGI ist das teilweise möglich … aber wir betrachten mal den einfachen Fall) • Lösungen: • Maven die Verwaltung überlassen: Komplex und nicht wirklich vorhersagbar • Besser: Selbst übernehmen <?xml version="1.0" encoding="UTF-8"?> <project> ... <dependencyManagement> <dependencies> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.0.0.GA</version> </dependency> </dependencies> <dependencyManagement> </project> 24.01.2014 Maven 3 Einführung 18
  • 19. Verwendung Dep. Management • Dependency Management wird in der Regel ausgelagert: Parent- POM und 3rd-Party POM <project> ... <dependencyManagement> <dependencies> <dependency> de.uni_bremen.smartactivities.pom: smartact-base-pom:1.0-SNAPSHOT <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> <!– version management in property! --> </dependency> </dependencies> <dependencyManagement> </project> <project> <parent> <groupId>de.uni_bremen.smartactivities.pom</groupId> <artifactId>smartact-base-pom</artifactId> <version>1.0-SNAPSHOT</version> </parent> ... <dependencies> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> de.uni_bremen.smartactivities: my-artefact:1.0-SNAPSHOT </dependency> <!-- look: no version defined, inherit from base! --> </dependencies> </project> 24.01.2014 Maven 3 Einführung 19
  • 20. smartact: Dependencies, Modules und Vererbung „in Action“ smartact-base-pom Parent-Beziehung Abhängigkeit smartact-3rdparty-pom smartact-sync smartact-runtime smartact-backend-parent smartact-backend-data smartact-backend-service smartact-backend-gui openhab-core Module Version von openhab-core wird im Dependency Management von samrtact-3rdparty-pom festgelegt und steht in smartact-runtime über Parent & Abhängigkeitsbeziehungen zur Verfügung! DRAFT 23.01.2014 – Änderungen möglich 24.01.2014 Maven 3 Einführung 20
  • 21. IDE Integration (Eclipse) • Muss zunächst installiert werden: Persönliche Empfehlung: Statt Eclipse lieber direkt SPRING TOOL SUITE nutzen, dort sind viele nützliche Plugins bereits integriert: http://spring.io/tools • Anschließend: Import-Dialog (Datei->Import) 24.01.2014 Maven 3 Einführung 21
  • 22. IDE Integration (Eclipse) - Tools 24.01.2014 Maven 3 Einführung 22
  • 23. Tipps und Tricks: • Ihr sucht ein Artefakt? Das Central Repository kann unter http://search.maven.org durchsucht werden. • Manche Dinge gibt es dort nicht (z.B. openHab), dann selber bauen und für alle anderen ins Repository einchecken. • „Es geht nicht“ • mvn clean bewirkt in vielen Fällen Wunder! • Insb. bei der IDE-Integration Projekt aktualisieren • Konsole statt IDE verwenden • Wenn gar nichts mehr geht das lokale Repository unter „%USERPROFILE%.m2repository“ löschen. 24.01.2014 Maven 3 Einführung 23
  • 24. Tipps und Tricks: • Ihr sucht ein Artefakt? Das Central Repository kann unter http://search.maven.org durchsucht werden. • Manche Dinge gibt es dort nicht (z.B. openHab), dann selber bauen und für alle anderen ins Repository einchecken. • „Es geht nicht“ • mvn clean bewirkt in vielen Fällen Wunder! • Insb. bei der IDE-Integration Projekt aktualisieren • Konsole statt IDE verwenden • Wenn gar nichts mehr geht das lokale Repository unter „%USERPROFILE%.m2repository“ löschen. 24.01.2014 Maven 3 Einführung 24
  • 25. Literatur • Homepage Apache Maven: • http://maven.apache.org • Sonatype Resources: • http://www.sonatype.com/resources • Thorsten Horn: Maven 3.0: • http://www.torsten-horn.de/techdocs/maven.htm • Smartact Confluence Dokumentation: • https://confluence.slevermann.de/display/SWDEV/Apache+Mav en • Dort ist auch diese Präsentation zu finden. • Enthält insb. unsere Projektspezifische Konfiguration! 24.01.2014 Maven 3 Einführung 25
  • 26. Fragen, Anregungen, Vertiefungswünsche 24.01.2014 Maven 3 Einführung 26