Cover |
1 |
Titel |
3 |
Impressum |
4 |
Inhaltsverzeichnis | 7 |
Danksagungen | 17 |
Vorwort | 19 |
Einführung | 21 |
1.1 Über dieses Buch | 22 |
1.1.1 Für wen ist dieses Buch? | 22 |
1.1.2 Konventionen | 24 |
1.1.3 Sprache | 25 |
1.2 Das Mavenbuch im Internet | 26 |
1.3 Kontakt | 26 |
Maven im Überblick | 27 |
2.1 Was ist Maven? | 27 |
2.1.1 POM | 27 |
2.1.2 Lebenszyklen | 28 |
2.1.3 Vereinfachtes Build-Management | 28 |
2.1.4 Trennung von Code und Unit-Tests | 28 |
2.1.5 Verwaltung von Abhängigkeiten | 28 |
2.1.6 Artefakte | 29 |
2.1.7 Informationen zu Codequalität und Projektzustand | 29 |
2.2 Voraussetzungen | 29 |
2.2.1 Betriebssystem | 29 |
2.2.2 JDK | 29 |
2.2.3 Speicherplatz | 29 |
2.3 Installation | 30 |
2.4 Projekt erstellen | 31 |
2.5 Bauen - Testen - Packen | 33 |
2.5.1 Basisfunktionen | 33 |
2.5.2 Dokumentation | 36 |
2.6 Projekte erweitern | 40 |
2.7 Ein Web-Projekt | 41 |
2.7.1 Generieren einer Web-Applikation | 41 |
2.7.2 Servlet-API | 43 |
2.7.3 Ausführen der Web-Anwendung | 43 |
2.8 Weitere Projekttypen | 44 |
2.9 Entwicklungsumgebungen | 45 |
2.9.1 Eclipse | 45 |
2.9.2 Netbeans | 48 |
2.9.3 IntelliJ IDEA | 48 |
Maven als Konfigurationsmanagement-Tool | 49 |
3.1 Konfigurationsmanagement | 49 |
3.2 Elemente des Konfigurationsmanagements | 51 |
3.3 Von make zu Maven | 53 |
Maven-Grundlagen | 57 |
4.1 Maven ausführen | 57 |
4.1.1 Lifecycles | 57 |
4.1.2 Plugins | 57 |
4.1.3 Kommandozeilenparameter | 58 |
4.1.4 MAVEN_OPTS | 60 |
4.2 Versionierung | 61 |
4.2.1 Releases | 61 |
4.2.2 Snapshots | 61 |
4.3 Maven-Konventionen | 62 |
4.3.1 Verzeichnisstruktur | 62 |
4.3.2 Namenskonventionen | 64 |
4.4 Zugangsdaten verschlüsseln | 65 |
4.4.1 Anlegen eines Masterpassworts | 65 |
4.4.2 Verschlüsseln von Passworten | 66 |
4.5 Wo erhalte ich Hilfe? | 66 |
4.5.1 Maven-Hilfe im Internet | 66 |
4.5.2 Das Maven-Help-Plugin | 67 |
Lifecycles | 71 |
5.1 Die Standard-Lifecycles | 71 |
5.1.1 Der Default-Lifecycle | 72 |
5.1.2 Der clean-Lifecycle | 75 |
5.1.3 Der Site-Lifecycle | 76 |
POM - Das Project Object Model | 77 |
6.1 Koordinaten | 78 |
6.1.1 Elemente | 78 |
6.2 Projektbeziehungen | 79 |
6.2.1 Abhängigkeiten | 79 |
6.2.2 Vererbung | 80 |
6.2.3 Aggregation | 80 |
6.3 Projektinformationen | 81 |
6.3.1 Lizenzen | 81 |
6.3.2 Team-Informationen | 82 |
6.3.3 Organisation | 83 |
6.4 Build-Einstellungen | 84 |
6.4.1 properties | 84 |
6.4.2 build | 84 |
6.4.3 reporting | 88 |
6.5 Projektumgebung | 89 |
6.5.1 Build-Umgebung | 89 |
6.5.2 Maven-Umgebung | 92 |
Dependencies | 97 |
7.1 Abhängigkeiten im POM | 97 |
7.1.1 Das dependency-Tag | 98 |
7.1.2 dependencyManagement | 101 |
7.2 Versionsbereiche | 103 |
7.3 Transitive Abhängigkeiten | 105 |
7.3.1 Der Gültigkeitsbereich transitiver Abhängigkeiten | 106 |
7.4 Das Dependency-Plugin | 107 |
7.4.1 Goals | 107 |
7.5 Welche Koordinaten, Käpt’n? | 109 |
7.5.1 Drittmittel | 110 |
Projektbeziehungen | 111 |
8.1 Vererbung | 111 |
8.2 Aggregation - Multimodul-Projekte | 112 |
8.2.1 Fischladen | 112 |
Repositories | 115 |
9.1 Lokale und entfernte Repositories | 115 |
9.2 Repository-Struktur | 115 |
9.3 Repositories verwenden | 116 |
9.3.1 Das lokale Repository | 116 |
9.3.2 Entfernte Repositories | 116 |
9.3.3 Plugin-Repositories | 120 |
9.3.4 Distribution Management | 121 |
9.4 Eigene Repositories | 122 |
9.5 Bibliotheken installieren | 123 |
9.5.1 Installation im lokalen Repository | 124 |
9.5.2 deploy im entfernten Repository | 125 |
Plugins | 127 |
10.1 Ausführen von Plugins | 127 |
10.1.1 Ausführen auf der Kommandozeile | 127 |
10.1.2 Automatisches Ausführen von Plugins | 128 |
10.2 Deklaration im POM | 129 |
10.2.1 Elemente | 129 |
10.2.2 Die Sektion pluginManagement | 130 |
10.2.3 Plugin-Repositories | 131 |
10.2.4 Versionen und Update von Plugins | 131 |
10.2.5 Externe Konfiguration - Konfigurationsmodule? | 132 |
10.3 Das Maven-AntRun-Plugin | 133 |
Properties und Filtering | 135 |
11.1 Maven-Properties | 135 |
11.1.1 Projekt-Properties | 135 |
11.1.2 Settings-Properties | 136 |
11.1.3 Umgebungsvariablen | 137 |
11.1.4 System-Properties | 137 |
11.1.5 Properties definieren | 138 |
11.2 Resource Filtering | 139 |
11.2.1 Filterdateien | 140 |
11.2.2 Excludes | 142 |
11.2.3 Web-Applikationen | 142 |
Profile | 145 |
12.1 Profilarten | 145 |
12.2 Profilaktivierung | 146 |
12.2.1 Aktivierung über die Kommandozeile | 146 |
12.2.2 Aktivierung in den Settings | 147 |
12.2.3 Aktivierung als Standard | 147 |
12.2.4 Umgebungsabhängige Aktivierung | 148 |
12.2.5 Und wer ist jetzt aktiv? | 150 |
12.3 Einsatzmöglichkeiten für Profile | 150 |
12.3.1 Standortabhängige Ressourcen | 150 |
12.3.2 Module | 151 |
12.3.3 Dependencies | 151 |
12.3.4 Properties für verschiedene (Test-)Umgebungen | 151 |
12.3.5 Artefakte durch Klassifizierer kennzeichnen | 155 |
12.4 Konflikte | 156 |
12.4.1 Profile mit gleichem Namen | 156 |
12.4.2 Gleichnamige Eigenschaften | 156 |
Maven-SCM | 159 |
13.1 Versionskontrolle mit dem SCM-Plugin | 159 |
13.1.1 Wird mein Kontrollsystem unterstützt? | 159 |
13.2 Unterstützte Kommandos | 160 |
13.3 Anwendung des SCM-Plugins | 161 |
13.3.1 Alles ist wandelbar | 161 |
13.4 Konfiguration | 161 |
13.4.1 Aufbau der SCM-URL | 162 |
13.4.2 Subversion | 162 |
13.5 Beispiele | 163 |
13.5.1 Automatisches Kennzeichnen von Releases | 165 |
13.5.2 Sauberes Deployment mit scm:bootstrap | 165 |
Software veröffentlichen | 167 |
14.1 Maven-Release-Plugin | 167 |
14.1.1 Die Vorbereitung des Release - release:prepare | 168 |
14.1.2 Die Ausführung des Release - release:perform | 170 |
14.1.3 Weitere Goals | 171 |
14.2 Assembly-Plugin | 172 |
14.2.1 Was sind Assemblies? | 172 |
14.2.2 Assembly-Deskriptoren | 173 |
14.2.3 Assembly-Inhalte festlegen | 176 |
14.2.4 Dateien | 176 |
14.2.5 Dependencies | 179 |
14.2.6 Module | 181 |
14.2.7 Repositories | 184 |
14.2.8 Assembly-Deskriptoren weiterverwenden | 185 |
14.3 Server Deployments mit dem Cargo-Plugin | 186 |
Plugins schreiben | 191 |
15.1 Bestandteile eines Maven-Plugins | 191 |
15.1.1 Plugin Build-Lifecycle | 191 |
15.1.2 Der Plugin-Deskriptor | 192 |
15.1.3 Namenskonventionen | 192 |
15.2 Mojo | 193 |
15.2.1 Fehlerbehandlung | 193 |
15.2.2 Der Mojo-Logger | 194 |
15.3 Eigene Plugins schreiben | 194 |
15.3.1 Ein erstes Mojo | 194 |
15.3.2 Das POM | 195 |
15.4 Parameter | 196 |
15.4.1 Prioritäten | 199 |
15.5 Parametertypen | 199 |
15.5.1 Skalare Werte | 199 |
15.5.2 Mehrdimensionale Parameter | 200 |
15.5.3 Konfiguration von Parametern | 202 |
15.5.4 Testen von Plugins | 204 |
15.5.5 Dokumentation von Plugins | 204 |
15.5.6 Unterstützte Sprachen | 206 |
Maven und Eclipse | 207 |
16.1 Das Maven-Eclipse-Plugin | 207 |
16.1.1 Goals | 207 |
16.1.2 Vorbereitungen | 208 |
16.1.3 Projektkonfiguration | 209 |
16.2 Maven ausführen | 214 |
16.2.1 External Tools | 214 |
16.2.2 Maven als Builder in Eclipse | 217 |
16.2.3 Ersetzen des Standard-Eclipse-Builders | 218 |
16.3 Eclipse-Maven-Plugins | 219 |
16.3.1 M2Eclipse | 219 |
16.3.2 Eclipse IAM | 221 |
Reporting und Dokumentation | 223 |
17.1 Projektdokumentation mit Maven | 223 |
17.2 Bestandteile | 224 |
17.3 Projektinformationen | 224 |
17.3.1 Continuous Integration | 225 |
17.3.2 Dependencies | 225 |
17.3.3 Dependency Convergence | 227 |
17.3.4 Issue Tracking | 228 |
17.3.5 Mailing Lists | 228 |
17.3.6 Plugin Management | 228 |
17.3.7 Project License | 229 |
17.3.8 Project Plugins | 229 |
17.3.9 Project Summary | 229 |
17.3.10 Project Team | 230 |
17.3.11 Source Repository | 230 |
17.3.12 Konfiguration der Projektinformationen | 230 |
17.4 Projekt-Reports | 232 |
17.4.1 Das Javadoc-Plugin | 233 |
17.4.2 Das Surefire-Report-Plugin | 233 |
17.4.3 JXR | 234 |
17.4.4 Weitere Reporting-Plugins | 234 |
17.5 Eigene Projektdokumentation | 241 |
17.5.1 Doxia - ein Content-Generation-Framework | 241 |
17.5.2 APT - das Maven-Dokument-Format | 241 |
17.5.3 XDOC - das Jakarta-Dokument-Format | 246 |
17.5.4 FML - Frequently Asked Questions | 247 |
17.5.5 Verzeichnisstruktur | 249 |
17.5.6 Internationalisierung | 249 |
17.6 Der Site-Deskriptor | 250 |
17.6.1 Aufbau | 250 |
17.6.2 Vererbung | 254 |
17.6.3 Look&Feel anpassen | 255 |
17.7 Multimodul-Projekte | 255 |
17.7.1 Besonderheiten | 255 |
17.8 Das Maven-Site-Plugin | 256 |
17.8.1 site - goals | 257 |
17.8.2 Module ausschließen | 258 |
17.8.3 Der Site-Lebenszyklus | 259 |
Qualitätsmanagement mit Maven | 261 |
18.1 Continuous Integration | 261 |
18.2 QS-Plugins | 261 |
18.2.1 Checkstyle | 261 |
18.2.2 PMD | 267 |
18.2.3 FindBugs | 271 |
18.2.4 Surefire | 272 |
18.2.5 Surefire-Reports | 273 |
18.2.6 Cobertura | 274 |
18.2.7 Integrationstests mit dem Failsafe-Plugin | 276 |
18.3 Tipps und Tricks | 278 |
18.3.1 Source-Encoding | 278 |
18.3.2 Build-Abbruch bei Regelverstößen | 278 |
18.3.3 Konfigurationsmodule | 280 |
18.4 Erzeugen von Projekt-Templates mit dem Archetype-Plugin | 281 |
18.4.1 Woher bekommt Maven neue Archetypen? | 282 |
18.5 Firmenweite Einstellungen | 283 |
18.6 POM-Tuning | 284 |
18.6.1 Konfigurationsmodule | 285 |
Änderungen in Maven 3 | 287 |
19.1 Umstieg von Maven 2 auf Maven 3 | 287 |
19.2 Repositories und Dependencies | 288 |
19.3 Reporting | 289 |
19.4 Ausführung | 289 |
19.4.1 Neue Kommandozeilen-Parameter | 289 |
19.4.2 Profile | 290 |
19.5 Und was noch? | 290 |
19.5.1 Mvnsh | 290 |
19.5.2 Polyglot for Maven | 291 |
Produkte aus dem Maven-Universum | 293 |
A.1 Über diesen Anhang | 293 |
A.1.1 Datenbanken | 293 |
A.2 Apache Archiva | 293 |
A.2.1 Was ist Archiva? | 294 |
A.2.2 Installation | 294 |
A.2.3 Konfiguration | 296 |
A.2.4 Server-Konfiguration | 297 |
A.2.5 Benutzerverwaltung | 299 |
A.2.6 Tipps | 301 |
A.2.7 Literatur | 303 |
A.3 Continuum | 303 |
A.3.1 Continuous Integration? | 303 |
A.3.2 Installation | 304 |
A.3.3 Konfiguration | 306 |
A.3.4 Und was noch? | 312 |
Konfigurationsdateien | 315 |
B.1 POM - Project Object Model | 315 |
B.1.1 Basiselemente | 315 |
B.1.2 Koordinaten | 315 |
B.1.3 Projektbeziehungen | 315 |
B.1.4 Umgebungseinstellungen | 318 |
B.1.5 Super-POM | 323 |
B.2 settings.xml | 326 |
B.2.1 Referenz | 327 |
Referenzen | 331 |
C.1 Mojo-Elemente und -Annotations | 331 |
C.1.1 Hauptelemente | 331 |
C.1.2 Mojo-Elemente | 331 |
C.1.3 Parameterelemente und -Annotations | 335 |
C.2 APT-Kurzreferenz | 337 |
C.3 Plugin-Versionen in Maven 3.0.3 | 340 |
C.4 Lifecycle-Verknüpfungen | 341 |
3.4.1 Build-Lifecycle | 341 |
C.5 Namenskonventionen für SUN-JARs | 342 |
Literatur | 345 |
Stichwortverzeichnis | 347 |