SlideShare ist ein Scribd-Unternehmen logo
Die nächste Generation des
                                             Build-Managements?




Copyright 2006 Thorsten Kamann                                     1
itemis products & solutions GmbH & Co. KG
Inhalt

 Problematik Buildmanagement
 Verfügbare Build-Tools
       Shellskripte, Make-Files, Ant, Maven
 Unterschiede und Gemeinsamkeiten von Ant und Maven
 Die Konzepte von Maven
 Features von Maven
      Lebenszyklen, Projektdeskriptor, Transitive Abhängigkeiten, Repositories,
       Plugins, Assemblies, Projektwebseite, Benutzereinstellungen
 Integration in Eclipse und Netbeans
 Erweiterungsmöglichkeiten von Maven
       Archetypen, Plugins (Java und Ant), Wagon-Provider
 Verwendung von Maven mit Ant
 Links
Copyright 2006 Thorsten Kamann                                                     2
itemis products & solutions GmbH & Co. KG
Problematik Buildmanagement

 Warum brauche ich ein Build(management)-Tool?

       Viele Aufgaben während des Entwicklungsprozesses bestehen aus vielen
        einzelnen Schritten
       Die IDE kann nur für eine begrenzte Anzahl von Common-Tasks Support
        bieten
       Für Continous Integration Systeme muss es möglich sein den Build-Vorgang
        automatisch durchzuführen
       In einem Projekt wird häufig von Entwicklern mit unterschiedlichen IDE's
        und Systemkonfigurationen entwickelt




Copyright 2006 Thorsten Kamann                                                     3
itemis products & solutions GmbH & Co. KG
Build-Tools

 Eine Auswahl bekannter Build-Tools
       Shell-, Batchskripte
       Make-Files
       Ant
       Maven




Copyright 2006 Thorsten Kamann              4
itemis products & solutions GmbH & Co. KG
Build-Tools: Shell-, Batchskripte

 Vorteil:
       Systemnahes Skripting
       Ideal für Quick-Hacks
       Evtl. ausreichend für sehr kleine Teams auf einer bestimmten Plattform

 Nachteile:
       Keine Plattform-Neutralität, dh. für Linux und Win32-System müssen
        unterschiedliche Skripte erzeugt werden
       Wartbarkeit ist sehr schlecht
       Ufert oft in Skriptorgien aus




Copyright 2006 Thorsten Kamann                                                   5
itemis products & solutions GmbH & Co. KG
Build-Tools: Make-Files

 Vorteile:
       Ideal für Projekte, die auf C basieren
       Support von den entsprechenden IDE's
       Viel Know-How im Internet verfügbar

 Nachteile:
       Sehr fehleranfällig
       Mit Projektgrösse leidet auch die Wartbarkeit
       Oftmals nicht Plattform-neutral
       Für Projekte anderer Programmiersprachen
        nicht (oder nur schwerlich) zu verwenden



Copyright 2006 Thorsten Kamann                          6
itemis products & solutions GmbH & Co. KG
Build-Tools: Ant

 Vorteile:
       Sehr einfach verwendbar, da XML-Syntax verwendet wird
       Sehr guter Support von IDE's
       Auch für grosse Projekte noch wartbar
       Erweiterbar und auch für Aufgaben ausserhalb des Buildmanagements
        benutzbar

 Nachteile:
       Kein standardisiertes Vorgehen, d.h. jedes Projekt erfindet
        seinen Lifecycle neu
       Bietet keine vorgefertigten Tools, die das Erstellen
        von immer wiederkehrenden Tasks überflüssig macht


Copyright 2006 Thorsten Kamann                                              7
itemis products & solutions GmbH & Co. KG
Build-Tools: Maven

 Vorteile:
       Build-Prozess wird konfiguriert, nicht „programmiert“
       Leistungsfähiges Dependency-Management mittels Repositories
       Definierter Projekt-Lifecycle
       Sehr erweiterbar und anpassbar
       Schnell und resourcenschonend
       Deckt alle Facetten des Buildmanagement ab (z.B. Projektwebseite)

 Nachteile:
       Kein direkter Zugriff auf die einzelnen Tasks, wie z.B.
        bei Ant
       Der Build-Prozess wird dadurch etwas abstrakter
       Nicht für alle Tasks gibt es bereits Maven-Plugins
Copyright 2006 Thorsten Kamann                                              8
itemis products & solutions GmbH & Co. KG
Ant und Maven - Gemeinsamkeiten

 Top-Level Projekt bei der Apache Software Foundation (ASF)
 Java-basiert und garantiert so für eine hohe Modularität
 Basiert auf einem XML-Format
 Wird erfolgreich in vielen (OpenSource-)Projekten eingesetzt
 Grosse Community und viel Know-How im Internet/Printmedien
 Viele Drittanbieter bieten zusätzliche Komponenten und/oder Produkte




Copyright 2006 Thorsten Kamann                                           9
itemis products & solutions GmbH & Co. KG
Ant und Maven – Unterschiede

 Ant                                         Maven
       Kein Dependency-Management               Transitives Dependency-
        verfügbar                                 Management ist zentraler
                                                  Bestandteil
       Jeder Teilaspekt des Build-              Viele Teilaspekte werden Out-Of-
        Prozess muss jedes Mal neu                The-Box mitgeliefert
        erstellt werden (z.B. Javac, Unit)
       Kein ähnliches Konzept verfügbar         Sämtliche Projektinformationen
                                                  befinden sich an einer zentralen
                                                  Stelle (pom.xml)
       Kein ähnliches Konzept verfügbar         Sehr einfach komplett auf
                                                  Domänen anpassbar
       Geignet auch für Aufgaben                Ist darauf nicht ausgelegt
        ausserhalb von SW-Projekten
