You are on page 1of 13

Maven Plugins,

Properties and
Profiles
ADVANCED CONCEPTS

Agenda
Plugins
Maven lifecycles
Plugin binding
Plugin configuration

Properties
Build properties
System properties
Filtering

Profiles

Reactor

Maven in a nutshell

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

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

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

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

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

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

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.

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

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

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

You might also like