Buildmanagement Konstantin Domoratskyy
Alle Tätigkeiten, die man bereits zwei mal manuell durchgeführt hat, sollen automatisiert werden. Mike Clark 20.05.08 Konstantin Domoratskyy: Buildmanagement 2
Inhalt 1. Einführung 1.1. Build-Prozess 1.2. Dokumentation 2. Werkzeuge 2.1. Ant 2.2. Maven 3. Zusammenfassung 20.05.08 Konstantin Domoratskyy: Buildmanagement 3
1. Einführung Ziel: Produktivitätsteigerung Wichtige Aspekte: Wiederholbarkeit (bzgl. Schritte) Reproduzierbarkeit (bzgl. Produkt) Probleme: Einheitliche Richtlinien existieren nicht Falsche Organisation des Build-Prozesses behindert Entwicklungsprozess Falsche Werkzeuge schaffen neue Probleme 20.05.08 Konstantin Domoratskyy: Buildmanagement 4
Build-Prozess Prinzipielle Aufbau des Build-Prozesses 1. Quellelemente ermitteln 2. Produkt 1. aus Quellelemente den Quellelementen ermitteln erstellen 2. Produkt aus 3. den Produkt Quellelementen prüfen erstellen 4. Produkt ausliefern 5. Ergebnisse dokumentieren 20.05.08 Konstantin Domoratskyy: Buildmanagement 5
Varianten des Build-Prozesses 1. Entwickler-Build Ziel: Erstellung und Ausführung einer Testversion Durchführung: minimale Belastung für Entwickler 2. Integrations-Build Ziel: Gesamtänderungen zu überprüfen Durchführung: wie oft? 3. Release-Build Ziel: ein neues Release des Produktes Durchführung: Integrations-Build umdeklarieren 20.05.08 Konstantin Domoratskyy: Buildmanagement 6
Dokumentation Ziel:Verbesserung der Transparenz im PJ (z.b. Fortschrit des PJ, Qualität des Produktes etc.) Buildmanagement ermöglicht: Erstellung einer PJ-Homepage Erfassung von mehreren Produktmetriken (wie Größe, Komplexität, Antwortzeiten usw.) Konsequenz der Einführung von Metriken: Reduzierung SW-Komplexität auf wenige Zahlen Wichtig: Metriken sinnvoll einsetzen 20.05.08 Konstantin Domoratskyy: Buildmanagement 7
2. Werkzeuge Skripte - Basis jeder Automatisierung - Aufgaben sind in der Skriptsprache formuliert - Skriptausführung mit Interpreter (wie make, Ant, Maven usw. ) - Imperativer vs. deklarativer Ansatz (z.b. Ant vs. Maven) - Skriptspachen platform(un)abhängig Funktionsumfang: - Selektion der Quelldateien, Compileraufruf etc; - Inkrementelle Builds, Dependency management usw. 20.05.08 Konstantin Domoratskyy: Buildmanagement 8
Werkzeugauswahl? Propritäre Produkte: + Produktivitäts- u. Qualitätsvorteile - Teuer - Unflexibel - Schwierige Umsetzung für kleine u. mittlere Projekte Gewünscht: + Frei verfügbar und populär bei Entwickler + Leistungsfähig und flexibel + Unterstützung für PJ-Automatisierung => Ant und Maven 20.05.08 Konstantin Domoratskyy: Buildmanagement 9
2.1. Ant Build-Skript build.xml. Imperativer Ansatz: Beschreibung von Schritten mit ihrer Reihenfolge für Build-Prozess Liegt im aktuellen Arbeitsverzeichnis Ant selbst wird über das Skript ant.bat (bzw. unter Unix mit ant) gestartet 20.05.08 Konstantin Domoratskyy: Buildmanagement 10
Architektur Ant Projektverzeichnis Ant-Build-Skript build.xml Führt aus Offene Architektur Ant-Installationsverzeichnis %ANT_HOME% Ant-Startskript bin/ant.bat Startet JVM mit Ant Ant-Bibliotheken lib/ant-*.jar Externe Bibliotheken lib/*.jar Externe Bibliotheken %CLASSPATH%/*.jar (z.b. JUnit usw.) JDK >= V1.2 %JAVA_HOME% 20.05.08 Konstantin Domoratskyy: Buildmanagement 11
Funktionalität Ant Passt alle plattformspezifische Angaben in einem Build-Skript automatisch an Bietet inkrementelle Builds an => Build-Prozess schnell und bequem Erweiterung um eigene Befehle Verfügbarkeit für andere Sprachen (z.b. NAnt für.net-entwickler) 20.05.08 Konstantin Domoratskyy: Buildmanagement 12
Build-Skript Ant Hierarchische Aufbau Skript für einfaches Build-Prozess kann schon ziemlich groß sein build.xml project type #1 target #1 target #2 type #2 task A task B <?xml version="1.0"?> <project name= " basedir="."> <!-- == Definition der Properties == --> <property file= ant/build.properties /> ( ) <!-- == Java-Compiler aufrufen == --> <target name= compile > <javac srcdir= ${src.java} destdir= ${target.java} > <classpath refid= ExternalLibs /> </javac> </target> ( ) </project> 20.05.08 Konstantin Domoratskyy: Buildmanagement 13
Skript-Ziele Ant Zielverzeichniss(e) erstellen: <target name= prepare > <mkdir dir= ${target.java} /> </target> > ant prepare Buildfile: build.xml prepare: [mkdir] Created dir: D:\Projekte\MyProjekt\...\java BUILD SUCCESSFUL Total time: 0 seconds Weitere Ziele: Aufruf des Java-Compilers Dokugenerierung Modultestsdurchführung Installationsdateierzeugung usw. 20.05.08 Konstantin Domoratskyy: Buildmanagement 14
Fazit Ant Vorteile: + Frei verfügbar und Plattformunabhängig + Leistungsfähige Elemente und Funktionen + Sehr hohe Flexibilität bei der Gestaltung des Build-Prozesses Nachteile: Hohe Aufwand bei der Implementierung Fehlt automatisierte Verwaltung von externen Abhängigkeiten 20.05.08 Konstantin Domoratskyy: Buildmanagement 15
2.2. Maven Stop building the build! Soll Ant ablösen? Ziel: standardisierte und prognostizierbare Verfahren für PJ-Entwicklung Wieso? keine Wiederverwendbarkeit der Build-Logik ASF war eine Serie von isolierten Innovationsinseln Lästige Einbeziehung von SW-Entwickler ins Build-Prozess Maven - Abstraktion des Build-Prozesses Überschaubar Modellbasierte und deklarative Ansatz Ellenlang => PJ-Konfigurationsdatei pom.xml statt Build-Skripte Mit Ant kann man Mavens Funktionalität nachbilden (umständlich) 20.05.08 Konstantin Domoratskyy: Buildmanagement 16
Architektur (vereinfacht) Maven Plug-ins und Abhängigkeiten von Drittbibliotheken Metadaten: Info über PJ-Struktur, Externe Bibliotheken usw. Repository pom.xml Dokumentation Und Metriken Quelltexte usw. Maven (incl. Plugins) Build-Funktionalität für Kompilierung, Paketierung, Unit-Testing usw. Artefakt (z.b. jar, war) 20.05.08 Konstantin Domoratskyy: Buildmanagement 17
Architektur Maven JDK >= V1.4 %JAVA_HOME% Maven 2 Installationsverzeichnis %M2_HOME% Maven 2 Startskript bin\mvn.bat Maven 2 Kern core\*.jar, lib\*.jar interpretiert Projektmodell pom.xml Projektverzeichnis Startet JVM Mit Maven 2 Maven 2-Plugins Build-Targets Lokales Repository %USERPROFILE%\.m2\repository Externe Bibliotheken Auslieferungsdateien des Projektes Plugin Repository http://repo1.maven.org/ maven2 Remote Repository http://repo1.maven.org/ maven2 20.05.08 Konstantin Domoratskyy: Buildmanagement 18
Funktionalität Maven 1. Durchführung des Build-Prozesses - Best Practices aus PJ-Automatisierung (Standardisierung einzelner Phasen, PJ-Struktur und Vorgehens) 2. Verwaltung der Abhängigkeiten zu externen Bibliotheken - Vermeidung von Varianten zur Lösung desselben Problems (Ant bietet hier keine Funktionalität an) 3. Erstellung der Projektdokumentation - Starke Unterstützung zur Erstellung der PJ-Homepage 20.05.08 Konstantin Domoratskyy: Buildmanagement 19
Standardvorgaben für PJ-Struktur Maven src/main/java src/main/resources src/main/filters src/main/assembly src/main/config src/main/webapp src/test/java src/test/resources src/test/filters src/site Application/Library sources Application/Library resources Resource filter files Assembly descriptors Configuration files Web application sources Test sources Test resources Test resource filter files Site 20.05.08 Konstantin Domoratskyy: Buildmanagement 20
Plug-ins Maven Dokumentation und Quelltextvisualisierung: Xdoc-Plug-in (generiert eine Website aus Xdoc), PDF-Plug-in (generiert PDF aus Xdoc) JXR-Plug-in (konvertiert Quelltexte in HTML), Javadoc-Plug-in Qualitätmessung: JUnit Report, JUnit Coverage Report, Checkstyle-Plug-in, FindBugs-Plug-in und PMD (statische Quelltextanalyse), JDepend-Plug-in (analysiert Abhängigkeiten zwischen Packages) Konfigurationsmanagement: SCM Plug-in (unterstützt bei der Verwaltung der Quelltext in CVS und bei der Erstellung von Releases) Deployment-Unterstützung: Plug-ins für Hot Deployments in Tomcat, Weblogic, JBoss usw. 20.05.08 Konstantin Domoratskyy: Buildmanagement 21
JUnit Testreport Maven 20.05.08 Konstantin Domoratskyy: Buildmanagement 22
POM Maven Hierarchische Aufbau pom.xml Projekt Allgemeine Angaben Properties Build-Prozess Build-Varianten (Profile) Repositorys Abhängigkeiten zu ext. Bibliotheken Projektdokumentation Auslieferung des Produktes <project> <modelversion>4.0.0</modelversion> <groupid>com.mycompany.app</groupid> <artifactid>my-app</artifactid> <packaging>jar</packaging> <version>1.0-snapshot</version> <dependencies> <dependency> <groupid>junit</groupid> <artifactid>junit</artifactid> <version>4.3.1</version> <scope>test</scope> </dependency> </dependencies> </project> 20.05.08 Konstantin Domoratskyy: Buildmanagement 23
Repository Maven Hierarchisch organisierte Verzeichnisstruktur + commons-logging + javax <groupid> junit <artifactid> Hierarchieebenen junit + org < version> 4.3.1 junit-4.3.1.jar junit-4.3.1.jar.sha1 junit-4.3.1.pom junit-4.3.1.pom.sha1 20.05.08 Konstantin Domoratskyy: Buildmanagement 24
Build-Lifecycle Maven Build-Phase prozess-sources compile process-test-sourses test-compile test package install Bedeutung Bearbeitet existierenden Quelltext. (Präprozessorfunktion) Kompiliert den Quelltext Bearbeitet existierenden Quelltext für Modultests Kompiliert den Quelltext für Modultests Führt Modultests aus Erstellt die Auslieferungsdatei, also das Artefakt, für das Projekt Überträgt die Auslieferungsdatei und damit das Artefakt in das lokale Maven-Repository 20.05.08 Konstantin Domoratskyy: Buildmanagement 25
Lifecycle-Mapping Maven Ergebnis dieser Zuordnung: Build-Prozess Lifecycle-Phase 1. process-ressources 2. compile 3. prozess-test-resources 4. test-compile 5. test 6. package 7. install 8. deploy Plugin maven-resources-plugin maven-compiler-plugin maven-resources-plugin maven-compiler-plugin maven-surefire-plugin maven-jar-plugin maven-install-plugin maven-deploy-plugin Build-Ziel resources compile testresources testcompile test jar install deploy 20.05.08 Konstantin Domoratskyy: Buildmanagement 26
Fazit Maven Vorteile: + Frei verfügbar und Plattformunabhängig + Best practices aus Buildmanagement + Niedrige Aufwand bei der Implementierung + Sehr mächtig (Dependency management usw.) + Bietet Ant-Bibliothek an Nachteile: Relativ unflexibel bei der Gestaltung des Build-Prozesses Kein triviales Produkt => Hohe (Lern-)Aufwand in speziellen Fällen 20.05.08 Konstantin Domoratskyy: Buildmanagement 27
3. Zusammenfassung Buildmanagement PJ-Automatisierung Ziel: Produktivitätsteigerung Transparenzsteigerung durch Dokumentation Eine der Erfolgsfaktor ist geeignete Werkzeug: Frei verfügbar, mächtig, flexibel Maximale Unterstützung bei der Automatisierung Leichte Bedienbarkeit Wurden ausgewählt: Ant und Maven Maven bietet mehr an: Best practices, Dependency management usw. 20.05.08 Konstantin Domoratskyy: Buildmanagement 28