maven plugins, properties en profiles: advanced concepts in maven

13
Maven Plugins, Properties and Profiles ADVANCED CONCEPTS

Upload: geert-pante

Post on 11-May-2015

1.273 views

Category:

Technology


1 download

DESCRIPTION

An introduction to some advanced concepts in Maven: Plugins, Properties and Profiles.

TRANSCRIPT

Page 1: Maven plugins, properties en profiles: Advanced concepts in Maven

Maven Plugins, Properties and ProfilesADVANCED CONCEPTS

Page 2: Maven plugins, properties en profiles: Advanced concepts in Maven

Agenda Plugins

◦ Maven lifecycles◦ Plugin binding◦ Plugin configuration

Properties◦ Build properties◦ System properties◦ Filtering

Profiles

Reactor

Page 3: Maven plugins, properties en profiles: Advanced concepts in Maven

Maven in a nutshell

Page 4: Maven plugins, properties en profiles: Advanced concepts in Maven

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

Page 5: Maven plugins, properties en profiles: Advanced concepts in Maven

Maven PluginsVarious 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

Page 6: Maven plugins, properties en profiles: Advanced concepts in Maven

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#Built-in_Lifecycle_Bindings

Page 7: Maven plugins, properties en profiles: Advanced concepts in Maven

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

Page 8: Maven plugins, properties en profiles: Advanced concepts in Maven

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

Page 9: Maven plugins, properties en profiles: Advanced concepts in Maven

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

Page 10: Maven plugins, properties en profiles: Advanced concepts in Maven

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.

Page 11: Maven plugins, properties en profiles: Advanced concepts in Maven

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

Page 12: Maven plugins, properties en profiles: Advanced concepts in Maven

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

Page 13: Maven plugins, properties en profiles: Advanced concepts in Maven

Maven reactor Maven builds recursively, using nested <modules/>

Can be tweaked by maven parameters◦ $ mvn –N -> non-recursive◦ $ mvn –pl m1, m2,… -> project list◦ $ mvn –pl :m1 -> by artifact id instead of directory name◦ $ mvn –pl m1 –am -> also make requirements◦ $ mvn –pl m1 –amd -> also make dependents◦ $ mvn –rf m1 -> resume from