ant maven

34
Ant & Maven Fabian Lange, codecentric GmbH

Upload: fabian-lange

Post on 13-May-2015

1.692 views

Category:

Technology


1 download

DESCRIPTION

When discussing about build systems, still Ant and Maven are the most prominent. This presentation is from a talk about characteristics of Ant and Maven, how they compare and if its worth migrating between both.Slides are in German, but IT topics tend to be understandable even by non native speakers.

TRANSCRIPT

Page 1: Ant Maven

Ant & MavenFabian Lange, codecentric GmbH

Page 2: Ant Maven

2 © 2009 codecentric GmbH Ant & Maven

Agenda

Page 3: Ant Maven

3 © 2009 codecentric GmbH Ant & Maven

Software bauen•Aus Code Artefakte machen

•kompilieren & paketieren

•Artefakte kombinieren•Anwendungen zusammenstellen

•Versionieren•Sowohl Code als auch Artefakte

Page 4: Ant Maven

4 © 2009 codecentric GmbH Ant & Maven

Möglichkeiten•Von Hand

•Kompliziert, fehleranfällig und unstrukturiert

•In der IDE•Fehleranfällig und unstrukturiert

•Mit Skripten•Unstrukturiert

•Mit Frameworks•Besser

Page 5: Ant Maven

5 © 2009 codecentric GmbH Ant & Maven

Frameworks•make

•pake, rake

•Ant•JAM, Ivy, Savant

•Schmant•Java 6 Scripting

•Maven•Verschiedene Plugins

Page 6: Ant Maven

6 © 2009 codecentric GmbH Ant & Maven

Agenda

Page 7: Ant Maven

7 © 2009 codecentric GmbH Ant & Maven

Ant•ant.apache.org

•Version 1.7 Dezember 2006•1.7.1 Juni 2008

•Ersatz für Skripte•Struktur in Form von XML

•Spezialisiert auf Java Builds

•Viele von Skripten bekannte Operationen

Page 8: Ant Maven

8 © 2009 codecentric GmbH Ant & Maven

Was Ant kann•„Relativ“ plattformunabhängige Skripte ausführen

•Entwickler müssen z.B. auf Pfade aufpassen

•Dateiverwaltung•Lesen und Schreiben von Dateien und Ordnern

•Java verstehen•Kompilieren und Ausführen, Testen und paketieren

Page 9: Ant Maven

9 © 2009 codecentric GmbH Ant & Maven

Was Ant nicht kann•Semantik erkennen oder verstehen

•Es operiert lediglich mit Dateien

•Arbeit abnehmen•Ant Tasks besitzen wenig Intelligenz

•Versionieren•Naja, etwas CVS geht schon

Page 10: Ant Maven

10 © 2009 codecentric GmbH Ant & Maven

Ant Konzepte•Buildbeschreibung in Form von XML

•Es ist möglich andere Dateien einzubinden

•„Project“ ist die oberste Ebene•Projekt ist aber eine willkürliche Bezeichnung

•„Target“ ist die wichtigste Einheit•Grundsätzlich für die Beschreibung eines Teilabschnittes zuständig

•„Task“ entspricht einem Kommandozeilenaufruf•Es gibt viele Built-in Tasks und noch mehr 3rd party

Page 11: Ant Maven

11 © 2009 codecentric GmbH Ant & Maven

build.xml•Ein Project pro Buildfile

•Properties werden aus Dateien und Umgebungsvariablen gelesen•Nützlich um Pfade an Entwicklungsumgebungen / BuildServer anzupassen

•Andere Buildfiles können importiert werden•Dort definierte Tasks und Targets werden nutzbar

Page 12: Ant Maven

12 © 2009 codecentric GmbH Ant & Maven

Ant Targets•Aus einem Project wird immer genau ein Target gestartet

•Standard mittels <project default=„compile“> definierbar

•Targets können voneinander abhängen•<target name=„test“ depends=„compile“>

•Keine Optimierung <target name=„all“ depends=„compile, test“>

•Targets können sich aufrufen•<antcall target=„test“>

•Flexibler, dafür undurchsichtiger als depends

Page 13: Ant Maven

