This document provides an overview of advanced Maven concepts including plugins, properties, profiles, and the Maven reactor. It describes how plugins can be bound to phases in Maven lifecycles and configured. Properties can define build variables and be used for filtering and dependency versions. Profiles allow alternative builds and configurations. The Maven reactor handles building multi-module projects.
4. Maven Basics
Convention over configuration
◦ Convention for source code organization
◦ src/main/java
◦ src/webapp
◦ src/test/java
◦ Plugins with default configurations
◦ Jar, war, ear
◦ Surefire tests
◦ Reporting
Dependency Management
◦ Remote repository and local repository
◦ Transitive dependencies
5. Maven Plugins
Various components that take advantage of a project model.
◦ Build tasks
◦ Test tasks
◦ Installation tasks
A set of goals + configuration
◦ Can be executed directly:
◦ $ mvn plugin:goal
◦ Can be bound to a phase in a maven lifecycle
◦ $ mvn package
◦ Multiple plugin goals can be bound to the same phase
6. Maven Lifecycle
3 lifecycles
◦ Clean
◦ Default
◦ Site
Fixed set of phases
Default plugin bindings
◦ Depends on packaging
◦ See http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Builtin_Lifecycle_Bindings
7. Plugin Binding
Some plugin goals are bound to a phase by default.
E.g. maven-failsafe-plugin
◦ Not included by default
◦ When declared, two goals bind to a lifecycle phase
◦ failsafe:integration-test -> integration-test
◦ failsafe:verify -> verify
◦ Custom <execution> to bind to a different goal
8. Plugin Configuration
Plugin <configuration> element.
◦ In plugin definition
◦ Applied for default lifecycle bindings
◦ Applied for explicit execution
◦ In <execution>
◦ Applied for bound execution only
◦ XML Deserialization for complex configuration elements
Plugins can use build properties to get default configuration values
◦ Defined in plugin documentation
◦ Useful for default plugins (convention over configuration)
◦ E.g. -DskipTests
9. Maven Properties
Build properties
◦ Defined in pom.xml <properties> element
◦ Inherited from parent poms
◦ System properties are copied over build properties
Usage
◦ Plugin configuration
◦ Dependency versions
◦ Dependency management
10. Filtering
Supported in resources plugin, war plugin and some more.
◦ Enabled by <filtering>true</filtering>
◦ Standard resources in build definition
◦ Plugin configuration for war plugin
Replaces ${xxx} by corresponding build property.
◦ During copy, not in place.
◦ Build property can be overriden by system property.
◦ At build time! Not changed later.
11. System properties
Supported by some plugins that launches other jvm processes
E.g. surefire or failsafe plugin
◦ When using forkMode <> none
◦ <systemPropertyVariables>
E.g. launching application containers
◦ JBoss-as plugin
◦ Jetty plugin
◦ Tomcat plugin
12. Profiles
Profiles allows alternative build executions within the same pom
◦ Different <modules/>, <dependencies/>, etc.
◦ Different plugin configuration, different resources
◦ Inherited from parent
Activation
◦ Explicit: $ mvn –Pprofile1,profile2
◦ Activated by properties
◦ Activated by settings.xml
Could be used in combination with filtering
◦ To have different artifacts for different usages
◦ Use different classifier in resulting artifact
◦ Should not be used to escalate from DEV->TEST->PROD
13. Maven reactor
Maven builds recursively, using nested <modules/>
Can be tweaked by maven parameters
◦
◦
◦
◦
◦
◦
$ mvn –N
$ mvn –pl m1, m2,…
$ mvn –pl :m1
$ mvn –pl m1 –am
$ mvn –pl m1 –amd
$ mvn –rf m1
-> non-recursive
-> project list
-> by artifact id instead of directory name
-> also make requirements
-> also make dependents
-> resume from