Maven: The Definitive Guide

Authors

Thomas Locher (Sonatype, Inc.) , Tim O'Brien (Sonatype, Inc.) , John Casey (Sonatype, Inc.) , Brian Fox (Sonatype, Inc.) , Bruce Snyder (Sonatype, Inc.) , Jason Van Zyl (Sonatype, Inc.)

Authors

Eric Redmond ()

Abstract

Maven: The Definitive Guide is a book about Apache Maven.


Copyright
1. Creative Commons BY-ND-NC
Vorwort zur deutschen Ausgabe: 0.5
Vorwort
1. Anleitung zu diesem Buch
2. Ihr Feedback
3. Typographische Konventionen
4. Konventionen in Bezug auf Maven
5. Danksagung
1. Einführung von Apache Maven
1.1. Maven ... Was ist das?
1.2. Konvention über Konfiguration
1.3. Die gemeinsame Schnittstelle
1.4. Universelle Wiederverwendung durch Maven-Plugins
1.5. Konzeptionelles Modell eines "Projekts"
1.6. Ist Maven eine Alternative zu XYZ?
1.7. Ein Vergleich von Maven und Ant
1.8. Zusammenfassung
2. Installieren und Ausführen von Maven
2.1. Überprüfen der Java-Installation
2.2. Herunterladen von Maven
2.3. Installation von Maven
2.3.1. Maven Installation unter Mac OSX
2.3.1.1. Maven Installation unter Mac OSX mit MacPorts
2.3.2. Maven Installation unter Microsoft Windows
2.3.3. Maven Installation unter Linux
2.3.4. Maven Installation unter FreeBSD oder OpenBSD
2.4. Testen einer Maven Installation
2.5. Spezielle Installationshinweise
2.5.1. Benutzerdefinierte Konfiguration und-Repository
2.5.2. Aktualisieren einer Maven-Installation
2.5.3. Upgrade einer Maven-Installation von Maven 1.x auf Maven 2.x
2.6. Maven De-Installieren
2.7. Hilfe bekommen beim Arbeiten mit Maven
2.8. Das Maven Hilfe Plugin
2.8.1. Beschreibung eines Maven Plugin
2.9. Die Apache Software Lizenz
I. Maven by Example
3. Ein einfaches Maven Projekt
3.1. Einleitung
3.1.1. Das Herunterladen der Beispiele dieses Kapitels
3.2. Erstellen eines einfachen Projekts
3.3. Der Aufbau eines einfachen Projekts
3.4. Einfaches Projekt Objekt Modell (POM)
3.5. Kern Konzepte
3.5.1. Maven Plugins und Ziele
3.5.2. Maven Lifecycle
3.5.3. Maven Koordinaten
3.5.4. Maven Repositories
3.5.5. Maven Abhängigkeits-Management (Dependency Management)
3.5.6. Site-Generierung und Reporting
3.6. Zusammenfassung
4. Anpassen eines Maven Projektes
4.1. Einleitung
4.1.1. Herunterladen der Beispiele dieses Kapitels
4.2. Eine kurze Einführung in das "Simple Weather" Projekt
4.2.1. Yahoo! Wetter Dienst RSS
4.3. Erstellen des "Simple Weather" Projektes
4.4. Anpassen der Projektinformationen
4.5. Einfügen neuer Abhängigkeiten
4.6. Quellcode von "Simple Weather"
4.7. Resourcen Hinzufügen
4.8. Ausführen des "Simple Weather" Programms
4.8.1. Das Exec Maven Plugin
4.8.2. Erkundung der Projekt Abhängigkeiten
4.9. Erstellen von Unit-Tests
4.10. Hinzufügen von Gebietsbezogenen Unit Tests
4.11. Hinzufügen einer Unit-Test Ressource
4.12. Ausführen von Unit-Tests
4.12.1. Ignorieren fehlgeschlagener Unit Tests
4.12.2. Überspringen von Unit-Tests
4.13. Builden einer paketierten, Befehlszeilen orientierten Anwendung
4.13.1. Anbinden des Assembly Goals zur Packetierungs Phase
5. Eine einfache Web-Anwendung
5.1. Einleitung
5.1.1. Herunterladen der Beispiele dieses Kapitels
5.2. Eine kurze Einführung in die "Simple Web" Anwendung
5.3. Erstellen des "Simple Web" Projekts
5.4. Konfigurieren des Jetty-Plugins
5.5. Das Hinzufügen eines einfachen Servlets
5.6. Das Hinzufügen von J2EE-Abhängigkeiten
5.7. Zusammenfassung
6. Ein multi-modulares Projekt
6.1. Einleitung
6.1.1. Herunterladen der Beispiele dieses Kapitels
6.2. Das "Simple Parent" Projekt (parent=Elternteil)
6.3. Das "Simple Weather" Modul
6.4. Das "Simple-Web" Anwendungs-Modul
6.5. Erstellung des Multi-Projekt-Moduls
6.6. Starten der Web-Anwendung
7. Multi-module Enterprise Project
7.1. Einleitung
7.1.1. Herunterladen der Beispiele dieses Kapitels
7.1.2. Multi-Modul Enterprise Projekt
7.1.3. Technologie des Beispiels
7.2. Das "Simple Parent" Projekt - Top Level
7.3. Das Simple Model" Modul - Das Objektmodell
7.4. Das "Simple Weather" Modul - Die Dienste
7.5. Das "Simple Persist" Modul - Die Datenabstraktion
7.6. Das "Simple Web" Modul - Das Web-Interface
7.7. Aufrufen der Web-Anwendung
7.8. Das "Simple Command" Modul - Das Kommandozeilen Modul
7.9. Aufrufen der Kommandozeilen-Anwendung
7.10. Fazit
7.10.1. Programmierung gegen Interface-Projekte
8. Optimirung und Überarbeitung der POMs
8.1. Einführung
8.2. POM Bereinigung
8.3. Optimirung der Abhängigkeiten
8.4. Optimirung der Plugins
8.5. Optimierung unter Zuhilfenahmen des Maven Dependency Plugin
8.6. Abschliessende POMs
8.7. Fazit
II. Maven Reference
9. The Project Object Model
9.1. Introduction
9.2. The POM
9.2.1. The Super POM
9.2.2. The Simplest POM
9.2.3. The Effective POM
9.2.4. Real POMs
9.3. POM Syntax
9.3.1. Project Versions
9.3.1.1. Version Build Numbers
9.3.1.2. SNAPSHOT Versions
9.3.1.3. LATEST and RELEASE Versions
9.3.2. Property References
9.4. Project Dependencies
9.4.1. Dependency Scope
9.4.2. Optional Dependencies
9.4.3. Dependency Version Ranges
9.4.4. Transitive Dependencies
9.4.4.1. Transitive Dependencies and Scope
9.4.5. Conflict Resolution
9.4.6. Dependency Management
9.5. Project Relationships
9.5.1. More on Coordinates
9.5.2. Multi-module Projects
9.5.3. Project Inheritance
9.6. POM Best Practices
9.6.1. Grouping Dependencies
9.6.2. Multi-module vs. Inheritance
9.6.2.1. Simple Project
9.6.2.2. Multi-module Enterprise Project
9.6.2.3. Prototype Parent Projects
10. Der Build Lebenszyklus
10.1. Einführung
10.1.1. Lebenszyklus: clean
10.1.2. Standard Lebenszyklus: default
10.1.3. Lebenszyklus: site
10.2. Package-spezifische Lebenszyklen
10.2.1. jar
10.2.2. pom
10.2.3. plugin
10.2.4. ejb
10.2.5. war
10.2.6. ear
10.2.7. Andere Packetierungs Typen
10.3. Gebräuchliche Lebenszyklus Goals
10.3.1. Ressourcen Verarbeiten
10.3.2. compile
10.3.3. Verarbeiten von Test Ressourcen
10.3.4. Kompilieren der Test Klassen (testCompile)
10.3.5. test
10.3.6. install
10.3.7. deploy
11. Build Profiles
11.1. What Are They For?
11.1.1. What is Build Portability
11.1.1.1. Non-Portable Builds
11.1.1.2. Environment Portability
11.1.1.3. Organizational (In-House) Portability
11.1.1.4. Wide (Universal) Portability
11.1.2. Selecting an Appropriate Level of Portability
11.2. Portability through Maven Profiles
11.2.1. Overriding a Project Object Model
11.3. Profile Activation
11.3.1. Activation Configuration
11.3.2. Activation by the Absence of a Property
11.4. Listing Active Profiles
11.5. Tips and Tricks
11.5.1. Common Environments
11.5.2. Protecting Secrets
11.5.3. Platform Classifiers
11.6. Summary
12. Maven Assemblies
12.1. Introduction
12.2. Assembly Basics
12.2.1. Predefined Assembly Descriptors
12.2.2. Building an Assembly
12.2.3. Assemblies as Dependencies
12.2.4. Assembling Assemblies via Assembly Dependencies
12.3. Overview of the Assembly Descriptor
12.4. The Assembly Descriptor
12.4.1. Property References in Assembly Descriptors
12.4.2. Required Assembly Information
12.5. Controlling the Contents of an Assembly
12.5.1. Files Section
12.5.2. FileSets Section
12.5.3. Default Exclusion Patterns for fileSets
12.5.4. dependencySets Section
12.5.4.1. Customizing Dependency Output Location
12.5.4.2. Interpolation of Properties in Dependency Output Location
12.5.4.3. Including and Excluding Dependencies by Scope
12.5.4.4. Fine Tuning: Dependency Includes and Excludes
12.5.4.5. Transitive Dependencies, Project Attachments, and Project Artifacts
12.5.4.6. Advanced Unpacking Options
12.5.4.7. Summarizing Dependency Sets
12.5.5. moduleSets Sections
12.5.5.1. Module Selection
12.5.5.2. Sources Section
12.5.5.3. Interpolation of outputDirectoryMapping in moduleSets
12.5.5.4. Binaries section
12.5.5.5. moduleSets, Parent POMs and the binaries Section
12.5.6. Repositories Section
12.5.7. Managing the Assembly’s Root Directory
12.5.8. componentDescriptors and containerDescriptorHandlers
12.6. Best Practices
12.6.1. Standard, Reusable Assembly Descriptors
12.6.2. Distribution (Aggregating) Assemblies
12.7. Summary
13. Properties and Ressource Filterung
13.1. Einleitung
13.2. Maven Properties
13.2.1. Maven Projekt Einstellungen
13.2.2. Properties der Maven Einstellungen (settings.xml)
13.2.3. Properties der Umgebungsvariablen
13.2.4. Java System Properties
13.2.5. Benuzerdefinierte Properties
13.3. Ressource Filterung
14. Maven in Eclipse: m2eclipse
14.1. Einführung
14.2. m2eclipse
14.3. Installation des m2eclipse Plugins
14.3.1. Installieren der Voraussetzungen
14.3.1.1. Installation von Subclipse
14.3.1.2. Installation von Mylyn
14.3.1.3. Installation der AspectJ Development Tools (AJDT)
14.3.1.4. Installation der Web Tools Platform (WTP)
14.3.2. Installation von m2eclipse
14.4. Aufschalten der Maven Konsole
14.5. Erstellen eines Maven Projekts
14.5.1. Auschecken eines Maven Projektes von einem SCM Repository
14.5.2. Erstellen eines Maven Projekts auf der Basis eines Maven Archetyps
14.5.3. Erstellen eines Maven Moduls
14.6. Erstellen einer Maven POM Datei
14.7. Importieren von Maven Projekten
14.7.1. Importiren eines Maven Projektes
14.7.2. Materialisieren eines Maven Projektes
14.8. Starten von Maven Builds
14.9. Mit Maven Projekten arbeiten
14.9.1. Zufügen und Updaten von Abhängigkeiten und Plugins
14.9.2. Erstellen eines Maven Modules
14.9.3. Herunterladen der Quelldatei(en)
14.9.4. Öffnen von Projektseiten
14.9.5. Auflösen von Abhängigkeiten
14.10. Arbeiten mit den Maven Repositorien
14.10.1. Suchen von Maven Artefakten sowie Java Klassen
14.10.2. Indizierung von Maven Repositorien
14.11. Der neue graphische POM Editor
14.12. Projektabhängigkeiten mit m2eclipse analysieren
14.13. Maven Einstellungen
14.14. Zusammenfassung
15. Site Generation
15.1. Introduction
15.2. Building a Project Site with Maven
15.3. Customizing the Site Descriptor
15.3.1. Customizing the Header Graphics
15.3.2. Customizing the Navigation Menu
15.4. Site Directory Structure
15.5. Writing Project Documentation
15.5.1. APT Example
15.5.2. FML Example
15.6. Deploying Your Project Website
15.6.1. Configuring Server Authentication
15.6.2. Configuring File and Directory Modes
15.7. Customizing Site Appearance
15.7.1. Customizing the Site CSS
15.7.2. Create a Custom Site Template
15.7.3. Reusable Website Skins
15.7.4. Creating a Custom Theme CSS
15.7.5. Customizing Site Templates in a Skin
15.8. Tips and Tricks
15.8.1. Inject XHTML into HEAD
15.8.2. Add Links under Your Site Logo
15.8.3. Add Breadcrumbs to Your Site
15.8.4. Add the Project Version
15.8.5. Modify the Publication Date Format and Location
15.8.6. Using Doxia Macros
16. Repository Management with Nexus
17. Writing Plugins
17.1. Introduction
17.2. Programming Maven
17.2.1. What is Inversion of Control?
17.2.2. Introduction to Plexus
17.2.3. Why Plexus?
17.2.4. What is a Plugin?
17.3. Plugin Descriptor
17.3.1. Top-level Plugin Descriptor Elements
17.3.2. Mojo Configuration
17.3.3. Plugin Dependencies
17.4. Writing a Custom Plugin
17.4.1. Creating a Plugin Project
17.4.2. A Simple Java Mojo
17.4.3. Configuring a Plugin Prefix
17.4.4. Logging from a Plugin
17.4.5. Mojo Class Annotations
17.4.6. When a Mojo Fails
17.5. Mojo Parameters
17.5.1. Supplying Values for Mojo Parameters
17.5.2. Multi-valued Mojo Parameters
17.5.3. Depending on Plexus Components
17.5.4. Mojo Parameter Annotations
17.6. Plugins and the Maven Lifecycle
17.6.1. Executing a Parallel Lifecycle
17.6.2. Creating a Custom Lifecycle
17.6.3. Overriding the Default Lifecycle
18. Writing Plugins in Alternative Languages
18.1. Writing Plugins in Ant
18.2. Creating an Ant Plugin
18.3. Writing Plugins in JRuby
18.3.1. Creating a JRuby Plugin
18.3.2. Ruby Mojo Implementations
18.3.3. Logging from a Ruby Mojo
18.3.4. Raising a MojoError
18.3.5. Referencing Plexus Components from JRuby
18.4. Writing Plugins in Groovy
18.4.1. Creating a Groovy Plugin
19. Using Maven Archetypes
19.1. Introduction to Maven Archetypes
19.2. Using Archetypes
19.2.1. Using an Archetype from the Command Line
19.2.2. Using the Interactive generate Goal
19.2.3. Using an Archetype from m2eclipse
19.3. Available Archetypes
19.3.1. Common Maven Archetypes
19.3.1.1. maven-archetype-quickstart
19.3.1.2. maven-archetype-webapp
19.3.1.3. maven-archetype-mojo
19.3.2. Notable Third-Party Archetypes
19.3.2.1. AppFuse
19.3.2.2. Confluence and JIRA plugins
19.3.2.3. Wicket
19.4. Publishing Archetypes
A. Appendix: Detailinformationen zur settings.xml-Datei
A.1. Übersicht
A.2. Die Details der settings.xml Datei
A.2.1. Einfache Wertangaben
A.2.2. Servers
A.2.3. Spiegelrepositorien
A.2.4. Proxies
A.2.5. Profiles
A.2.6. Activation
A.2.7. Properties
A.2.8. Repositories
A.2.9. Plugin Repositories
A.2.10. Aktive Profile
B. Appendix: Alternativen zu den Sun Spezifikationen