13 © 2009 codecentric GmbH Ant & Maven

Ant Tasks•Erledigen eine spezielle Aufgabe

•Liste der wichtigsten Tasks http://ant.apache.org/manual/tasksoverview.html

•Sind umfangreich konfigurierbar•Erfordern typischerweise Include und Exclude Pfade

Page 14: Ant Maven

14 © 2009 codecentric GmbH Ant & Maven

Ant Eclipse Plugin•XML Editor mit Syntaxhighlighting und Codecompletion

•Taskbeschreibung leider oft unvollständig

Page 15: Ant Maven

15 © 2009 codecentric GmbH Ant & Maven

Ant Eclipse Plugin•Ausführung von Ant Builds mittels eigenem Dialog

•Entsprechend der Struktur gruppiert•Filtermöglichkeiten

•Umfangreiche Konfigurationsmöglichkeiten•Nachteil: Nur im Eclipse aktiv

Page 16: Ant Maven

16 © 2009 codecentric GmbH Ant & Maven

Agenda

Page 17: Ant Maven

17 © 2009 codecentric GmbH Ant & Maven

Maven•maven.apache.org

•Version 2.2 August 2009•2.0 Juni 2008, 2.1

•Abhängigkeitenmanagement•Inklusive Versionierung

•Convention over Configuration

•Erweiterbarkeit durch Plugins

Page 18: Ant Maven

18 © 2009 codecentric GmbH Ant & Maven

Was Maven kann•Abhängigkeiten verwalten

•Auch transitive Abhängigkeiten

•Java Artefakte zusammenstellen•Strenges Modell hilft Chaos zu vermeiden

•Auf einer Definition verschiedene Aktionen ausführen•Bauen, testen, versionieren etc.

Page 19: Ant Maven

19 © 2009 codecentric GmbH Ant & Maven

Was Maven nicht kann•Anpassung an existierenden Buildprozess

•Architekturprobleme ignorieren•Zyklische Abhängigkeiten, Modularisierungsprobleme, Trennung Code und Test

•Versionierung übernehmen•Konzept muss selbst erdacht werden•Viele nutzen intern SNAPSHOT

Page 20: Ant Maven

20 © 2009 codecentric GmbH Ant & Maven

Maven Konzepte•Beschreibung des Projektes/Moduls

•Project Object Model•Konfiguration wird von Super POM und Parent POM vererbt

•Zentrale Ablage für alle Abhängigkeiten•Repositories•Mehrstufig: lokal, zentral, öffentlich

•Plugins für zusätzliche Funktionalität•Klinken sich in Phasen ein

•Phasenmodell für unterschiedliche Ziele•(Lifecycle) – Phasen – Goals

Page 21: Ant Maven

21 © 2009 codecentric GmbH Ant & Maven

pom.xml•Grundstruktur

•Artefaktbeschreibung (Gruppe, ID, Version)•Abhängigkeiten•Spezielle Buildplugins/Konfigurationen

Page 22: Ant Maven

22 © 2009 codecentric GmbH Ant & Maven

Abhängigkeiten•Jedes POM deklariert seine Abhängigkeiten

•Abhängigkeiten von Abhängigkeiten werden automatisch aufgelöst•Transitive Abhängigkeiten können bei Bedarf ausgeschlossen werden

•Scopes begrenzen Abhängigkeiten auf Anwendungsfall•compile, provided, runtime, test•Typischerweise wird JUnit immer im Scope test verwendet

•In der Abhängigkeit wird auch die Version definiert•Leider oft eine konkrete Versionsnummer•Auch möglich <version>[3.8,4.0)</version>

Page 23: Ant Maven

23

• Lokales Repository• Auf dem Entwicklungsrechner

• Zentrales Repository• Proxy zur Netzverkehrreduktion

• Firmeninterne Artefakte

© 2009 codecentric GmbH Ant & Maven

Repositories

•Öffentliche Repositories•http://repo2.maven.org/maven2•http://repository.jboss.com/maven2

Page 24: Ant Maven

24 © 2009 codecentric GmbH Ant & Maven

Plugins•Konfiguration im POM