Copyright 2006 Thorsten Kamann                                                   10
itemis products & solutions GmbH & Co. KG
Maven - Die Konzepte

 Jedes Projekt erzeugt ein Artefakt
 Artefakte bestehen aus einer Gruppen-ID (groupId), Artefakt-ID (artifactId)
                                           (                     (
  und einer Versionsnummer (version)
                             (
 Jedes Projekt hat nur einen Source- und einen Test-Baum
 Dies kann durch bestimmte Aktionen (generate-Goal) erweitert werden
                                       (
 Der Buildprozess ist in Lebenszyklen (lifecycle, phase) aufgeteilt
                                       (
 Jeder Lebenszyklus kann ein oder mehrere Ziele (goals) haben
                                                 (
 Es müssen nur die Dinge konfiguriert werden, die vom Standard abweichen
  (SuperPOM)
 Abhängigkeiten sollen zentral verwaltet werden und von mehreren Projekten
  verwendet werden können
 Die Komplexität heutiger Buildskripte soll verringert werden und einem
  deskriptiven Format weichen
Copyright 2006 Thorsten Kamann                                                  11
itemis products & solutions GmbH & Co. KG
Maven – Die Features

 Einfaches und anpassbares Projektsetup
 Projektstrukturen sind konsistent, neue Entwickler brauchen nur wenig Zeit, um
  sich einzuarbeiten
 Transitives Dependency-Management
 Bibliotheken können über verschiedene Projekte „geshared“ werden
 Remote und lokale Repositories für die Verteilung von Projektartefakten
 Die selben Metadaten werden für den Build-Prozess wie auch für zusätzliche
  Informationen wie z.B. die Projektwebsite und Dokumentation genutzt
 Mit wenig Konfiguration können Quellcodeverwaltungen und Release-
  Management integriert werden
 Flexible Plugin-Struktur
 Support für Domänen-spezifische Strukturen


Copyright 2006 Thorsten Kamann                                                 12
itemis products & solutions GmbH & Co. KG
Maven - Features: Lebenszyklen eines Projekts

 Lebenszyklen sind eines der zentralen Konzepte von Maven
 Die meist gebräuchlichsten Lebenszyklen eines Projekts sind:
       validate – validiert das Projekt, ob alle Resourcen verfügbar sind
       compile – Kompiliert den Quellcode
       test – Führt die Unit-Tests aus
       package – Erstellt das Projekt-Artefakt, z.B. ein JAR
       integration-test – Führt Tests in der Zielumgebung aus
       verify – Überprüft die erstellten Pakete und führt evtl. vorhandene QS-Tests
        durch
       install – Installiert das erstellte Artefakt in das lokale Repository
       deploy – Installiert das erstellte Artefakt in ein entferntes (öffentliches)
        Repository

Copyright 2006 Thorsten Kamann                                                   13
itemis products & solutions GmbH & Co. KG
Maven - Features: Lebenszyklen eines Projekts

 Lebenszyklen sind hierarchisch aufgebaut, dh. beim Ausführen eines
  bestimmten Lebenszyklus werden alle vorherigen automatisch mit ausgeführt:

 mvn install

  führt also validate, compile, test, package, verify und install aus.
 Plugins können mittels Annotations oder Konfiguration für einen bestimmten
  Lebenszyklus bereit gestellt werden (siehe auch „Erweiterung von Maven“)




Copyright 2006 Thorsten Kamann                                                 14
itemis products & solutions GmbH & Co. KG
Maven – Features: Der Projektdeskriptor

 Jedes Projekt hat mindestens 1 Projektdeskriptor „pom.xml“
 Enthält die Projekt-Metadaten, z.B.:
       Informationen des Artefakts, das dieses Projekt erzeugt
       Informationen über die Entwickler (Name, Kontakt, Rollen)
       SourceControl
       Mailinglisten
       Repositories
       Plugin-Konfigurationen
       Abhängigkeiten
       Lizenzinformationen
       Buildkonfiguration
 Wird für das Deployment des Projektartifakts in ein Repository genutzt

Copyright 2006 Thorsten Kamann                                             15
itemis products & solutions GmbH & Co. KG
Maven – Features: Der Projektdeskriptor

 Eine einfache pom.xml:
     <project>
        <modelVersion>4.0.0</modelVersion>
        <groupId>de.itemis.maven</groupId>
        <artifactId>maven-demo</artifactId>
        <version>1.0</version>
      </project>

 Braucht das Projekt noch Abhängigkeiten reicht es diese mit in den
  Projektdeskriptor einzubinden:
 <dependencies>
      <dependency>
              <groupId>GROUPID</groupId>
              <artifactId>ARTIFACTID</artifactId>
              <version>VERSION</version>
      </dependency>
 </dependencies>
Copyright 2006 Thorsten Kamann                                         16
itemis products & solutions GmbH & Co. KG
Maven – Features: Der Projektdeskriptor

 Braucht das Projekt ein zusätzliches Plugin lässt sich das ebenfalls sehr leicht
  einbinden:

 <build>
      <plugins>
              <plugin>
                      <groupId>PLUGIN_GROUPID</groupId>
                      <artifactId>PLUGIN_ARTIFACTID</artifactId>
                      <version>PLUGIN_VERSION</version><
                      [<configuration/>]
              <plugin>
      </plugins>
 </build>




Copyright 2006 Thorsten Kamann                                                       17
itemis products & solutions GmbH & Co. KG
Maven – Features: Transitive Abhängigkeiten

 Eines der Hauptfeatures sind die transitiven Abhängigkeiten, dh. jede
  Abhängigkeit kann ihre eigenen Abhängigkeiten mitliefern. In dem Beispiel
  würde der Projektdeskriptor nur eine Abhängigkeit auf „Library A“ definieren.
  Alle anderen Bibliotheken würden automatisch aufgelöst und würden dem
  Projekt zur Verfügung stehen.




Copyright 2006 Thorsten Kamann                                                18
itemis products & solutions GmbH & Co. KG
Maven – Features: Transitive Abhängigkeiten

 Dieses Feature kann nicht deaktiviert werden. Wenn man vermeiden will, dass
  abhängige Bibliotheken aufgelöst werden, kann man dies mit dem <exclusions>-
  Tag erreichen:

 <dependency>
      [...]
      <exclusions>
              <exclusion>
                      <groupId>EXCLUSION_GROUPID</groupId>
                      <artifactId>EXCLUSION_ARTIFACTID</artifactId>
              </exclusion>
      </exclusions>
 </dependency>




Copyright 2006 Thorsten Kamann                                              19
itemis products & solutions GmbH & Co. KG
Maven – Features: Transitive Abhängigkeiten

 Da ein Projekt aus bestimmten Lebenszyklen besteht (compile, test,
  packaging...) gibt es auch verschiedene Classpaths.
 Während der unterschiedlichen Lebenszyklen eines Projekts werden auch nur
  unterschiedliche Abhängigkeiten gebraucht (z.B. jUnit nur während des Tests).
 Jeder Abhängigkeit kann deswegen ein Scope übergeben werden:

 <dependency>
      <groupId>GROUPID</groupId>
      <artifactId>ARTIFACTID</artifactId>
      <version>VERSION</version>
      <scope>SCOPE</scope>
 </dependency>

 Die Auflösung des Scopes übernimmt Maven eigenständig und ist mit den
  Lebenszyklen fest verdrahtet.

Copyright 2006 Thorsten Kamann                                                20
itemis products & solutions GmbH & Co. KG
Maven – Features: Transitive Abhängigkeiten

 Der Scope kann die folgenden Werte haben:
       compile – (standard). Abhängigkeiten in diesem Scope werden immer
        aufgelöst
       provided – Abhängigkeiten dieses Scopes sind nicht transitiv und werden
        gewöhnlich von dem JRE oder einem Container bereitgestellt
       runtime – Abhängigkeiten mit diesem Scope werden nur zur Laufzeit
        gebraucht, sind also nur während des Testing und der Laufzeit verfügbar
       test – Abhängigkeiten, die für das Testing verwendet werden. Ein
        klassisches Beispiel dafür ist die Abhängigkeit zur junit.jar
       system – Ähnlich wie der „provided“ Scope. Abhängigkeiten mit diesem
        Scope werden nicht im Repository gesucht, sondern müssen vom Entwickler
        manuell dem Projekt hinzugefügt werden.


Copyright 2006 Thorsten Kamann                                               21
itemis products & solutions GmbH & Co. KG
Maven – Features: Transitive Abhängigkeiten

Lifecycle/Scope                  Compile    Provided   Runtime   System   Test
Compile                                                                 
                                       
Runtime                                                                 
                                       
Test                                                                    
                                       
Tabelle 1: Übersicht Lifecycle <==> Scope




Copyright 2006 Thorsten Kamann                                                   22
itemis products & solutions GmbH & Co. KG
Maven – Features: Repositories

 Repositories sind Aufbewahrungsorte für Projektartefakte
 Unterteilen sich in lokale und entfernte (remote) Repositories
       Das lokale Repository ist üblicherweise unter ${user.home}/.m2/repository
        zu finden
       Bekannte Remote-Repositories sind:
            http://www.ibiblio.org/maven2/
            http://snapshots.maven.codehaus.org/maven2/
 Das Maven-Goal „install“ kopiert das Projekt-Artefakt in das lokale Repository,
  wohingegen „deploy“ in das entfernte Repository kopiert.
 Das entfernte Repository muss schreibbar sein (FTP, SSH), während zum
  Auflösen der Abhängigkeiten ein normaler HTTP-Zugriff reicht



Copyright 2006 Thorsten Kamann                                                  23
itemis products & solutions GmbH & Co. KG
Maven – Features: Repositories

 Ein Repository hat eine definierte Verzeichnisstruktur, damit das Auffinden von
  Artefakten und bestimmten Versionen standardisiert ist
 Innerhalb der Repositories werden die verschiedenen Projektartefakte nach
  diesem Konzept abgelegt:
      GROUPID/ARTIFACTID/VERSION/ARTIFACT-VERSION.jar
      GROUPID/ARTIFACTID/VERSION/ARTIFACT-VERSION.pom
 Die Punkte in GROUPID wird durch file.separator ersetzt.
 Aus
 <dependency>
      <groupId>de.itemis.maven</groupId>
      <artifactId>maven-demo</artifactId>
      <version>1.0.2</version>
 </dependency>
 wird
 de/itemis/maven/maven-demo/1.0.2/maven-demo-1.0.2.jar
 de/itemis/maven/maven-demo/1.0.2/maven-demo-1.0.2.pom

Copyright 2006 Thorsten Kamann                                                 24
itemis products & solutions GmbH & Co. KG
Maven – Features: Plugins

 Jegliche Funktionalität von Maven wird von Plugins gekapselt
 Plugins werden in der pom.xml aktiviert und konfiguriert:
 <build>
      <plugins>
              <plugin>
                      <groupId>PLUGIN_GROUPID</groupId>
                      <artifactId>PLUGIN_ARTIFACTID</artifactId>
                      <version>PLUGIN_VERSION</version><
                      [<configuration/>]
              <plugin>
      </plugins>
 </build>
 Plugins können aus herkömmlichem Java-Code oder aus Ant-Skripten bestehen
 Es gibt eine Vielzahl an Plugins auf den Webseiten von Maven und Codehaus
 Diese Plugins sind ähnlich gut dokumentiert wie die Ant-Tasks

Copyright 2006 Thorsten Kamann                                                25
itemis products & solutions GmbH & Co. KG
Maven – Features: Assemblies

 Assemblies sind Konfigurationen, um Distributionen zu erstellen
 Distributionen werden in einer eigenen XML-Datei konfiguriert und über
  mvn assembly:assembly aufgerufen:
 <assembly>
      <id>bin</id>
      <formats>
               <format>tar.gz</format>
               <format>zip</format>
      </formats>
      <fileSets>
               <fileSet>
                        <includes><include>README*</include></includes>
               </fileSet>
               <fileSet>
                        <directory>target</directory>
                        <outputDirectory></outputDirectory>
                        <includes><include>*.jar</include></includes>
               </fileSet>
      </fileSets>
 </assembly>
Copyright 2006 Thorsten Kamann                                             26
itemis products & solutions GmbH & Co. KG
Maven – Features: Projektwebseite

 Maven kann anhand der Metadaten in der pom.xml eine Projektwebseite
  erstellen
 Diese Seite wird auf Basis von Cocoon/Forrest erstellt, 2 recht ausgereifte XML-
  Frameworks
 Jeder Teil dieser Projektwebseite ist anpassbar
 Als Eingabeformat wird XML, APT (Almost Plain Text – ein Wiki-ähnliches
  Format) und FML (für FAQ-Seiten) unterstützt
 Als Ausgabeformat unterstützt Maven aktuell nur xHTML. PDF ist aber geplant.
 Unterstützung für Internationalisierung der Webseite ist auch integriert
 Dadurch, dass die Metadaten der pom.xml genutzt werden, entfällt die Pflege
  organisatorischer Daten (wechselnde Entwickler, Änderungen bei Mailinglisten,
  usw.)


Copyright 2006 Thorsten Kamann                                                  27
itemis products & solutions GmbH & Co. KG
Maven – Features: Projektwebseite

 Wenn nur die Metadaten der pom.xml verwendet werden enthält die generierte
  Webseite folgende Menüpunkte:

       Report über die verwendeten Abhängigkeiten
       Mailinglisten
       Continous Integration
       Quellcodeverwaltung
       Bugtracking
       Projektteam
       Lizenz




Copyright 2006 Thorsten Kamann                                            28
itemis products & solutions GmbH & Co. KG
Maven – Features: Projektwebseite

 Auch das Deployment der generierten Webseite übernimmt Ant
 In der pom.xml muss konfiguriert werden wohin die Seite hin deployed werden
  soll:

 <distributionManagement>
      <site>
              <id>website</id>
              <url>scp://myserver/home/htdocs</url>
      </site>
 </distributionManagement>

  Der Zugang zu dem Server wird in der settings.xml konfiguriert
 Ein einfaches mvn site-deploy lädt die Seite dann auf den Server




Copyright 2006 Thorsten Kamann                                              29
itemis products & solutions GmbH & Co. KG
Maven - Features: Benutzereinstellungen

 Maven kann sowohl globale Einstellungen als auch Benutzereinstellungen haben
 Die Syntax ist in beiden Fällen gleich
 Die Benutzereinstellungen befinden sich unter
 ${user.home}/.m2/settings.xml
 Die globalen Einstellungen sind unter ${m2.home}/conf/settings.xml zu
  finden
 U.a. können in den Einstellungen folgende Dinge konfiguriert werden:
      Repositories (lokale und entfernte)
       Mirrors für entfernte Repositories
       Zugangsberechtigungen
       Proxyeinstellungen
       Profile
       PluginGroups
Copyright 2006 Thorsten Kamann                                              30
itemis products & solutions GmbH & Co. KG
Maven – Integration in Eclipse

 Es gibt bereits ein Plugin für Eclipse
 Mit ihm ist es möglich einfach Abhängigkeiten zu suchen und dem Projekt
  hinzuzufügen, wobei die eigentlichen Bibliotheken aus dem lokalen Repository
  gelinkt und nicht ins Projekt kopiert werden
 Über „External Launcher“ können die verschiedenen Lifecycles/Goals gestartet
  werden
 Der verwendete Maven-Embedder bietet nicht die Leistungsfähigkeit wie das
  Maven-CLI
 Es ist problemlos möglich Maven-CLI als external Launcher zu konfigurieren und
  evtl. ist das auch eine sinnvolle Alternative, um im Plugin implementiert zu
  werden




Copyright 2006 Thorsten Kamann                                                31
itemis products & solutions GmbH & Co. KG
Maven – Integration in Netbeans

 Auch für Netbeans gibt es ein Modul, welches Maven in die IDE integriert
 Es bietet ein ähnliches Leistungsspektrum wie das Plugin für Eclipse
 Da auch hier der Maven-Embedder verwendet wird, gibt es ähnliche
  Einschränkungen wie bei Eclipse




Copyright 2006 Thorsten Kamann                                               32
itemis products & solutions GmbH & Co. KG
Maven - Erweiterungen

 Maven kann an fast allen Stellen angepasst und erweitert werden
 Domänen-spezifische Strukturen und Prozesse können nachgebildet werden
 Initiale Projektstrukturen können durch eigene Archetypen bereit gestellt
  werden
 Bestehende Ant-Targets für besondere Aufgaben können ohne weiteres mit dem
  Ant-Plugin oder einem eigenem Ant-basierten Plugin übernommen werden
 Projekt-Artefakte können in besonders geschützte Repositories deployed
  werden
 Für spezielle Protokolle oder höhere Sicherheit können spezielle Wagon-
  Provider implementiert werden




Copyright 2006 Thorsten Kamann                                             33
itemis products & solutions GmbH & Co. KG
Maven – Erweiterungen: Eigene Archetypen

 Archetypen sind einfache Maven-Plugins
 Mittels eines Deskriptors werden die Verzeichnisstrukturen und Dateien, die das
  Projekt initial haben soll, festgelegt
 Dateien werden als Resource mitgegeben, wobei an der Stelle beliebige
  Platzhalter verwendet werden können, die dann bei der Erstellung des Projekts
  als Java-Properties mitgegeben werden können
 Eine pom.xml für das neue Projekt kann schon mit den nötigen Konfigurationen
  mitgeliefert werden (Dependencies, Projekttyp, Repositories)
 Ein
 mvn archetype:create -DarchetypeGroupId=...
      -DarchetypeArtefactId=... -DarchetypeVersion=...
      [-Dproperty=...]
 reicht um das komplette Projekt zu erstellen


Copyright 2006 Thorsten Kamann                                                 34
itemis products & solutions GmbH & Co. KG
Maven – Erweiterungen: Plugins (Java)

 Plugins heissen bei Maven Mojo
 Die Implementierung ist ähnlich einer ANT-Task
 Das Mojo muss nur org.apache.maven.plugin.AbstractMojo erweitern und die
  Methode execute() überschreiben
 Mit Annotations können für das Mojo u.a. der Lifecycle (@phase), das Goal
                                                         (
  (@goal) und eine Beschreibung (@description) gesetzt werden
                                  (
 Für Parameter des Plugins gibt es die Annotation @parameter
 Parameter können auf erforderlich (@required) und/oder schreibgeschützt
                                     (
  (@readonly) gesetzt werden
 Das fertige Plugin kann mittels
  mvn install bzw. mvn deploy
  in ein entsprechendes Repository installiert werden und kann dann direkt von
  anderen Projekten verwendet werden

Copyright 2006 Thorsten Kamann                                              35
itemis products & solutions GmbH & Co. KG
Maven – Erweiterungen: Plugins (Java)

package sample.plugin;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;

 /**
 * @goal sayhi
 * @description Says quot;Hiquot; to the user
 /
 public class GreetingMojo extends AbstractMojo {
      /**
      * @parameter
      * @required
      */
      private String greeting;

           public void execute() throws MojoExecutionException {
              getLog().info(greeting);
          }
 }
Copyright 2006 Thorsten Kamann                                     36
itemis products & solutions GmbH & Co. KG
Maven – Erweiterungen: Plugins (Java)

<plugin>
     <groupId>sample.plugin</groupId>
     <artifactId>maven-hello-plugin</artifactId>
     <configuration>
             <greeting>Welcome</greeting>
     </configuration>
     <executions>
             <execution>
                     <phase>compile</phase>
                     <goals>
                             <goal>sayhi</goal>
                     </goals>
             </execution>
     </executions>
</plugin>




Copyright 2006 Thorsten Kamann                     37
itemis products & solutions GmbH & Co. KG
Maven – Erweiterungen: Plugins (Ant)

 Maven bietet die Möglichkeit Plugins auf Basis von Ant-Skripten zu entwickeln
 Dabei ist es nicht nötig Java zu programmieren
 Das ist eine ideale Möglichkeit bestehende Ant-Tasks zu übernehmen die gar
  nicht oder nur mit sehr viel Aufwand nachimplementiert werden können
 Die Konfiguration und Parameterisierung der Ant-Targets werden in den Plugin-
  Metadaten vorgenommen
 Es können sämtliche Features eines Ant-Buildskripts verwendet werden
 Ein Plugin kann mehrere Targets für unterschiedliche Goals enthalten




Copyright 2006 Thorsten Kamann                                                    38
itemis products & solutions GmbH & Co. KG
Maven – Erweiterungen: Wagon-Provider

 Maven bietet die Möglichkeit Projekt-Artefakte in jede Art von Repository zu
  schreiben
 Um spezielle Repositories nutzen zu können, ist es notwendig einen eigenen
  Wagon-Provider bereitzustellen
 Damit können Erfordernisse, wie z.B. CVS-Based Repositories oder spezielle
  Authentifizierung, abgedeckt werden
 Der Wagon-Provider muss nur vom org.apache.maven.wagon.AbstractWagon
  erben
 Es müssen nur die openConnection(), put() und get() Methoden
  überschrieben bzw. implementiert werden
 Der Wagon-Provider kann dann als Extension in der entsprechenden pom.xml
  konfiguriert und verwendet werden


Copyright 2006 Thorsten Kamann                                                   39
itemis products & solutions GmbH & Co. KG
Verwendung von Maven mit Ant

 Einige Aspekte von Maven können in Ant als gewöhnliche Ant-Tasks verwendet
  werden
 Abhängigkeiten können aufgelöst werden; auch das Feature Transitive
  Dependencies wird unterstützt
 Projektartefakte können in Repositories deployed werden
 Die Informationen der pom.xml können ausgelesen werden und stehen dann als
  Properties zur Verfügung
 Sinnvoll ist es sämtliche Projektinformationen in der pom.xml zu halten, um
  solche Metadaten zentral pflegen zu können
 Auch die Verzeichnisstruktur innerhalb eines Projekts könnte der von Maven
  nachempfunden werden
 So ist es später kein Problem den Buildprozess auf Maven umzustellen und neue
  Teammitglieder finden sich sehr schnell zurecht

Copyright 2006 Thorsten Kamann                                               40
itemis products & solutions GmbH & Co. KG
Links

 Maven Webseite
        http://maven.apache.org/
 FAQs
        http://docs.codehaus.org/display/MAVENUSER/FAQs
 MavenUSER
        http://docs.codehaus.org/display/MAVENUSER/Home
 Eclipse-Plugin
        http://maven.apache.org/eclipse-plugin.html
 Eclipse und Maven
        http://maven.apache.org/guides/mini/guide-ide-eclipse.html
 Maven Referenzen (Javadocs, Schema,...)
        http://maven.apache.org/ref/current/index.html


Copyright 2006 Thorsten Kamann                                       41
itemis products & solutions GmbH & Co. KG

Weitere ähnliche Inhalte

Was ist angesagt?

Ant im Detail
Ant im DetailAnt im Detail
Ant im Detail
Jörn Dinkla
 
BED-Con - Tools für den täglichen Kampf als Entwickler
BED-Con - Tools für den täglichen Kampf als EntwicklerBED-Con - Tools für den täglichen Kampf als Entwickler
BED-Con - Tools für den täglichen Kampf als Entwickler
Patrick Baumgartner
 
Flexibilitaet mit CDI und Apache DeltaSpike
Flexibilitaet mit CDI und Apache DeltaSpikeFlexibilitaet mit CDI und Apache DeltaSpike
Flexibilitaet mit CDI und Apache DeltaSpikeos890
 
Perl Renaissance Reloaded
Perl Renaissance ReloadedPerl Renaissance Reloaded
Perl Renaissance Reloaded
Gregor Goldbach
 
Continuous Delivery
Continuous DeliveryContinuous Delivery
Continuous Delivery
Steffen Gebert
 
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
OPITZ CONSULTING Deutschland
 
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"
Oliver Busse
 
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
 
Jenkins Acceleration
Jenkins AccelerationJenkins Acceleration
Jenkins Acceleration
Patrick Paechnatz
 
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
B1 Systems GmbH
 
EntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloadedEntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloadedRené Winkelmeyer
 
Continuous Delivery - Aber Sicher?!
Continuous Delivery - Aber Sicher?!Continuous Delivery - Aber Sicher?!
Continuous Delivery - Aber Sicher?!
Jan Dittberner
 
Entwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, PuppetEntwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, Puppet
inovex GmbH
 
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)
Wiest Simon
 
systemd & Docker
systemd & Dockersystemd & Docker
systemd & Docker
Thorsten Höger
 
Deploy Magento Shops with Capistrano v3
Deploy Magento Shops with Capistrano  v3Deploy Magento Shops with Capistrano  v3
Deploy Magento Shops with Capistrano v3
Roman Hutterer
 
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)
Wiest Simon
 
Entwicklungsprozess und Arbeit mit Symfony2 in der fotocommunity GmbH
Entwicklungsprozess und Arbeit mit Symfony2 in der fotocommunity GmbHEntwicklungsprozess und Arbeit mit Symfony2 in der fotocommunity GmbH
Entwicklungsprozess und Arbeit mit Symfony2 in der fotocommunity GmbH
stijink
 
Docker for Windows / Windows Container
Docker for Windows / Windows ContainerDocker for Windows / Windows Container
Docker for Windows / Windows Container
Thomas Wilhelm Wiefel
 
Test-Driven-Development mit JUnit 4
Test-Driven-Development mit JUnit 4Test-Driven-Development mit JUnit 4
Test-Driven-Development mit JUnit 4
Jörn Dinkla
 

Was ist angesagt? (20)

Ant im Detail
Ant im DetailAnt im Detail
Ant im Detail
 
BED-Con - Tools für den täglichen Kampf als Entwickler
BED-Con - Tools für den täglichen Kampf als EntwicklerBED-Con - Tools für den täglichen Kampf als Entwickler
BED-Con - Tools für den täglichen Kampf als Entwickler
 
Flexibilitaet mit CDI und Apache DeltaSpike
Flexibilitaet mit CDI und Apache DeltaSpikeFlexibilitaet mit CDI und Apache DeltaSpike
Flexibilitaet mit CDI und Apache DeltaSpike
 
Perl Renaissance Reloaded
Perl Renaissance ReloadedPerl Renaissance Reloaded
Perl Renaissance Reloaded
 
Continuous Delivery
Continuous DeliveryContinuous Delivery
Continuous Delivery
 
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
 
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"
 
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...
 
Jenkins Acceleration
Jenkins AccelerationJenkins Acceleration
Jenkins Acceleration
 
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
 
EntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloadedEntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloaded
 
Continuous Delivery - Aber Sicher?!
Continuous Delivery - Aber Sicher?!Continuous Delivery - Aber Sicher?!
Continuous Delivery - Aber Sicher?!
 
Entwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, PuppetEntwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, Puppet
 
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)
 
systemd & Docker
systemd & Dockersystemd & Docker
systemd & Docker
 
Deploy Magento Shops with Capistrano v3
Deploy Magento Shops with Capistrano  v3Deploy Magento Shops with Capistrano  v3
Deploy Magento Shops with Capistrano v3
 
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)
 
Entwicklungsprozess und Arbeit mit Symfony2 in der fotocommunity GmbH
Entwicklungsprozess und Arbeit mit Symfony2 in der fotocommunity GmbHEntwicklungsprozess und Arbeit mit Symfony2 in der fotocommunity GmbH
Entwicklungsprozess und Arbeit mit Symfony2 in der fotocommunity GmbH
 
Docker for Windows / Windows Container
Docker for Windows / Windows ContainerDocker for Windows / Windows Container
Docker for Windows / Windows Container
 
Test-Driven-Development mit JUnit 4
Test-Driven-Development mit JUnit 4Test-Driven-Development mit JUnit 4
Test-Driven-Development mit JUnit 4
 

Andere mochten auch

Cc. nn. 6to año
Cc. nn. 6to añoCc. nn. 6to año
Cc. nn. 6to año
Martha Ponce
 
Instalacion y desinstalacion de paquetes en Linex
Instalacion y desinstalacion de paquetes en LinexInstalacion y desinstalacion de paquetes en Linex
Instalacion y desinstalacion de paquetes en Linex
zinihorio01
 
Anleitung zum KStA Digital Abo
Anleitung zum KStA Digital AboAnleitung zum KStA Digital Abo
Anleitung zum KStA Digital Abodumontnet
 
Schulungsunterlagen Verlage: Teilkataloge
Schulungsunterlagen Verlage: Teilkataloge Schulungsunterlagen Verlage: Teilkataloge
Schulungsunterlagen Verlage: Teilkataloge
edelweiss_Deutschland
 
Biblia traduccion(1569), biblia del oso, por casiodoro de reina
Biblia traduccion(1569), biblia del oso, por casiodoro de reinaBiblia traduccion(1569), biblia del oso, por casiodoro de reina
Biblia traduccion(1569), biblia del oso, por casiodoro de reina
Jose Alonso Garcia Carmona
 
Factores de influencia en el diseño gráfico
Factores de influencia en el diseño gráficoFactores de influencia en el diseño gráfico
Factores de influencia en el diseño gráfico
Karolina Camino
 
9 1 aud. lino de la o shirley, morales muñoz cynthia
9 1 aud. lino de la o shirley, morales muñoz cynthia9 1 aud. lino de la o shirley, morales muñoz cynthia
9 1 aud. lino de la o shirley, morales muñoz cynthiaShirley Lino
 
Sistema operativo
Sistema operativoSistema operativo
Sistema operativo
Marlo Daniel Sañay Moina
 
Internetnutzung - Funkanalyse Bayern 2013
Internetnutzung - Funkanalyse Bayern 2013Internetnutzung - Funkanalyse Bayern 2013
Internetnutzung - Funkanalyse Bayern 2013
Bayerische Landeszentrale für neue Medien (BLM)
 
PASCUAS
PASCUASPASCUAS
PASCUAS
guestd659a7
 
Identificar los elementos de la ventana principal cpgm
Identificar los elementos de la ventana principal cpgmIdentificar los elementos de la ventana principal cpgm
Identificar los elementos de la ventana principal cpgm
Cindy Gonzalez
 
Effizente Entwicklung für verteilte Projekte
Effizente Entwicklung für verteilte ProjekteEffizente Entwicklung für verteilte Projekte
Effizente Entwicklung für verteilte Projekte
Thorsten Kamann
 
Completento que Integran a PLE
Completento que Integran a PLECompletento que Integran a PLE
Completento que Integran a PLE
Lisset Cadima Reyes
 
Proyecto final N.I
Proyecto final N.IProyecto final N.I
Proyecto final N.I
Tonelo09
 
14
1414
Encadenar interpolaciones practica 6
Encadenar interpolaciones practica 6Encadenar interpolaciones practica 6
Encadenar interpolaciones practica 6
Cindy Gonzalez
 
SQL Server Monitoring - Piloten fliegen auch nicht blind
SQL Server Monitoring - Piloten fliegen auch nicht blindSQL Server Monitoring - Piloten fliegen auch nicht blind
SQL Server Monitoring - Piloten fliegen auch nicht blind
Andre Essing
 
Stands nuevo 2012
Stands nuevo 2012Stands nuevo 2012
Stands nuevo 2012
local publicidad
 

Andere mochten auch (20)

Adrenalin Cup Sölden
Adrenalin Cup SöldenAdrenalin Cup Sölden
Adrenalin Cup Sölden
 
Cc. nn. 6to año
Cc. nn. 6to añoCc. nn. 6to año
Cc. nn. 6to año
 
Instalacion y desinstalacion de paquetes en Linex
Instalacion y desinstalacion de paquetes en LinexInstalacion y desinstalacion de paquetes en Linex
Instalacion y desinstalacion de paquetes en Linex
 
Anleitung zum KStA Digital Abo
Anleitung zum KStA Digital AboAnleitung zum KStA Digital Abo
Anleitung zum KStA Digital Abo
 
Schulungsunterlagen Verlage: Teilkataloge
Schulungsunterlagen Verlage: Teilkataloge Schulungsunterlagen Verlage: Teilkataloge
Schulungsunterlagen Verlage: Teilkataloge
 
Biblia traduccion(1569), biblia del oso, por casiodoro de reina
Biblia traduccion(1569), biblia del oso, por casiodoro de reinaBiblia traduccion(1569), biblia del oso, por casiodoro de reina
Biblia traduccion(1569), biblia del oso, por casiodoro de reina
 
Factores de influencia en el diseño gráfico
Factores de influencia en el diseño gráficoFactores de influencia en el diseño gráfico
Factores de influencia en el diseño gráfico
 
9 1 aud. lino de la o shirley, morales muñoz cynthia
9 1 aud. lino de la o shirley, morales muñoz cynthia9 1 aud. lino de la o shirley, morales muñoz cynthia
9 1 aud. lino de la o shirley, morales muñoz cynthia
 
Sistema operativo
Sistema operativoSistema operativo
Sistema operativo
 
Internetnutzung - Funkanalyse Bayern 2013
Internetnutzung - Funkanalyse Bayern 2013Internetnutzung - Funkanalyse Bayern 2013
Internetnutzung - Funkanalyse Bayern 2013
 
PASCUAS
PASCUASPASCUAS
PASCUAS
 
Identificar los elementos de la ventana principal cpgm
Identificar los elementos de la ventana principal cpgmIdentificar los elementos de la ventana principal cpgm
Identificar los elementos de la ventana principal cpgm
 
Effizente Entwicklung für verteilte Projekte
Effizente Entwicklung für verteilte ProjekteEffizente Entwicklung für verteilte Projekte
Effizente Entwicklung für verteilte Projekte
 
Completento que Integran a PLE
Completento que Integran a PLECompletento que Integran a PLE
Completento que Integran a PLE
 
Proyecto final N.I
Proyecto final N.IProyecto final N.I
Proyecto final N.I
 
14
1414
14
 
Encadenar interpolaciones practica 6
Encadenar interpolaciones practica 6Encadenar interpolaciones practica 6
Encadenar interpolaciones practica 6
 
SQL Server Monitoring - Piloten fliegen auch nicht blind
SQL Server Monitoring - Piloten fliegen auch nicht blindSQL Server Monitoring - Piloten fliegen auch nicht blind
SQL Server Monitoring - Piloten fliegen auch nicht blind
 
Jhonuft
JhonuftJhonuft
Jhonuft
 
Stands nuevo 2012
Stands nuevo 2012Stands nuevo 2012
Stands nuevo 2012
 

Ähnlich wie Maven2 - Die nächste Generation des Buildmanagements?

Desktop Containers 12: Next Generation of ZENworks Application Virtualization
Desktop Containers 12: Next Generation of ZENworks Application VirtualizationDesktop Containers 12: Next Generation of ZENworks Application Virtualization
Desktop Containers 12: Next Generation of ZENworks Application Virtualization
GWAVA
 
Ü̈ber Ant und Maven zu SBT und Gradle
Ü̈ber Ant und Maven zu SBT und GradleÜ̈ber Ant und Maven zu SBT und Gradle
Ü̈ber Ant und Maven zu SBT und Gradle
adesso AG
 
Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)
Joachim Baumann
 
Vortragsreihe Dortmund: Unified Development Environments
Vortragsreihe Dortmund: Unified Development EnvironmentsVortragsreihe Dortmund: Unified Development Environments
Vortragsreihe Dortmund: Unified Development Environments
Thorsten Kamann
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrants0enke
 
BASTA Spring 2016 - Moderne Versionsverwaltung mit Git, und der neue Build-Se...
BASTA Spring 2016 - Moderne Versionsverwaltung mit Git, und der neue Build-Se...BASTA Spring 2016 - Moderne Versionsverwaltung mit Git, und der neue Build-Se...
BASTA Spring 2016 - Moderne Versionsverwaltung mit Git, und der neue Build-Se...
Marc Müller
 
DevOps der Triple-E Klasse - Eclipse DemoCamp
DevOps der Triple-E Klasse - Eclipse DemoCampDevOps der Triple-E Klasse - Eclipse DemoCamp
DevOps der Triple-E Klasse - Eclipse DemoCamp
Werner Keil
 
Spring 2.0
Spring 2.0Spring 2.0
Spring 2.0
Thorsten Kamann
 
JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013Oliver Zeigermann
 
Boost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with DockerBoost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with Docker
Steven Grzbielok
 
2005 - NRW Conf: Design, Entwicklung und Tests
2005 - NRW Conf: Design, Entwicklung und Tests2005 - NRW Conf: Design, Entwicklung und Tests
2005 - NRW Conf: Design, Entwicklung und Tests
Daniel Fisher
 
30. Treffen der .NET User Group Rhein-Neckar mit Constantin Klein - „Bekommen...
30. Treffen der .NET User Group Rhein-Neckar mit Constantin Klein - „Bekommen...30. Treffen der .NET User Group Rhein-Neckar mit Constantin Klein - „Bekommen...
30. Treffen der .NET User Group Rhein-Neckar mit Constantin Klein - „Bekommen...
.NET User Group Rhein-Neckar
 
SNoUG 2015 - Vaadin - XPages 2.0?
SNoUG 2015 - Vaadin - XPages 2.0?SNoUG 2015 - Vaadin - XPages 2.0?
SNoUG 2015 - Vaadin - XPages 2.0?
René Winkelmeyer
 
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...
Marc Müller
 
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbHDocker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
agilemethoden
 
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
dzuvic
 
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer InfrastrukturContinuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
QAware GmbH
 
Robuste Design Systems mit Storybook und Angular: vom Konzept zur lebendigen ...
Robuste Design Systems mit Storybook und Angular: vom Konzept zur lebendigen ...Robuste Design Systems mit Storybook und Angular: vom Konzept zur lebendigen ...
Robuste Design Systems mit Storybook und Angular: vom Konzept zur lebendigen ...
Andreas Wissel
 
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
Christian Mücke
 
Portale 2.0 mit Liferay
Portale 2.0 mit LiferayPortale 2.0 mit Liferay
Portale 2.0 mit Liferay
inovex GmbH
 

Ähnlich wie Maven2 - Die nächste Generation des Buildmanagements? (20)

Desktop Containers 12: Next Generation of ZENworks Application Virtualization
Desktop Containers 12: Next Generation of ZENworks Application VirtualizationDesktop Containers 12: Next Generation of ZENworks Application Virtualization
Desktop Containers 12: Next Generation of ZENworks Application Virtualization
 
Ü̈ber Ant und Maven zu SBT und Gradle
Ü̈ber Ant und Maven zu SBT und GradleÜ̈ber Ant und Maven zu SBT und Gradle
Ü̈ber Ant und Maven zu SBT und Gradle
 
Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)
 
Vortragsreihe Dortmund: Unified Development Environments
Vortragsreihe Dortmund: Unified Development EnvironmentsVortragsreihe Dortmund: Unified Development Environments
Vortragsreihe Dortmund: Unified Development Environments
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrant
 
BASTA Spring 2016 - Moderne Versionsverwaltung mit Git, und der neue Build-Se...
BASTA Spring 2016 - Moderne Versionsverwaltung mit Git, und der neue Build-Se...BASTA Spring 2016 - Moderne Versionsverwaltung mit Git, und der neue Build-Se...
BASTA Spring 2016 - Moderne Versionsverwaltung mit Git, und der neue Build-Se...
 
DevOps der Triple-E Klasse - Eclipse DemoCamp
DevOps der Triple-E Klasse - Eclipse DemoCampDevOps der Triple-E Klasse - Eclipse DemoCamp
DevOps der Triple-E Klasse - Eclipse DemoCamp
 
Spring 2.0
Spring 2.0Spring 2.0
Spring 2.0
 
JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013
 
Boost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with DockerBoost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with Docker
 
2005 - NRW Conf: Design, Entwicklung und Tests
2005 - NRW Conf: Design, Entwicklung und Tests2005 - NRW Conf: Design, Entwicklung und Tests
2005 - NRW Conf: Design, Entwicklung und Tests
 
30. Treffen der .NET User Group Rhein-Neckar mit Constantin Klein - „Bekommen...
30. Treffen der .NET User Group Rhein-Neckar mit Constantin Klein - „Bekommen...30. Treffen der .NET User Group Rhein-Neckar mit Constantin Klein - „Bekommen...
30. Treffen der .NET User Group Rhein-Neckar mit Constantin Klein - „Bekommen...
 
SNoUG 2015 - Vaadin - XPages 2.0?
SNoUG 2015 - Vaadin - XPages 2.0?SNoUG 2015 - Vaadin - XPages 2.0?
SNoUG 2015 - Vaadin - XPages 2.0?
 
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...
 
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbHDocker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
 
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
 
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer InfrastrukturContinuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
 
Robuste Design Systems mit Storybook und Angular: vom Konzept zur lebendigen ...
Robuste Design Systems mit Storybook und Angular: vom Konzept zur lebendigen ...Robuste Design Systems mit Storybook und Angular: vom Konzept zur lebendigen ...
Robuste Design Systems mit Storybook und Angular: vom Konzept zur lebendigen ...
 
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
 
Portale 2.0 mit Liferay
Portale 2.0 mit LiferayPortale 2.0 mit Liferay
Portale 2.0 mit Liferay
 

Mehr von Thorsten Kamann

Scrum on rails
Scrum on railsScrum on rails
Scrum on rails
Thorsten Kamann
 
Scrum and distributed teams
Scrum and distributed teamsScrum and distributed teams
Scrum and distributed teams
Thorsten Kamann
 
Spring 3 - Der dritte Frühling
Spring 3 - Der dritte FrühlingSpring 3 - Der dritte Frühling
Spring 3 - Der dritte Frühling
Thorsten Kamann
 
Spring 3 - An Introduction
Spring 3 - An IntroductionSpring 3 - An Introduction
Spring 3 - An Introduction
Thorsten Kamann
 
Webtests Reloaded - Webtest with Selenium, TestNG, Groovy and Maven
Webtests Reloaded - Webtest with Selenium, TestNG, Groovy and MavenWebtests Reloaded - Webtest with Selenium, TestNG, Groovy and Maven
Webtests Reloaded - Webtest with Selenium, TestNG, Groovy and Maven
Thorsten Kamann
 
My Daily Spring - Best Practices with the Springframework
My Daily Spring - Best Practices with the SpringframeworkMy Daily Spring - Best Practices with the Springframework
My Daily Spring - Best Practices with the Springframework
Thorsten Kamann
 
Leichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
Leichtgewichtige Architekturen mit Spring, JPA, Maven und GroovyLeichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
Leichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
Thorsten Kamann
 
Let’s groove with Groovy
Let’s groove with GroovyLet’s groove with Groovy
Let’s groove with Groovy
Thorsten Kamann
 
Groovy - Rocks or Not?
Groovy - Rocks or Not?Groovy - Rocks or Not?
Groovy - Rocks or Not?
Thorsten Kamann
 
Spring 2.0
Spring 2.0Spring 2.0
Spring 2.0
Thorsten Kamann
 
Leichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
Leichtgewichtige Architekturen mit Spring, JPA, Maven und GroovyLeichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
Leichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
Thorsten Kamann
 

Mehr von Thorsten Kamann (11)

Scrum on rails
Scrum on railsScrum on rails
Scrum on rails
 
Scrum and distributed teams
Scrum and distributed teamsScrum and distributed teams
Scrum and distributed teams
 
Spring 3 - Der dritte Frühling
Spring 3 - Der dritte FrühlingSpring 3 - Der dritte Frühling
Spring 3 - Der dritte Frühling
 
Spring 3 - An Introduction
Spring 3 - An IntroductionSpring 3 - An Introduction
Spring 3 - An Introduction
 
Webtests Reloaded - Webtest with Selenium, TestNG, Groovy and Maven
Webtests Reloaded - Webtest with Selenium, TestNG, Groovy and MavenWebtests Reloaded - Webtest with Selenium, TestNG, Groovy and Maven
Webtests Reloaded - Webtest with Selenium, TestNG, Groovy and Maven
 
My Daily Spring - Best Practices with the Springframework
My Daily Spring - Best Practices with the SpringframeworkMy Daily Spring - Best Practices with the Springframework
My Daily Spring - Best Practices with the Springframework
 
Leichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
Leichtgewichtige Architekturen mit Spring, JPA, Maven und GroovyLeichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
Leichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
 
Let’s groove with Groovy
Let’s groove with GroovyLet’s groove with Groovy
Let’s groove with Groovy
 
Groovy - Rocks or Not?
Groovy - Rocks or Not?Groovy - Rocks or Not?
Groovy - Rocks or Not?
 
Spring 2.0
Spring 2.0Spring 2.0
Spring 2.0
 
Leichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
Leichtgewichtige Architekturen mit Spring, JPA, Maven und GroovyLeichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
Leichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
 

Maven2 - Die nächste Generation des Buildmanagements?

  • 1. Die nächste Generation des Build-Managements? Copyright 2006 Thorsten Kamann 1 itemis products & solutions GmbH & Co. KG
  • 2. Inhalt  Problematik Buildmanagement  Verfügbare Build-Tools  Shellskripte, Make-Files, Ant, Maven  Unterschiede und Gemeinsamkeiten von Ant und Maven  Die Konzepte von Maven  Features von Maven  Lebenszyklen, Projektdeskriptor, Transitive Abhängigkeiten, Repositories, Plugins, Assemblies, Projektwebseite, Benutzereinstellungen  Integration in Eclipse und Netbeans  Erweiterungsmöglichkeiten von Maven  Archetypen, Plugins (Java und Ant), Wagon-Provider  Verwendung von Maven mit Ant  Links Copyright 2006 Thorsten Kamann 2 itemis products & solutions GmbH & Co. KG
  • 3. Problematik Buildmanagement  Warum brauche ich ein Build(management)-Tool?  Viele Aufgaben während des Entwicklungsprozesses bestehen aus vielen einzelnen Schritten  Die IDE kann nur für eine begrenzte Anzahl von Common-Tasks Support bieten  Für Continous Integration Systeme muss es möglich sein den Build-Vorgang automatisch durchzuführen  In einem Projekt wird häufig von Entwicklern mit unterschiedlichen IDE's und Systemkonfigurationen entwickelt Copyright 2006 Thorsten Kamann 3 itemis products & solutions GmbH & Co. KG
  • 4. Build-Tools  Eine Auswahl bekannter Build-Tools  Shell-, Batchskripte  Make-Files  Ant  Maven Copyright 2006 Thorsten Kamann 4 itemis products & solutions GmbH & Co. KG
  • 5. Build-Tools: Shell-, Batchskripte  Vorteil:  Systemnahes Skripting  Ideal für Quick-Hacks  Evtl. ausreichend für sehr kleine Teams auf einer bestimmten Plattform  Nachteile:  Keine Plattform-Neutralität, dh. für Linux und Win32-System müssen unterschiedliche Skripte erzeugt werden  Wartbarkeit ist sehr schlecht  Ufert oft in Skriptorgien aus Copyright 2006 Thorsten Kamann 5 itemis products & solutions GmbH & Co. KG
  • 6. Build-Tools: Make-Files  Vorteile:  Ideal für Projekte, die auf C basieren  Support von den entsprechenden IDE's  Viel Know-How im Internet verfügbar  Nachteile:  Sehr fehleranfällig  Mit Projektgrösse leidet auch die Wartbarkeit  Oftmals nicht Plattform-neutral  Für Projekte anderer Programmiersprachen nicht (oder nur schwerlich) zu verwenden Copyright 2006 Thorsten Kamann 6 itemis products & solutions GmbH & Co. KG
  • 7. Build-Tools: Ant  Vorteile:  Sehr einfach verwendbar, da XML-Syntax verwendet wird  Sehr guter Support von IDE's  Auch für grosse Projekte noch wartbar  Erweiterbar und auch für Aufgaben ausserhalb des Buildmanagements benutzbar  Nachteile:  Kein standardisiertes Vorgehen, d.h. jedes Projekt erfindet seinen Lifecycle neu  Bietet keine vorgefertigten Tools, die das Erstellen von immer wiederkehrenden Tasks überflüssig macht Copyright 2006 Thorsten Kamann 7 itemis products & solutions GmbH & Co. KG
  • 8. Build-Tools: Maven  Vorteile:  Build-Prozess wird konfiguriert, nicht „programmiert“  Leistungsfähiges Dependency-Management mittels Repositories  Definierter Projekt-Lifecycle  Sehr erweiterbar und anpassbar  Schnell und resourcenschonend  Deckt alle Facetten des Buildmanagement ab (z.B. Projektwebseite)  Nachteile:  Kein direkter Zugriff auf die einzelnen Tasks, wie z.B. bei Ant  Der Build-Prozess wird dadurch etwas abstrakter  Nicht für alle Tasks gibt es bereits Maven-Plugins Copyright 2006 Thorsten Kamann 8 itemis products & solutions GmbH & Co. KG
  • 9. Ant und Maven - Gemeinsamkeiten  Top-Level Projekt bei der Apache Software Foundation (ASF)  Java-basiert und garantiert so für eine hohe Modularität  Basiert auf einem XML-Format  Wird erfolgreich in vielen (OpenSource-)Projekten eingesetzt  Grosse Community und viel Know-How im Internet/Printmedien  Viele Drittanbieter bieten zusätzliche Komponenten und/oder Produkte Copyright 2006 Thorsten Kamann 9 itemis products & solutions GmbH & Co. KG
  • 10. Ant und Maven – Unterschiede  Ant  Maven  Kein Dependency-Management  Transitives Dependency- verfügbar Management ist zentraler Bestandteil  Jeder Teilaspekt des Build-  Viele Teilaspekte werden Out-Of- Prozess muss jedes Mal neu The-Box mitgeliefert erstellt werden (z.B. Javac, Unit)  Kein ähnliches Konzept verfügbar  Sämtliche Projektinformationen befinden sich an einer zentralen Stelle (pom.xml)  Kein ähnliches Konzept verfügbar  Sehr einfach komplett auf Domänen anpassbar  Geignet auch für Aufgaben  Ist darauf nicht ausgelegt ausserhalb von SW-Projekten Copyright 2006 Thorsten Kamann 10 itemis products & solutions GmbH & Co. KG
  • 11. Maven - Die Konzepte  Jedes Projekt erzeugt ein Artefakt  Artefakte bestehen aus einer Gruppen-ID (groupId), Artefakt-ID (artifactId) ( ( und einer Versionsnummer (version) (  Jedes Projekt hat nur einen Source- und einen Test-Baum  Dies kann durch bestimmte Aktionen (generate-Goal) erweitert werden (  Der Buildprozess ist in Lebenszyklen (lifecycle, phase) aufgeteilt (  Jeder Lebenszyklus kann ein oder mehrere Ziele (goals) haben (  Es müssen nur die Dinge konfiguriert werden, die vom Standard abweichen (SuperPOM)  Abhängigkeiten sollen zentral verwaltet werden und von mehreren Projekten verwendet werden können  Die Komplexität heutiger Buildskripte soll verringert werden und einem deskriptiven Format weichen Copyright 2006 Thorsten Kamann 11 itemis products & solutions GmbH & Co. KG
  • 12. Maven – Die Features  Einfaches und anpassbares Projektsetup  Projektstrukturen sind konsistent, neue Entwickler brauchen nur wenig Zeit, um sich einzuarbeiten  Transitives Dependency-Management  Bibliotheken können über verschiedene Projekte „geshared“ werden  Remote und lokale Repositories für die Verteilung von Projektartefakten  Die selben Metadaten werden für den Build-Prozess wie auch für zusätzliche Informationen wie z.B. die Projektwebsite und Dokumentation genutzt  Mit wenig Konfiguration können Quellcodeverwaltungen und Release- Management integriert werden  Flexible Plugin-Struktur  Support für Domänen-spezifische Strukturen Copyright 2006 Thorsten Kamann 12 itemis products & solutions GmbH & Co. KG
  • 13. Maven - Features: Lebenszyklen eines Projekts  Lebenszyklen sind eines der zentralen Konzepte von Maven  Die meist gebräuchlichsten Lebenszyklen eines Projekts sind:  validate – validiert das Projekt, ob alle Resourcen verfügbar sind  compile – Kompiliert den Quellcode  test – Führt die Unit-Tests aus  package – Erstellt das Projekt-Artefakt, z.B. ein JAR  integration-test – Führt Tests in der Zielumgebung aus  verify – Überprüft die erstellten Pakete und führt evtl. vorhandene QS-Tests durch  install – Installiert das erstellte Artefakt in das lokale Repository  deploy – Installiert das erstellte Artefakt in ein entferntes (öffentliches) Repository Copyright 2006 Thorsten Kamann 13 itemis products & solutions GmbH & Co. KG
  • 14. Maven - Features: Lebenszyklen eines Projekts  Lebenszyklen sind hierarchisch aufgebaut, dh. beim Ausführen eines bestimmten Lebenszyklus werden alle vorherigen automatisch mit ausgeführt: mvn install führt also validate, compile, test, package, verify und install aus.  Plugins können mittels Annotations oder Konfiguration für einen bestimmten Lebenszyklus bereit gestellt werden (siehe auch „Erweiterung von Maven“) Copyright 2006 Thorsten Kamann 14 itemis products & solutions GmbH & Co. KG
  • 15. Maven – Features: Der Projektdeskriptor  Jedes Projekt hat mindestens 1 Projektdeskriptor „pom.xml“  Enthält die Projekt-Metadaten, z.B.:  Informationen des Artefakts, das dieses Projekt erzeugt  Informationen über die Entwickler (Name, Kontakt, Rollen)  SourceControl  Mailinglisten  Repositories  Plugin-Konfigurationen  Abhängigkeiten  Lizenzinformationen  Buildkonfiguration  Wird für das Deployment des Projektartifakts in ein Repository genutzt Copyright 2006 Thorsten Kamann 15 itemis products & solutions GmbH & Co. KG
  • 16. Maven – Features: Der Projektdeskriptor  Eine einfache pom.xml: <project> <modelVersion>4.0.0</modelVersion> <groupId>de.itemis.maven</groupId> <artifactId>maven-demo</artifactId> <version>1.0</version> </project>  Braucht das Projekt noch Abhängigkeiten reicht es diese mit in den Projektdeskriptor einzubinden: <dependencies> <dependency> <groupId>GROUPID</groupId> <artifactId>ARTIFACTID</artifactId> <version>VERSION</version> </dependency> </dependencies> Copyright 2006 Thorsten Kamann 16 itemis products & solutions GmbH & Co. KG
  • 17. Maven – Features: Der Projektdeskriptor  Braucht das Projekt ein zusätzliches Plugin lässt sich das ebenfalls sehr leicht einbinden: <build> <plugins> <plugin> <groupId>PLUGIN_GROUPID</groupId> <artifactId>PLUGIN_ARTIFACTID</artifactId> <version>PLUGIN_VERSION</version>< [<configuration/>] <plugin> </plugins> </build> Copyright 2006 Thorsten Kamann 17 itemis products & solutions GmbH & Co. KG
  • 18. Maven – Features: Transitive Abhängigkeiten  Eines der Hauptfeatures sind die transitiven Abhängigkeiten, dh. jede Abhängigkeit kann ihre eigenen Abhängigkeiten mitliefern. In dem Beispiel würde der Projektdeskriptor nur eine Abhängigkeit auf „Library A“ definieren. Alle anderen Bibliotheken würden automatisch aufgelöst und würden dem Projekt zur Verfügung stehen. Copyright 2006 Thorsten Kamann 18 itemis products & solutions GmbH & Co. KG
  • 19. Maven – Features: Transitive Abhängigkeiten  Dieses Feature kann nicht deaktiviert werden. Wenn man vermeiden will, dass abhängige Bibliotheken aufgelöst werden, kann man dies mit dem <exclusions>- Tag erreichen: <dependency> [...] <exclusions> <exclusion> <groupId>EXCLUSION_GROUPID</groupId> <artifactId>EXCLUSION_ARTIFACTID</artifactId> </exclusion> </exclusions> </dependency> Copyright 2006 Thorsten Kamann 19 itemis products & solutions GmbH & Co. KG
  • 20. Maven – Features: Transitive Abhängigkeiten  Da ein Projekt aus bestimmten Lebenszyklen besteht (compile, test, packaging...) gibt es auch verschiedene Classpaths.  Während der unterschiedlichen Lebenszyklen eines Projekts werden auch nur unterschiedliche Abhängigkeiten gebraucht (z.B. jUnit nur während des Tests).  Jeder Abhängigkeit kann deswegen ein Scope übergeben werden: <dependency> <groupId>GROUPID</groupId> <artifactId>ARTIFACTID</artifactId> <version>VERSION</version> <scope>SCOPE</scope> </dependency>  Die Auflösung des Scopes übernimmt Maven eigenständig und ist mit den Lebenszyklen fest verdrahtet. Copyright 2006 Thorsten Kamann 20 itemis products & solutions GmbH & Co. KG
  • 21. Maven – Features: Transitive Abhängigkeiten  Der Scope kann die folgenden Werte haben:  compile – (standard). Abhängigkeiten in diesem Scope werden immer aufgelöst  provided – Abhängigkeiten dieses Scopes sind nicht transitiv und werden gewöhnlich von dem JRE oder einem Container bereitgestellt  runtime – Abhängigkeiten mit diesem Scope werden nur zur Laufzeit gebraucht, sind also nur während des Testing und der Laufzeit verfügbar  test – Abhängigkeiten, die für das Testing verwendet werden. Ein klassisches Beispiel dafür ist die Abhängigkeit zur junit.jar  system – Ähnlich wie der „provided“ Scope. Abhängigkeiten mit diesem Scope werden nicht im Repository gesucht, sondern müssen vom Entwickler manuell dem Projekt hinzugefügt werden. Copyright 2006 Thorsten Kamann 21 itemis products & solutions GmbH & Co. KG
  • 22. Maven – Features: Transitive Abhängigkeiten Lifecycle/Scope Compile Provided Runtime System Test Compile      Runtime      Test      Tabelle 1: Übersicht Lifecycle <==> Scope Copyright 2006 Thorsten Kamann 22 itemis products & solutions GmbH & Co. KG
  • 23. Maven – Features: Repositories  Repositories sind Aufbewahrungsorte für Projektartefakte  Unterteilen sich in lokale und entfernte (remote) Repositories  Das lokale Repository ist üblicherweise unter ${user.home}/.m2/repository zu finden  Bekannte Remote-Repositories sind:  http://www.ibiblio.org/maven2/  http://snapshots.maven.codehaus.org/maven2/  Das Maven-Goal „install“ kopiert das Projekt-Artefakt in das lokale Repository, wohingegen „deploy“ in das entfernte Repository kopiert.  Das entfernte Repository muss schreibbar sein (FTP, SSH), während zum Auflösen der Abhängigkeiten ein normaler HTTP-Zugriff reicht Copyright 2006 Thorsten Kamann 23 itemis products & solutions GmbH & Co. KG
  • 24. Maven – Features: Repositories  Ein Repository hat eine definierte Verzeichnisstruktur, damit das Auffinden von Artefakten und bestimmten Versionen standardisiert ist  Innerhalb der Repositories werden die verschiedenen Projektartefakte nach diesem Konzept abgelegt: GROUPID/ARTIFACTID/VERSION/ARTIFACT-VERSION.jar GROUPID/ARTIFACTID/VERSION/ARTIFACT-VERSION.pom Die Punkte in GROUPID wird durch file.separator ersetzt. Aus <dependency> <groupId>de.itemis.maven</groupId> <artifactId>maven-demo</artifactId> <version>1.0.2</version> </dependency> wird de/itemis/maven/maven-demo/1.0.2/maven-demo-1.0.2.jar de/itemis/maven/maven-demo/1.0.2/maven-demo-1.0.2.pom Copyright 2006 Thorsten Kamann 24 itemis products & solutions GmbH & Co. KG
  • 25. Maven – Features: Plugins  Jegliche Funktionalität von Maven wird von Plugins gekapselt  Plugins werden in der pom.xml aktiviert und konfiguriert: <build> <plugins> <plugin> <groupId>PLUGIN_GROUPID</groupId> <artifactId>PLUGIN_ARTIFACTID</artifactId> <version>PLUGIN_VERSION</version>< [<configuration/>] <plugin> </plugins> </build>  Plugins können aus herkömmlichem Java-Code oder aus Ant-Skripten bestehen  Es gibt eine Vielzahl an Plugins auf den Webseiten von Maven und Codehaus  Diese Plugins sind ähnlich gut dokumentiert wie die Ant-Tasks Copyright 2006 Thorsten Kamann 25 itemis products & solutions GmbH & Co. KG
  • 26. Maven – Features: Assemblies  Assemblies sind Konfigurationen, um Distributionen zu erstellen  Distributionen werden in einer eigenen XML-Datei konfiguriert und über mvn assembly:assembly aufgerufen: <assembly> <id>bin</id> <formats> <format>tar.gz</format> <format>zip</format> </formats> <fileSets> <fileSet> <includes><include>README*</include></includes> </fileSet> <fileSet> <directory>target</directory> <outputDirectory></outputDirectory> <includes><include>*.jar</include></includes> </fileSet> </fileSets> </assembly> Copyright 2006 Thorsten Kamann 26 itemis products & solutions GmbH & Co. KG
  • 27. Maven – Features: Projektwebseite  Maven kann anhand der Metadaten in der pom.xml eine Projektwebseite erstellen  Diese Seite wird auf Basis von Cocoon/Forrest erstellt, 2 recht ausgereifte XML- Frameworks  Jeder Teil dieser Projektwebseite ist anpassbar  Als Eingabeformat wird XML, APT (Almost Plain Text – ein Wiki-ähnliches Format) und FML (für FAQ-Seiten) unterstützt  Als Ausgabeformat unterstützt Maven aktuell nur xHTML. PDF ist aber geplant.  Unterstützung für Internationalisierung der Webseite ist auch integriert  Dadurch, dass die Metadaten der pom.xml genutzt werden, entfällt die Pflege organisatorischer Daten (wechselnde Entwickler, Änderungen bei Mailinglisten, usw.) Copyright 2006 Thorsten Kamann 27 itemis products & solutions GmbH & Co. KG
  • 28. Maven – Features: Projektwebseite  Wenn nur die Metadaten der pom.xml verwendet werden enthält die generierte Webseite folgende Menüpunkte:  Report über die verwendeten Abhängigkeiten  Mailinglisten  Continous Integration  Quellcodeverwaltung  Bugtracking  Projektteam  Lizenz Copyright 2006 Thorsten Kamann 28 itemis products & solutions GmbH & Co. KG
  • 29. Maven – Features: Projektwebseite  Auch das Deployment der generierten Webseite übernimmt Ant  In der pom.xml muss konfiguriert werden wohin die Seite hin deployed werden soll: <distributionManagement> <site> <id>website</id> <url>scp://myserver/home/htdocs</url> </site> </distributionManagement> Der Zugang zu dem Server wird in der settings.xml konfiguriert  Ein einfaches mvn site-deploy lädt die Seite dann auf den Server Copyright 2006 Thorsten Kamann 29 itemis products & solutions GmbH & Co. KG
  • 30. Maven - Features: Benutzereinstellungen  Maven kann sowohl globale Einstellungen als auch Benutzereinstellungen haben  Die Syntax ist in beiden Fällen gleich  Die Benutzereinstellungen befinden sich unter ${user.home}/.m2/settings.xml  Die globalen Einstellungen sind unter ${m2.home}/conf/settings.xml zu finden  U.a. können in den Einstellungen folgende Dinge konfiguriert werden:  Repositories (lokale und entfernte)  Mirrors für entfernte Repositories  Zugangsberechtigungen  Proxyeinstellungen  Profile  PluginGroups Copyright 2006 Thorsten Kamann 30 itemis products & solutions GmbH & Co. KG
  • 31. Maven – Integration in Eclipse  Es gibt bereits ein Plugin für Eclipse  Mit ihm ist es möglich einfach Abhängigkeiten zu suchen und dem Projekt hinzuzufügen, wobei die eigentlichen Bibliotheken aus dem lokalen Repository gelinkt und nicht ins Projekt kopiert werden  Über „External Launcher“ können die verschiedenen Lifecycles/Goals gestartet werden  Der verwendete Maven-Embedder bietet nicht die Leistungsfähigkeit wie das Maven-CLI  Es ist problemlos möglich Maven-CLI als external Launcher zu konfigurieren und evtl. ist das auch eine sinnvolle Alternative, um im Plugin implementiert zu werden Copyright 2006 Thorsten Kamann 31 itemis products & solutions GmbH & Co. KG
  • 32. Maven – Integration in Netbeans  Auch für Netbeans gibt es ein Modul, welches Maven in die IDE integriert  Es bietet ein ähnliches Leistungsspektrum wie das Plugin für Eclipse  Da auch hier der Maven-Embedder verwendet wird, gibt es ähnliche Einschränkungen wie bei Eclipse Copyright 2006 Thorsten Kamann 32 itemis products & solutions GmbH & Co. KG
  • 33. Maven - Erweiterungen  Maven kann an fast allen Stellen angepasst und erweitert werden  Domänen-spezifische Strukturen und Prozesse können nachgebildet werden  Initiale Projektstrukturen können durch eigene Archetypen bereit gestellt werden  Bestehende Ant-Targets für besondere Aufgaben können ohne weiteres mit dem Ant-Plugin oder einem eigenem Ant-basierten Plugin übernommen werden  Projekt-Artefakte können in besonders geschützte Repositories deployed werden  Für spezielle Protokolle oder höhere Sicherheit können spezielle Wagon- Provider implementiert werden Copyright 2006 Thorsten Kamann 33 itemis products & solutions GmbH & Co. KG
  • 34. Maven – Erweiterungen: Eigene Archetypen  Archetypen sind einfache Maven-Plugins  Mittels eines Deskriptors werden die Verzeichnisstrukturen und Dateien, die das Projekt initial haben soll, festgelegt  Dateien werden als Resource mitgegeben, wobei an der Stelle beliebige Platzhalter verwendet werden können, die dann bei der Erstellung des Projekts als Java-Properties mitgegeben werden können  Eine pom.xml für das neue Projekt kann schon mit den nötigen Konfigurationen mitgeliefert werden (Dependencies, Projekttyp, Repositories)  Ein mvn archetype:create -DarchetypeGroupId=... -DarchetypeArtefactId=... -DarchetypeVersion=... [-Dproperty=...] reicht um das komplette Projekt zu erstellen Copyright 2006 Thorsten Kamann 34 itemis products & solutions GmbH & Co. KG
  • 35. Maven – Erweiterungen: Plugins (Java)  Plugins heissen bei Maven Mojo  Die Implementierung ist ähnlich einer ANT-Task  Das Mojo muss nur org.apache.maven.plugin.AbstractMojo erweitern und die Methode execute() überschreiben  Mit Annotations können für das Mojo u.a. der Lifecycle (@phase), das Goal ( (@goal) und eine Beschreibung (@description) gesetzt werden (  Für Parameter des Plugins gibt es die Annotation @parameter  Parameter können auf erforderlich (@required) und/oder schreibgeschützt ( (@readonly) gesetzt werden  Das fertige Plugin kann mittels mvn install bzw. mvn deploy in ein entsprechendes Repository installiert werden und kann dann direkt von anderen Projekten verwendet werden Copyright 2006 Thorsten Kamann 35 itemis products & solutions GmbH & Co. KG
  • 36. Maven – Erweiterungen: Plugins (Java) package sample.plugin; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; /** * @goal sayhi * @description Says quot;Hiquot; to the user / public class GreetingMojo extends AbstractMojo { /** * @parameter * @required */ private String greeting; public void execute() throws MojoExecutionException { getLog().info(greeting); } } Copyright 2006 Thorsten Kamann 36 itemis products & solutions GmbH & Co. KG
  • 37. Maven – Erweiterungen: Plugins (Java) <plugin> <groupId>sample.plugin</groupId> <artifactId>maven-hello-plugin</artifactId> <configuration> <greeting>Welcome</greeting> </configuration> <executions> <execution> <phase>compile</phase> <goals> <goal>sayhi</goal> </goals> </execution> </executions> </plugin> Copyright 2006 Thorsten Kamann 37 itemis products & solutions GmbH & Co. KG
  • 38. Maven – Erweiterungen: Plugins (Ant)  Maven bietet die Möglichkeit Plugins auf Basis von Ant-Skripten zu entwickeln  Dabei ist es nicht nötig Java zu programmieren  Das ist eine ideale Möglichkeit bestehende Ant-Tasks zu übernehmen die gar nicht oder nur mit sehr viel Aufwand nachimplementiert werden können  Die Konfiguration und Parameterisierung der Ant-Targets werden in den Plugin- Metadaten vorgenommen  Es können sämtliche Features eines Ant-Buildskripts verwendet werden  Ein Plugin kann mehrere Targets für unterschiedliche Goals enthalten Copyright 2006 Thorsten Kamann 38 itemis products & solutions GmbH & Co. KG
  • 39. Maven – Erweiterungen: Wagon-Provider  Maven bietet die Möglichkeit Projekt-Artefakte in jede Art von Repository zu schreiben  Um spezielle Repositories nutzen zu können, ist es notwendig einen eigenen Wagon-Provider bereitzustellen  Damit können Erfordernisse, wie z.B. CVS-Based Repositories oder spezielle Authentifizierung, abgedeckt werden  Der Wagon-Provider muss nur vom org.apache.maven.wagon.AbstractWagon erben  Es müssen nur die openConnection(), put() und get() Methoden überschrieben bzw. implementiert werden  Der Wagon-Provider kann dann als Extension in der entsprechenden pom.xml konfiguriert und verwendet werden Copyright 2006 Thorsten Kamann 39 itemis products & solutions GmbH & Co. KG
  • 40. Verwendung von Maven mit Ant  Einige Aspekte von Maven können in Ant als gewöhnliche Ant-Tasks verwendet werden  Abhängigkeiten können aufgelöst werden; auch das Feature Transitive Dependencies wird unterstützt  Projektartefakte können in Repositories deployed werden  Die Informationen der pom.xml können ausgelesen werden und stehen dann als Properties zur Verfügung  Sinnvoll ist es sämtliche Projektinformationen in der pom.xml zu halten, um solche Metadaten zentral pflegen zu können  Auch die Verzeichnisstruktur innerhalb eines Projekts könnte der von Maven nachempfunden werden  So ist es später kein Problem den Buildprozess auf Maven umzustellen und neue Teammitglieder finden sich sehr schnell zurecht Copyright 2006 Thorsten Kamann 40 itemis products & solutions GmbH & Co. KG
  • 41. Links  Maven Webseite http://maven.apache.org/  FAQs http://docs.codehaus.org/display/MAVENUSER/FAQs  MavenUSER http://docs.codehaus.org/display/MAVENUSER/Home  Eclipse-Plugin http://maven.apache.org/eclipse-plugin.html  Eclipse und Maven http://maven.apache.org/guides/mini/guide-ide-eclipse.html  Maven Referenzen (Javadocs, Schema,...) http://maven.apache.org/ref/current/index.html Copyright 2006 Thorsten Kamann 41 itemis products & solutions GmbH & Co. KG