Arnaud Héritier
• eXo - Software Factory Manager
» In charge of tools and methods
• Apache Maven :
» Committer since 2004 and member of the
Project Management Committee
• Coauthor of « Apache Maven »
» published by Pearson (in French)
• Contact me :
» http://aheritier.net
» Twitter : @aheritier
» Skype : aheritier
2
Definition
• Apache Maven is a software project
management and comprehension tool.
• Based on the concept of a project object
model (POM)
» Maven can manage a project's build, binaries,
reporting and documentation from a central piece
of information.
• Apache Maven is standards/conventions
driven
» How many of you are doing JEE and related
developments ?
3
History
• Initiated in 2001 by Jason Van Zyl in Alexandria,
an Apache Jakarta project,
• Moved to Turbine few months after,
• Became a Top Level Project in 2003.
• Maven 2.0 released in September 2005
• Maven 3.0 released in October 2010
» 3.0.3 – March 2011
4
Choose your way of thinking
Conventions approach Scripting approach
5
Competitors
• Ant + Ivy, Easy Ant, Gant, Gradle, Buildr…
• Script oriented
» You can do what you want !
• Reuse many of Maven conventions (directories layout,
…) and services (repositories) but without enforcing
them
• The risk for them : Not being able to evolve due to the
too high level of customization proposed to the user.
» We tried on Maven 1 and it died because of that. It was
impossible to create a set of tests to cover all usages.
» It’s like providing a framework without a well tested set of
public API
6
With scripts oriented builds
You can have But often you have
(if you have good skills) (moreover after years …)
7
With Maven
We dream to deliver But yesterday we too often had
(Maven 3.x) (Maven 2.x)
8
Backward compatibility - Criticisms
• Migration from Maven 1 to Maven 2 was
impossible. Everything had to be re-done.
• Updates between 2.x versions and also
between 2.0.x weren’t often without side
effects.
10
Backward compatibility
• Near to 700 integration tests
• Tested for several months on a large set of
OSS projects
• 7 alphas + 3 betas versions
• A bug fix release every 6 weeks
• It’s a revolution under the hood but an
evolution for end users
11
Performances - Criticisms
• Maven is slow
• It spends its time to download the world
• Whereas everybody has multicore CPUs, it
doesn’t allow to process modules builds in
parallel
14
Performances
• A set of benchmark tools was developed to
measure Maven performances (IO, CPU,
Memory, Network …)
• Startup and execution times are reduced
» Java 5 optimizations
» Code cleanup and improvements
• Reduced Memory footprint
• Artifacts Resolution Caching
» .lastUpdated files in your local repo
» Enforce checks with –U option
15
Performances – Parallel builds
• Parallel builds
» An execution plan is predefined at startup to
define which modules could be built in //
» Requires to have up to date plugins to avoid dead
locks and some others issues
» Launch a build with 2 threads
• mvn –T 2 install
» Launch a build with 2 threads per CPU core
• mvn –T 2C install
16
Performances – mvnsh
• Performances optimizations
» Intelligent cache system (artifacts resolution,
project descriptors …)
» No need to restart a JVM for each build
• Cross platform « unix like » shell
» Alias, environment settings …
» Color highlighting
17
Performances – mvnsh
• All in one
» Includes Maven 3.x
» Allows to have color highlighting with “standard”
Maven 3.x
• Developed and freely distributed by Sonatype
18
Extensibility - Criticisms
• It is difficult and time consuming to extend
maven (write plugins)
» Many unknown technologies like Plexus for IOC
• It is difficult/impossible to reuse maven
plugins
» Its impossible to extend plugins/mojo and
lifecycles
21
Extensibility
• New APIs to improve abstraction of
underneath implementation
» Aether : to manage artifacts and repositories
• Plugin classloader partitioning
• Embeddable
• IOC replaced by Guice
» For now (3.0) a wrapper is hiding the change
» You don’t yet use Guice directly (from plugins for
example)
22
Robusness - Validations
• Many more validations in POMs (warnings or
errors)
» Missing plugins versions
» Duplicated dependencies in a POM
» Incoherent inheritance (wrong relative path or
parent not in the upper directory)
• Improved error messages with links to wiki
pages for more detailed information
25
Robusness – Artifacts management
• Parent POMs prefer to resolve from
repositories
» Version less parent will be available in a future
maven 3.x release by using the relativePath
element
• Profiles usage consolidation
» No more profiles.xml (incompatible with future
polyglot feature)
26
Robusness – Artifacts management
• No more support for legacy repository layout
for Maven 1.0
• SNAPSHOTs are always deployed with
timestamps
27
Robusness – Plugins management
• Plugin version is by default RELEASE and no
more SNAPSHOT
» Affects command-line invocation
• Plugins cannot use versions LATEST or
RELEASE
» Affects command-line invocation and POM
• Plugins are resolved only from
<pluginRepository> entries
28
Robusness – Site plugin
• Site plugin is now completely extracted from
Maven core
» It has its own lifecycle
» reporting section in POM becomes useless
(moved in plugin configuration)
29
Criticisms
• XML, we don’t like it
• POM is too verbose
• POM v4 didn’t evolve last 5 years
» When will you add new common attributes to
ease plugins configuration (encoding …)
» New feature like global exclusions
31
POM
• No change in POM syntax for Maven 3.0
• Changes will occur in 3.x versions
» New model with a new version
» Only new things
» Generation / deployment of 4.0.0 current POM to
keep backward compatibility with old maven
versions
• Mixins to allow to import POM fragments
32
POM - Polyglot
• Developed and freely distributed by Sonatype
• Extended version of Maven 3.0 using its new
embedding and extensibility capabilities
• Allow translation (read/write) from/to various
syntaxes
» Yaml
» Scala
» Groovy
• Allow macros and freeform scripting
33
Licence et copyrights
• Photos and logos belong to their respective
authors/owners
• Various ideas are coming from the excellent
presentation done by Matthew McCullough :
» http://www.slideshare.net/matthewmccullough/
maven-30-at-oredev
35
Licence et copyrights
• Content under Creative Commons 3.0
» Attribution — You must attribute the work in the manner
specified by the author or licensor (but not in any way that suggests
that they endorse you or your use of the work).
» Noncommercial — You may not use this work for commercial
purposes.
» Share Alike — If you alter, transform, or build upon this work,
you may distribute the resulting work only under the same or similar
license to this one.
• http://creativecommons.org/licenses/by-nc-sa/3.0/us/
36
Users Mailing List
• users@maven.apache.or • Blue :
g » Number of subscribers
» Traffic statistics cover a
total of 2025 days. • Red :
» Current subscribers: 1936 » Number of messages
» Current digest per day
subscribers: 48
» Total posts (2025 days):
89687
» Mean posts per day:
44.29
• http://pulse.apache.org/
39
The team
• 60 committers,
• More than 30 active in 2009,
• Several organizations like Sonatype, deliver
resources and professional support,
• A community less isolated : more interactions
with Eclipse, Jetty,
42
Some links
• The main web site :
» http://maven.apache.org
• Project’s team wiki :
» http://docs.codehaus.org/display/MAVEN
• Project’s users wiki :
» http://docs.codehaus.org/display/MAVENUSER
45
Books
• Nicolas De loof
Arnaud Héritier
» Published by Pearson
» Collection Référence
» Based on our own
experiences with
Maven.
» From beginners to
experts.
» In French only
46
Books
• Sonatype / O’Reilly :
» The Definitive Guide
» http://
www.sonatype.com/
books
» Free download
» Available in several
languages
47
Support
• Mailing lists
» http://maven.apache.org/mail-lists.html
• IRC
» irc.codehaus.org - #maven
• Forums
» http://www.developpez.net/ forum maven
» In French
• Dedicated support
» Sonatype and many others companies
51