•Die Wichtigsten•Compiler – Führt Übersetzung durch, Java Version einstellbar•Surefire – Führt Tests aus, Includes und Excludes Einstellbar•Jar/War/Ear – Erstellen Pakte, Manifest / XML Dateien konfigurierbar•Javadoc – Erstellt Javadocs, Viele Anpassungen einstellbar•Eclipse – Erstellt Eclipse Konfiguration, WTP Version einstellbar•Ant – Für Migrationen oder Dateisystemoperationen

•Viele Mehr•Liste auf http://maven.apache.org/plugins/index.html

Page 25: Ant Maven

25 © 2009 codecentric GmbH Ant & Maven

Lifecycle•Vereinfachtes Default Beispiel

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

Phasen

• process-resources

• compile

• process-test-resources

• test-compile

• test

• package

• install

• deploy

Goals

• resources:resources

• compiler:compile

• resources:testResources

• compiler:testCompile

• surefire:test

• jar:jar

• install:install

• deploy:deploy

Page 26: Ant Maven

26 © 2009 codecentric GmbH Ant & Maven

Maven in Eclipse•M2Eclipse Plugin viel besser als früher

•http://m2eclipse.sonatype.org

•Stable Releases sind leider selten•DEV Version funktioniert gut•http://m2eclipse.sonatype.org/update-dev/

•Geht natürlich weiterhin auch von Hand•Wird aber häufiger vergessen

Page 27: Ant Maven

27 © 2009 codecentric GmbH Ant & Maven

M2Eclipse Plugin•Kontextmenü auf dem Projekt

•Die wichtigsten Optionen•Update Project Configuration

•Identisch zu mvn eclipse:eclipse

•Aktualisiert Eclipse Konfigurationsdateien

•Add Dependency / Plugin•Ermöglicht bequemes Suchen

•Open Dialoge•Falls im Projekt verwendet

Page 28: Ant Maven

28 © 2009 codecentric GmbH Ant & Maven

M2Eclipse Plugin

Page 29: Ant Maven

29 © 2009 codecentric GmbH Ant & Maven

M2Eclipse Plugin•Dependency Hierarchy ermöglicht Abhängigkeitsanalysen

•Woher kommt eine Abhängigkeit•Welche Version kommt am Ende raus

Page 30: Ant Maven

30 © 2009 codecentric GmbH Ant & Maven

Maven in Eclipse•Generation von Eclipse Konfiguration mit maven-eclipse-plugin

•mvn eclipse:clean eclipse:eclipse

•Generiert .classpath und .project

•Erwartet M2_REPO Variable im Eclipse•Kann mit mvn eclipse:add-maven-repo zum Workspace hinzugefügt werden

•Muss nach allen Änderungen erneut ausgeführt werden

•Tipp: Eclipse Konfigurationsdateien nicht einchecken

Page 31: Ant Maven

31 © 2009 codecentric GmbH Ant & Maven

Agenda

Page 32: Ant Maven

32 © 2009 codecentric GmbH Ant & Maven

Vergleich•Was ist besser?

•Nicht direkt vergleichbar

•Kann man migrieren?•Ja man kann•Ant Skripte können fast 1zu1 mittels maven-ant-plugin ausgeführt werden

•Soll man migrieren?•Nein… warum?•Oft nichttrivial•Selbst langfristig nur marginaler Nutzen

Page 33: Ant Maven

33 © 2009 codecentric GmbH Ant & Maven

Empfehlung: Maven•Maven bietet viele Vorteile

•Reduziert Versionskonflikte•Ermöglicht schnellen Einstieg in die Entwicklung•Ermöglicht Continuous Integration

•Maven ist Standard bei fast allen Open Source Lösungen•Problemlose Integration möglich

•Maven dokumentiert in POMs•Strukturen•Abhängigkeiten•Kompatibilitäten•Lizenzinformationen, Entwickler, SCM….

Page 34: Ant Maven

34 © 2009 codecentric GmbH Ant & Maven

Kontakt

codecentric GmbHMerscheider Str. 142699 Solingen

Telefon: 0212 / 233628 10E-Mail: [email protected]: www.codecentric.de

Fabian Lange

Senior IT Consultant

E-Mail: [email protected]