Maven ist ein Build- und Konfigurationsmanagement-Tool der Apache Software Foundation und basiert auf Java. Mit Maven lassen sich Java-Projekte standardisiert erstellen und verwalten. Ziel ist die Automatisierung und Vereinfachung immer wieder anfallender Aufgaben. Der Autor erläutert die grundlegenden Konzepte und Module von Maven und zeigt, wie diese im Projektalltag eingesetzt werden können. Das Buch richtet sich an Softwareentwickler und -architekten, an technische Projektleiter und alle, die sich mit Konfigurationsmanagement beschäftigen. Zunächst gibt der Autor einen Schnelleinstieg in Maven und erläutert die elementaren Befehle und Konfigurationsschritte, so dass Sie sofort erste Projekte mit Maven erstellen und bearbeiten können. Die folgenden Kapitel vermitteln die grundlegenden Konzepte und Prinzipien z.B. zu Verzeichnis- und Namenskonventionen, Lifecycles, Dependencies, Projektbeziehungen und zum Projektmodell. Alle weiteren Kapitel behandeln einzelne Themen, die im Verlaufe eines Projektes eine Rolle spielen können wie u.a. Repositories, Plugins, das Veröffentlichen von Software, Reporting und Dokumentation sowie Qualitätsmanagement. So erhalten Sie einen umfassenden Einblick in Maven. Dieses Buch eignet sich sowohl als Einführung als auch als Referenz und Arbeitsbuch für die tägliche Praxis.
Martin Spiller ist Diplom-Mathematiker und arbeitet als Softwareentwickler und Berater im Java-Umfeld für die neusta GmbH. Seine Schwerpunkte sind Softwarequalität, Konfigurationsmanagement und Performance-Tuning .
Inhaltsverzeichnis
1;Cover ;1 2;Titel ;3 3;Impressum ;4 4;Inhaltsverzeichnis;7 5;Danksagungen;17 6;Vorwort;19 7;Einführung;21 7.1;1.1 Über dieses Buch;22 7.1.1;1.1.1 Für wen ist dieses Buch?;22 7.1.2;1.1.2 Konventionen;24 7.1.3;1.1.3 Sprache;25 7.2;1.2 Das Mavenbuch im Internet;26 7.3;1.3 Kontakt;26 8;Maven im Überblick;27 8.1;2.1 Was ist Maven?;27 8.1.1;2.1.1 POM;27 8.1.2;2.1.2 Lebenszyklen;28 8.1.3;2.1.3 Vereinfachtes Build-Management;28 8.1.4;2.1.4 Trennung von Code und Unit-Tests;28 8.1.5;2.1.5 Verwaltung von Abhängigkeiten;28 8.1.6;2.1.6 Artefakte;29 8.1.7;2.1.7 Informationen zu Codequalität und Projektzustand;29 8.2;2.2 Voraussetzungen;29 8.2.1;2.2.1 Betriebssystem;29 8.2.2;2.2.2 JDK;29 8.2.3;2.2.3 Speicherplatz;29 8.3;2.3 Installation;30 8.4;2.4 Projekt erstellen;31 8.5;2.5 Bauen - Testen - Packen;33 8.5.1;2.5.1 Basisfunktionen;33 8.5.2;2.5.2 Dokumentation;36 8.6;2.6 Projekte erweitern;40 8.7;2.7 Ein Web-Projekt;41 8.7.1;2.7.1 Generieren einer Web-Applikation;41 8.7.2;2.7.2 Servlet-API;43 8.7.3;2.7.3 Ausführen der Web-Anwendung;43 8.8;2.8 Weitere Projekttypen;44 8.9;2.9 Entwicklungsumgebungen;45 8.9.1;2.9.1 Eclipse;45 8.9.2;2.9.2 Netbeans;48 8.9.3;2.9.3 IntelliJ IDEA;48 9;Maven als Konfigurationsmanagement-Tool;49 9.1;3.1 Konfigurationsmanagement;49 9.2;3.2 Elemente des Konfigurationsmanagements;51 9.3;3.3 Von make zu Maven;53 10;Maven-Grundlagen;57 10.1;4.1 Maven ausführen;57 10.1.1;4.1.1 Lifecycles;57 10.1.2;4.1.2 Plugins;57 10.1.3;4.1.3 Kommandozeilenparameter;58 10.1.4;4.1.4 MAVEN_OPTS;60 10.2;4.2 Versionierung;61 10.2.1;4.2.1 Releases;61 10.2.2;4.2.2 Snapshots;61 10.3;4.3 Maven-Konventionen;62 10.3.1;4.3.1 Verzeichnisstruktur;62 10.3.2;4.3.2 Namenskonventionen;64 10.4;4.4 Zugangsdaten verschlüsseln;65 10.4.1;4.4.1 Anlegen eines Masterpassworts;65 10.4.2;4.4.2 Verschlüsseln von Passworten;66 10.5;4.5 Wo erhalte ich Hilfe?;66 10.5.1;4.5.1 Maven-Hilfe im Internet;66 10.5.2;4.5.2 Das Maven-Help-Plugin;67 11;Lifecycles;71 11.1;5.1 Die Standard-Lifecycles;71 11.1.1;5.1.1 Der Def
ault-Lifecycle;72 11.1.2;5.1.2 Der clean-Lifecycle;75 11.1.3;5.1.3 Der Site-Lifecycle;76 12;POM - Das Project Object Model;77 12.1;6.1 Koordinaten;78 12.1.1;6.1.1 Elemente;78 12.2;6.2 Projektbeziehungen;79 12.2.1;6.2.1 Abhängigkeiten;79 12.2.2;6.2.2 Vererbung;80 12.2.3;6.2.3 Aggregation;80 12.3;6.3 Projektinformationen;81 12.3.1;6.3.1 Lizenzen;81 12.3.2;6.3.2 Team-Informationen;82 12.3.3;6.3.3 Organisation;83 12.4;6.4 Build-Einstellungen;84 12.4.1;6.4.1 properties;84 12.4.2;6.4.2 build;84 12.4.3;6.4.3 reporting;88 12.5;6.5 Projektumgebung;89 12.5.1;6.5.1 Build-Umgebung;89 12.5.2;6.5.2 Maven-Umgebung;92 13;Dependencies;97 13.1;7.1 Abhängigkeiten im POM;97 13.1.1;7.1.1 Das dependency-Tag;98 13.1.2;7.1.2 dependencyManagement;101 13.2;7.2 Versionsbereiche;103 13.3;7.3 Transitive Abhängigkeiten;105 13.3.1;7.3.1 Der Gültigkeitsbereich transitiver Abhängigkeiten;106 13.4;7.4 Das Dependency-Plugin;107 13.4.1;7.4.1 Goals;107 13.5;7.5 Welche Koordinaten, Käptn?;109 13.5.1;7.5.1 Drittmittel;110 14;Projektbeziehungen;111 14.1;8.1 Vererbung;111 14.2;8.2 Aggregation - Multimodul-Projekte;112 14.2.1;8.2.1 Fischladen;112 15;Repositories;115 15.1;9.1 Lokale und entfernte Repositories;115 15.2;9.2 Repository-Struktur;115 15.3;9.3 Repositories verwenden;116 15.3.1;9.3.1 Das lokale Repository;116 15.3.2;9.3.2 Entfernte Repositories;116 15.3.3;9.3.3 Plugin-Repositories;120 15.3.4;9.3.4 Distribution Management;121 15.4;9.4 Eigene Repositories;122 15.5;9.5 Bibliotheken installieren;123 15.5.1;9.5.1 Installation im lokalen Repository;124 15.5.2;9.5.2 deploy im entfernten Repository;125 16;Plugins;127 16.1;10.1 Ausführen von Plugins;127 16.1.1;10.1.1 Ausführen auf der Kommandozeile;127 16.1.2;10.1.2 Automatisches Ausführen von Plugins;128 16.2;10.2 Deklaration im POM;129 16.2.1;10.2.1 Elemente;129 16.2.2;10.2.2 Die Sektion pluginManagement;130 16.2.3;10.2.3 Plugin-Repositories;131 16.2.4;10.2.4 Versionen und Update von Plugins;131 16.2.5;10.2.5 Externe Konfiguration - Konfigurationsmodule?;
132 16.3;10.3 Das Maven-AntRun-Plugin;133 17;Properties und Filtering;135 17.1;11.1 Maven-Properties;135 17.1.1;11.1.1 Projekt-Properties;135 17.1.2;11.1.2 Settings-Properties;136 17.1.3;11.1.3 Umgebungsvariablen;137 17.1.4;11.1.4 System-Properties;137 17.1.5;11.1.5 Properties definieren;138 17.2;11.2 Resource Filtering;139 17.2.1;11.2.1 Filterdateien;140 17.2.2;11.2.2 Excludes;142 17.2.3;11.2.3 Web-Applikationen;142 18;Profile;145 18.1;12.1 Profilarten;145 18.2;12.2 Profilaktivierung;146 18.2.1;12.2.1 Aktivierung über die Kommandozeile;146 18.2.2;12.2.2 Aktivierung in den Settings;147 18.2.3;12.2.3 Aktivierung als Standard;147 18.2.4;12.2.4 Umgebungsabhängige Aktivierung;148 18.2.5;12.2.5 Und wer ist jetzt aktiv?;150 18.3;12.3 Einsatzmöglichkeiten für Profile;150 18.3.1;12.3.1 Standortabhängige Ressourcen;150 18.3.2;12.3.2 Module;151 18.3.3;12.3.3 Dependencies;151 18.3.4;12.3.4 Properties für verschiedene (Test-)Umgebungen;151 18.3.5;12.3.5 Artefakte durch Klassifizierer kennzeichnen;155 18.4;12.4 Konflikte;156 18.4.1;12.4.1 Profile mit gleichem Namen;156 18.4.2;12.4.2 Gleichnamige Eigenschaften;156 19;Maven-SCM;159 19.1;13.1 Versionskontrolle mit dem SCM-Plugin;159 19.1.1;13.1.1 Wird mein Kontrollsystem unterstützt?;159 19.2;13.2 Unterstützte Kommandos;160 19.3;13.3 Anwendung des SCM-Plugins;161 19.3.1;13.3.1 Alles ist wandelbar;161 19.4;13.4 Konfiguration;161 19.4.1;13.4.1 Aufbau der SCM-URL;162 19.4.2;13.4.2 Subversion;162 19.5;13.5 Beispiele;163 19.5.1;13.5.1 Automatisches Kennzeichnen von Releases;165 19.5.2;13.5.2 Sauberes Deployment mit scm:bootstrap;165 20;Software veröffentlichen;167 20.1;14.1 Maven-Release-Plugin;167 20.1.1;14.1.1 Die Vorbereitung des Release - release:prepare;168 20.1.2;14.1.2 Die Ausführung des Release - release:perform;170 20.1.3;14.1.3 Weitere Goals;171 20.2;14.2 Assembly-Plugin;172 20.2.1;14.2.1 Was sind Assemblies?;172 20.2.2;14.2.2 Assembly-Deskriptoren;173 20.2.3;14.2.3 Assembly-Inhalte festlegen;176 20.2.4;14.2.4 Dateien;176 20.2
.5;14.2.5 Dependencies;179 20.2.6;14.2.6 Module;181 20.2.7;14.2.7 Repositories;184 20.2.8;14.2.8 Assembly-Deskriptoren weiterverwenden;185 20.3;14.3 Server Deployments mit dem Cargo-Plugin;186 21;Plugins schreiben;191 21.1;15.1 Bestandteile eines Maven-Plugins;191 21.1.1;15.1.1 Plugin Build-Lifecycle;191 21.1.2;15.1.2 Der Plugin-Deskriptor;192 21.1.3;15.1.3 Namenskonventionen;192 21.2;15.2 Mojo;193 21.2.1;15.2.1 Fehlerbehandlung;193 21.2.2;15.2.2 Der Mojo-Logger;194 21.3;15.3 Eigene Plugins schreiben;194 21.3.1;15.3.1 Ein erstes Mojo;194 21.3.2;15.3.2 Das POM;195 21.4;15.4 Parameter;196 21.4.1;15.4.1 Prioritäten;199 21.5;15.5 Parametertypen;199 21.5.1;15.5.1 Skalare Werte;199 21.5.2;15.5.2 Mehrdimensionale Parameter;200 21.5.3;15.5.3 Konfiguration von Parametern;202 21.5.4;15.5.4 Testen von Plugins;204 21.5.5;15.5.5 Dokumentation von Plugins;204 21.5.6;15.5.6 Unterstützte Sprachen;206 22;Maven und Eclipse;207 22.1;16.1 Das Maven-Eclipse-Plugin;207 22.1.1;16.1.1 Goals;207 22.1.2;16.1.2 Vorbereitungen;208 22.1.3;16.1.3 Projektkonfiguration;209 22.2;16.2 Maven ausführen;214 22.2.1;16.2.1 External Tools;214 22.2.2;16.2.2 Maven als Builder in Eclipse;217 22.2.3;16.2.3 Ersetzen des Standard-Eclipse-Builders;218 22.3;16.3 Eclipse-Maven-Plugins;219 22.3.1;16.3.1 M2Eclipse;219 22.3.2;16.3.2 Eclipse IAM;221 23;Reporting und Dokumentation;223 23.1;17.1 Projektdokumentation mit Maven;223 23.2;17.2 Bestandteile;224 23.3;17.3 Projektinformationen;224 23.3.1;17.3.1 Continuous Integration;225 23.3.2;17.3.2 Dependencies;225 23.3.3;17.3.3 Dependency Convergence;227 23.3.4;17.3.4 Issue Tracking;228 23.3.5;17.3.5 Mailing Lists;228 23.3.6;17.3.6 Plugin Management;228 23.3.7;17.3.7 Project License;229 23.3.8;17.3.8 Project Plugins;229 23.3.9;17.3.9 Project Summary;229 23.3.10;17.3.10 Project Team;230 23.3.11;17.3.11 Source Repository;230 23.3.12;17.3.12 Konfiguration der Projektinformationen;230 23.4;17.4 Projekt-Reports;232 23.4.1;17.4.1 Das Javadoc-Plugin;233 23.4.2;17.4.2 Das Surefire
-Report-Plugin;233 23.4.3;17.4.3 JXR;234 23.4.4;17.4.4 Weitere Reporting-Plugins;234 23.5;17.5 Eigene Projektdokumentation;241 23.5.1;17.5.1 Doxia - ein Content-Generation-Framework;241 23.5.2;17.5.2 APT - das Maven-Dokument-Format;241 23.5.3;17.5.3 XDOC - das Jakarta-Dokument-Format;246 23.5.4;17.5.4 FML - Frequently Asked Questions;247 23.5.5;17.5.5 Verzeichnisstruktur;249 23.5.6;17.5.6 Internationalisierung;249 23.6;17.6 Der Site-Deskriptor;250 23.6.1;17.6.1 Aufbau;250 23.6.2;17.6.2 Vererbung;254 23.6.3;17.6.3 Look&Feel anpassen;255 23.7;17.7 Multimodul-Projekte;255 23.7.1;17.7.1 Besonderheiten;255 23.8;17.8 Das Maven-Site-Plugin;256 23.8.1;17.8.1 site - goals;257 23.8.2;17.8.2 Module ausschließen;258 23.8.3;17.8.3 Der Site-Lebenszyklus;259 24;Qualitätsmanagement mit Maven;261 24.1;18.1 Continuous Integration;261 24.2;18.2 QS-Plugins;261 24.2.1;18.2.1 Checkstyle;261 24.2.2;18.2.2 PMD;267 24.2.3;18.2.3 FindBugs;271 24.2.4;18.2.4 Surefire;272 24.2.5;18.2.5 Surefire-Reports;273 24.2.6;18.2.6 Cobertura;274 24.2.7;18.2.7 Integrationstests mit dem Failsafe-Plugin;276 24.3;18.3 Tipps und Tricks;278 24.3.1;18.3.1 Source-Encoding;278 24.3.2;18.3.2 Build-Abbruch bei Regelverstößen;278 24.3.3;18.3.3 Konfigurationsmodule;280 24.4;18.4 Erzeugen von Projekt-Templates mit dem Archetype-Plugin;281 24.4.1;18.4.1 Woher bekommt Maven neue Archetypen?;282 24.5;18.5 Firmenweite Einstellungen;283 24.6;18.6 POM-Tuning;284 24.6.1;18.6.1 Konfigurationsmodule;285 25;Änderungen in Maven 3;287 25.1;19.1 Umstieg von Maven 2 auf Maven 3;287 25.2;19.2 Repositories und Dependencies;288 25.3;19.3 Reporting;289 25.4;19.4 Ausführung;289 25.4.1;19.4.1 Neue Kommandozeilen-Parameter;289 25.4.2;19.4.2 Profile;290 25.5;19.5 Und was noch?;290 25.5.1;19.5.1 Mvnsh;290 25.5.2;19.5.2 Polyglot for Maven;291 26;Produkte aus dem Maven-Universum;293 26.1;A.1 Über diesen Anhang;293 26.1.1;A.1.1 Datenbanken;293 26.2;A.2 Apache Archiva;293 26.2.1;A.2.1 Was ist Archiva?;294 26.2.2;A.2.2 Installation;294 26.2.3;A.2.
3 Konfiguration;296 26.2.4;A.2.4 Server-Konfiguration;297 26.2.5;A.2.5 Benutzerverwaltung;299 26.2.6;A.2.6 Tipps;301 26.2.7;A.2.7 Literatur;303 26.3;A.3 Continuum;303 26.3.1;A.3.1 Continuous Integration?;303 26.3.2;A.3.2 Installation;304 26.3.3;A.3.3 Konfiguration;306 26.3.4;A.3.4 Und was noch?;312 27;Konfigurationsdateien;315 27.1;B.1 POM - Project Object Model;315 27.1.1;B.1.1 Basiselemente;315 27.1.2;B.1.2 Koordinaten;315 27.1.3;B.1.3 Projektbeziehungen;315 27.1.4;B.1.4 Umgebungseinstellungen;318 27.1.5;B.1.5 Super-POM;323 27.2;B.2 settings.xml;326 27.2.1;B.2.1 Referenz;327 28;Referenzen;331 28.1;C.1 Mojo-Elemente und -Annotations;331 28.1.1;C.1.1 Hauptelemente;331 28.1.2;C.1.2 Mojo-Elemente;331 28.1.3;C.1.3 Parameterelemente und -Annotations;335 28.2;C.2 APT-Kurzreferenz;337 28.3;C.3 Plugin-Versionen in Maven 3.0.3;340 28.4;C.4 Lifecycle-Verknüpfungen;341 28.4.1;3.4.1 Build-Lifecycle;341 28.5;C.5 Namenskonventionen für SUN-JARs;342 29;Literatur;345 30;Stichwortverzeichnis;347