0
Apache Maven - GenevaJUG - March 30th, 2010



                                         Arnaud Héritier
                  ...
Arnaud Héritier
●    Software Factory Manager
     eXo platform
     -    In charge of tools and
          methods




   ...
Apache Maven
CHOOSE YOUR MENU



   Licensed under a Creative Commons license
Overview
●    Definition                                       ●    Maven or not Maven, that
●    History                 ...
Ecosystem
●    Repository Managers                              ●    Continuous Integration
●    Quality Management       ...
Good & Bad Practices
●    K.I.S.S.
●    Project Organization
●    POM
●    Development




       Licensed under a Creativ...
Usecases
●    Secure your credentials
●    Build a part of your project using reactor options
●    Automate your release p...
Back to the future
●    Maven 2.x
●    Maven 3.x
●    Community




      Licensed under a Creative Commons license
Apache Maven
OVERVIEW



   Licensed under a Creative Commons license
Definition
●    Apache Maven is a software project management
     and comprehension tool.
●    Based on the concept of a ...
History
●    Initiated in 2001 by Jason Van Zyl in Alexandria, an
     Apache Jakarta project,
●    Moved to Turbine few m...
Apache Maven
CONCEPTS



   Licensed under a Creative Commons license   12
Conventions
●    1 project = 1 artifact (pom, jar, war, ear, …)

●    Standardized
     -    directories layout
          ...
POM
●    An XML file (pom.xml)                             <?xml version="1.0" encoding="UTF-8"?>!
                       ...
Reactor
●    Split your project in                            <project>!

     sub-modules                                ...
Inheritance
                                            ●     Share settings between
                                     ...
Inheritance
                                            Use a technical inheritance to organize sub-modules

             ...
Artifact Repository
●    By default :
     -    A central repository
            ●    http://repo1.maven.org/
            ...
Artifact Repository
                                            ●    By default Maven
                                    ...
Dependencies
Without Maven                   With Maven




 Licensed under a Creative Commons license
Dependencies
●    Declaratives
     -  groupId + artifactId + version (+ classifier)
     -  Type (packaging) : jar, war, ...
Dependencies
●    Scope
     -  Compile (by default) : Required to build and run the
        application
     -  Runtime :...
Dependencies
●    Define all dependencies you are using
     -    and no more !
●    If you have optional dependencies
   ...
Versions
●    Project and dependency versions
●    Two different version variants
          SNAPSHOT version
            ●...
Versions




Licensed under a Creative Commons license
Versions
●    About SNAPSHOT dependencies
     -    Maven allows the configuration of an update policy.
          The upda...
Versions

●    Range
     -  From … to …
     -  Maven automatically searches for the corresponding
        version (using...
Versions
●    Use the versions plugin to update all versions of your
     project and its modules
mvn versions:set –DnewVe...
Profiles
●    Allow to modify the default behavior of Maven by
     overriding/adding some settings
●    Use mvn help:acti...
Profiles
●    activeByDefault = If no other profile is activated
●    Activation through Maven settings
<settings>!
     ....
Profiles
●    Activation based on environment variables

<profiles>!
                                                    <...
Profiles
●    OS / Java settings
                                                    <profiles>!
                         ...
Profiles
●    Activation on present or missing files
<profiles>!
     <profile>!
       <activation>!
         <file>!
   ...
Build Lifecycle And Plugins



                                            ●    Plugin based architecture
                ...
Build Lifecycle And Plugins
Default Lifecycle                        Clean Lifecycle   Site Lifecycle
validate            ...
Build Lifecycle And Plugins
●    Many plugins
     -  Packaging
     -  Reporting
     -  IDE integration
     -  Miscella...
Apache Maven
MAVEN OR NOT MAVEN,
THAT IS THE QUESTION !


   Licensed under a Creative Commons license
Maven, the project’s choice
●    Application’s architecture
     -  The project has the freedom to divide the application ...
Maven, the project’s choice
●    Centralizes and automates                     -    Builds
     all development facets    ...
Maven, the corporate’s choice
●    Widely adopted and known
     -    Many developers
●    Developments are standardized
●...
Competitors
●    Ant + Ivy, Easy Ant, Gant, Gradle, Buildr…
●    Script oriented
     -    You can do what you want !
●   ...
With scripts oriented builds
You can have                                      But often you have
(if you have good skills...
With Maven
We dream to deliver                              But today we have too often
(Maven 3.x)                       ...
Apache Maven
ECOSYSTEM



   Licensed under a Creative Commons license
Maven’s ecosytem
●    Maven alone is nothing
●    You can integrate it with many tools
     -  A large set of plug-ins is ...
Apache Maven
REPOSITORY MANAGERS



   Licensed under a Creative Commons license
Repository Managers
●    Several products                                 ●    Basic services
     -    Sonatype Nexus (re...
Secure your builds
●    Deploy a repository manager to proxy externals
     repositories to :
     -  Avoid external netwo...
Nexus at eXo for productivity




Licensed under a Creative Commons license
Nexus at eXo for collaboration
●    Deploy 3rd Party Artifacts
●    Collaborate with Internal
     Repositories
●    Distr...
Nexus at eXo for quality
●    Ease the Burden on Central and others remote
     repositories
●    Gain Predictability and ...
Apache Maven
QUALITY MANAGEMENT



   Licensed under a Creative Commons license
Tests Automation
●    Use automated tests as often as you can
●    Many tools are available through Maven
     -  JUnit, T...
Quality Metrics
●    Extract quality metrics from your project and
     monitor them :
     -  Code style (CheckStyle)
   ...
Dependency Report




Licensed under a Creative Commons license
Sonar, a quality dashboard




Licensed under a Creative Commons license
Sonar, analyze your project




Licensed under a Creative Commons license
Sonar, Continuous Improvement ?




 Licensed under a Creative Commons license
Apache Maven
CONTINUOUS INTEGRATION



   Licensed under a Creative Commons license
Continuous Integration
●    Setup a continuous integration server to :
     -  Have a neutral and unmodified environment t...
Hudson, how the weather is ?




Licensed under a Creative Commons license
Hudson : build, test, check




Licensed under a Creative Commons license
Apache Maven
IDE



   Licensed under a Creative Commons license
Eclipse
●    Integration from maven (eclipse:eclipse)
     -  Allow many customizations
     -  Support many versions/vari...
Eclipse
●    Integration from eclipse (m2eclipse)
     -  Synchronous
     -  Nice UI and services to edit POMs
     -  Su...
Eclipse (m2eclipse)




Licensed under a Creative Commons license
Eclipse (m2eclipse)




Licensed under a Creative Commons license
Eclipse (m2eclipse)




Licensed under a Creative Commons license
Idea IntelliJ




Licensed under a Creative Commons license
Netbeans




Licensed under a Creative Commons license
Apache Maven
GOOD & BAD PRACTICES



   Licensed under a Creative Commons license
Apache Maven
KISS



   Licensed under a Creative Commons license
K.I.S.S.
●    Keep It Simple, Stupid
●    Start from scratch
     -    Do not copy/paste what you find without understandi...
Apache Maven
PROJECT ORGANIZATION
GOOD & BAD PRACTICES


   Licensed under a Creative Commons license
Project bad practices
●    Ignore Maven conventions
     -  Except if your are migrating from something else and
        t...
Project bad practices
●    Have too many modules
     -    Is there a good reason ?
            ●    Technical constraint ...
Project good practices


●    Use the default
     inheritance :
     -    The reactor project is also
          the paren...
Apache Maven
POM GOOD & BAD PRACTICES



   Licensed under a Creative Commons license
POM bad practices


●    Dependencies :
     -    DON’T confuse dependencies and
          dependencyManagement
●    Plugi...
POM bad practices
●    Profiles :
     -  DON’T create environment dependant builds
     -  DON’T rely on dependencies com...
POM good practices
●    Set versions of dependencies in project parent’s
     dependencyManagement
●    Set dependencies (...
Apache Maven
DEVELOPMENT
GOOD & BAD PRACTICES


   Licensed under a Creative Commons license
Development bad practices
●    DON’T spend your time in the terminal,
●    DON’T exchange libraries through emails,
●    D...
Development good practices
●    Keep up-to-date your version of Maven
     -    For example in 2.1 the time of dependencie...
Apache Maven
USECASES



   Licensed under a Creative Commons license
Apache Maven
SECURE YOUR CREDENTIALS



   Licensed under a Creative Commons license
Secure your credentials
●        Generate a private key
-    

         arnaud@leopard:~$ mvn --encrypt-master-password to...
Secure your credentials
●    You can move this key to another drive ~/.m2/settings.xml
-    <settingssecurity>

       <re...
Apache Maven
BUILD A PART OF YOUR PROJECT



   Licensed under a Creative Commons license
Using Reactor Options
●    Options added in maven 2.1
●    Available in 2.0.x with the maven-reactor-plugin
     -    But ...
Using Reactor Options
                                        -    arnaud@mbp-arnaud:~$ mvn install

                     ...
Using Reactor Options
                                        -    arnaud@mbp-arnaud:~$ mvn install –pl
                  ...
Using Reactor Options
                                        -    arnaud@mbp-arnaud:~$ mvn install –pl moduleD -am

     ...
Using Reactor Options
                                        -    arnaud@mbp-arnaud:~$ mvn install –pl moduleD -amd

    ...
Using Reactor Options
                                        -    arnaud@mbp-arnaud:~$ mvn install –rf moduleD

         ...
Apache Maven
RELEASE YOUR PROJECT



   Licensed under a Creative Commons license
Release of a webapp in 2002
●    Limited usage of eclipse
     -  No WTP (Only some features in WSAD),
     -  No ability ...
Release of a webapp in 2002
●    Many manual tasks
     -  Modify settings files
     -  Package JARs
     -  Copy librari...
Release of a webapp in 2002
●    One problem : The are                            ●    How long did it take ?
     always ...
Maven Release Plugin
●    Automates the release process from tagging
     sources to binaries delivery
●    Release plugin...
Maven Release Plugin




Licensed under a Creative Commons license
Configuration and Prerequisites
●    Project version (must be a SNAPSHOT version)
●    Dependencies and plugins versions m...
SCM configuration
●    SCM binaries have to be in the PATH
●    SCM credentials have to already be stored or you have to
 ...
Distribution Management
<project>
 <distributionManagement>
  <repository>
   <id>repository.exoplatform.org</id>
   <url>...
Repository credentials
<settings>
 <servers>
  <server>
   <!–- id must be the one used in distributionManagement -->
   <...
Default Release Profile in Super POM
<profile>
 <id>release-profile</id>
 <activation>
  <property>
   <name>performReleas...
Custom release profile
<project>                                               ...

 ...                                  ...
Troubleshooting Releases
●    Common errors during release:
     -  Build with release profile was tested before and fails...
Apache Maven
BACK TO THE FUTURE



   Licensed under a Creative Commons license
Apache Maven
PRODUCT



   Licensed under a Creative Commons license
Apache Maven 2.0.x
●    bugs fix
●    Last release : 2.0.11
●    No other release of 2.0.x in the future




       Licens...
Apache Maven 2.x
●    Evolutions, new features
●    Several important new features in 2.1 like
     -  Parallel downloads
...
Apache Maven 3.x
●    Do not be afraid !!!!!
●    Not final before at least
     one year
●    Full compatibility with
   ...
Apache Maven 3.x
●    What’s new :
     -  How POMs are constructed
     -  How the lifecycle is executed
     -  How the ...
Apache Maven 3.x
●    What it will change for maven users ?
     -  Any-source POM
     -  Versionless parent elements
   ...
Apache Maven 3.x
●    What it will change for maven developers ?
     -  Lifecycle extension points
     -  Plugin extensi...
Apache Maven 3.x
●    New tools
     -  Tycho : OSGI, Eclipse
     -  Mvnsh




          Licensed under a Creative Common...
Maven Shell




Licensed under a Creative Commons license
Apache Maven
COMMUNITY



   Licensed under a Creative Commons license
Users community
●    1780 subscribers on users
     mailing list




●    90 days statistics
●    Number of subscribers in...
The web site




Licensed under a Creative Commons license
Dowloads




●    Per month downloads
●    http://people.apache.org/~vgritsenko/stats/projects/
     maven.html



       ...
The team
●    60 committers,
●    More than 30 active in 2009,
●    Several organizations like Sonatype, deliver
     reso...
Commit Statistics




Licensed under a Creative Commons license
Apache Maven
CONCLUSION



   Licensed under a Creative Commons license
Conclusion
●    Today, Maven is widely adopted in corporate
     environments,
●    It provides many services,
●    It has...
Apache Maven
QUESTIONS ?



   Licensed under a Creative Commons license
Licence et copyrights
●    Photos and logos belong to their respective
     authors/owners
●    Content under Creative Com...
Apache Maven
TO GO FURTHER …



   Licensed under a Creative Commons license
Apache Maven
DOCUMENTATIONS



   Licensed under a Creative Commons license
Some links
●    The main web site :
     -    http://maven.apache.org
●    Project’s team wiki :
     -    http://docs.cod...
Books
●    Sonatype / O’Reilly :
     -    The Definitive Guide
     -    http://www.sonatype.com/
          books
     - ...
Books
●    Exist Global
     -    Better builds with Maven
     -    http://www.maestrodev.com/
          better-build-mav...
Books
●    Nicolas De loof
     Arnaud Héritier
     -    Published by Pearson
     -    Collection Référence
     -    Ba...
Apache Maven
SUPPORT



   Licensed under a Creative Commons license
Support
●    Mailing lists
     -    http://maven.apache.org/mail-lists.html
●    IRC
     -    irc.codehaus.org - #maven
...
Apache Maven
ANNEXE



   Licensed under a Creative Commons license
Setup a global mirror
<settings>
 <mirrors>
  <mirror>
   <!--This sends everything else to /public -->
   <id>global-mirr...
Upcoming SlideShare
Loading in...5
×

Geneva Jug (30th March, 2010) - Maven

2,295

Published on

Overview of Maven and its concepts
Maven and its ecosystem
Good and bad practices
Usecases
Maven, and the future of Maven 3.x
---
Delta prez @GenevaJug :
New slides : 64,65,90,95
Updated slides : 49-51;66;91;92;118
Thx @fcamblor

Published in: Technology
1 Comment
3 Likes
Statistics
Notes
No Downloads
Views
Total Views
2,295
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
73
Comments
1
Likes
3
Embeds 0
No embeds

No notes for slide

Transcript of "Geneva Jug (30th March, 2010) - Maven"

  1. 1. Apache Maven - GenevaJUG - March 30th, 2010 Arnaud Héritier eXo Platform Software Factory Manager
  2. 2. Arnaud Héritier ●  Software Factory Manager eXo platform -  In charge of tools and methods ●  Committer since 2004 and member of the Project Management Committee ●  Coauthor of « Apache Maven » published by Pearson (in French) Licensed under a Creative Commons license ●  http://aheritier.net
  3. 3. Apache Maven CHOOSE YOUR MENU Licensed under a Creative Commons license
  4. 4. Overview ●  Definition ●  Maven or not Maven, that ●  History is the question ! -  Maven, the project choice ●  Concepts -  Maven, the corporate choice -  Conventions -  Competitors -  POM -  Reactor and Modules -  Inheritance -  Artifact Repository -  Dependency -  Version -  Profiles   Build Lifecycle And Plugins Licensed under a Creative Commons license
  5. 5. Ecosystem ●  Repository Managers ●  Continuous Integration ●  Quality Management ●  IDE -  Tests Automation -  Eclipse -  Quality Metrics Reports -  Idea IntelliJ -  Project Reports -  Netbeans -  Sonar Licensed under a Creative Commons license
  6. 6. Good & Bad Practices ●  K.I.S.S. ●  Project Organization ●  POM ●  Development Licensed under a Creative Commons license
  7. 7. Usecases ●  Secure your credentials ●  Build a part of your project using reactor options ●  Automate your release process -  (at least the technical part) Licensed under a Creative Commons license
  8. 8. Back to the future ●  Maven 2.x ●  Maven 3.x ●  Community Licensed under a Creative Commons license
  9. 9. Apache Maven OVERVIEW Licensed under a Creative Commons license
  10. 10. 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. Licensed under a Creative Commons license
  11. 11. 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 … coming soon !!! Licensed under a Creative Commons license
  12. 12. Apache Maven CONCEPTS Licensed under a Creative Commons license 12
  13. 13. Conventions ●  1 project = 1 artifact (pom, jar, war, ear, …) ●  Standardized -  directories layout ●  *.java to compile in src/[main|test]/java ●  *.xml, *.properties needed in classpath and to bundle in archive in src/[main|test]/resources ●  … -  project descriptor (POM) -  build lifecycle Licensed under a Creative Commons license 13
  14. 14. POM ●  An XML file (pom.xml) <?xml version="1.0" encoding="UTF-8"?>! <project>! <modelVersion>4.0.0</modelVersion>! ●  Describing <groupId>net.aheritier.samples</groupId>! <artifactId>simple-webapp</artifactId>! -  Project identification <version>1.1-SNAPSHOT</version>! <packaging>war</packaging>! -  Project version <name>Simple webapp</name>! -  Project description <inceptionYear>2007</inceptionYear>! <dependencies>! -  Build settings <dependency>! <groupId>org.springframework</groupId>! -  Dependencies <artifactId>spring-struts</artifactId>! -  … <version>2.0.2</version>! </dependency>! ...! </dependencies>! </project>! Licensed under a Creative Commons license
  15. 15. Reactor ●  Split your project in <project>! sub-modules ...! <modules>! ●  Maven computes the <module>moduleA</module>! build order from <module>moduleB</module>! dependencies <module>moduleC</module>! between sub- <module>moduleD</module>! modules. <module>moduleE</module> ! ●  Modules have to be <module>moduleF</module>! defined in the POM </modules>! ...! -  No auto-discovery for </project>! performance reasons Licensed under a Creative Commons license
  16. 16. Inheritance ●  Share settings between projects/modules ●  By default the parent project is supposed to be in the parent directory (../) <parent>! <groupId>net.aheritier.sample</groupId>! <artifactId>my-parent</artifactId>! <version>1.0.0-SNAPSHOT<version>! </parent>! Licensed under a Creative Commons license
  17. 17. Inheritance Use a technical inheritance to organize sub-modules Use assembly to package batchs Insert README in all artifacts Use clirr to validate backward compatibility Licensed under a Creative Commons license
  18. 18. Artifact Repository ●  By default : -  A central repository ●  http://repo1.maven.org/ maven2 ●  Several dozen of Gb of OSS libraries -  A local repository ●  ${user.home}/.m2/repository ●  All artifacts -  Used by maven and its plugins -  Used by your projects (dependencies) -  Produced by your projects Licensed under a Creative Commons license
  19. 19. Artifact Repository ●  By default Maven downloads artifacts required by the project or itself from central ●  Downloaded artifacts are stored in the local repository ●  Used to store : -  Project’s binaries -  Project’s dependencies -  Maven and plug-ins binaries Licensed under a Creative Commons license
  20. 20. Dependencies Without Maven With Maven Licensed under a Creative Commons license
  21. 21. Dependencies ●  Declaratives -  groupId + artifactId + version (+ classifier) -  Type (packaging) : jar, war, pom, ear, … ●  Transitives -  Lib A needs Lib B -  Lib B needs Lib C -  Thus Lib A needs Lib C Licensed under a Creative Commons license
  22. 22. Dependencies ●  Scope -  Compile (by default) : Required to build and run the application -  Runtime : not required to build the application but needed at runtime ●  Ex : taglibs -  Provided : required to build the application but not needed at runtime (provided by the container) ●  Ex : Servlet API, Driver SGBD, … -  Test : required to build and launch tests but not needed by the application itself to build and run ●  Ex : Junit, TestNG, DbUnit, … -  System : local library with absolute path ●  Ex : software products Licensed under a Creative Commons license
  23. 23. Dependencies ●  Define all dependencies you are using -  and no more ! ●  If you have optional dependencies -  Perhaps you should have optional modules instead ●  Cleanup your dependencies with -  mvn dependency:analyze! ●  Study your dependencies with -  mvn dependency:tree! -  mvn dependency:list! Licensed under a Creative Commons license
  24. 24. Versions ●  Project and dependency versions ●  Two different version variants   SNAPSHOT version ●  The version number ends with –SNAPSHOT ●  The project is in development ●  Deliveries are changing over the time and are overridden after each build ●  Artifacts are deployed with a timestamp on remote repositories   RELEASE version ●  The version number doesn’t end with –SNAPSHOT ●  Binaries won’t change Licensed under a Creative Commons license
  25. 25. Versions Licensed under a Creative Commons license
  26. 26. Versions ●  About SNAPSHOT dependencies -  Maven allows the configuration of an update policy. The update policy defines the recurrence of checks if there is a new SNAPSHOT version available on the remote repository : ●  always ●  daily (by default) ●  interval:X (a given period in minutes) ●  never -  Must not be used in a released project ●  They can change thus the release also  ●  The release plugin will enforce it  Licensed under a Creative Commons license
  27. 27. Versions ●  Range -  From … to … -  Maven automatically searches for the corresponding version (using the update policy for released artifacts) -  To use with caution ●  Risk of non reproducibility of the build ●  Risk of side effects on projects depending on yours. Licensed under a Creative Commons license
  28. 28. Versions ●  Use the versions plugin to update all versions of your project and its modules mvn versions:set –DnewVersion=A.B.C-SNAPSHOT! Licensed under a Creative Commons license
  29. 29. Profiles ●  Allow to modify the default behavior of Maven by overriding/adding some settings ●  Use mvn help:active-profiles to debug ●  Explicit activation or deactivation mvn <phases or goals> ! -PprofileId1,-profileId2 ! -P!profileId3! Licensed under a Creative Commons license
  30. 30. Profiles ●  activeByDefault = If no other profile is activated ●  Activation through Maven settings <settings>! ...! <activeProfiles>! <activeProfile>profile-1</activeProfile>! </activeProfiles>! ...! </settings>! Licensed under a Creative Commons license
  31. 31. Profiles ●  Activation based on environment variables <profiles>! <profiles>! <profile>! <profile>! <activation>! <activation>! <property>! <property>! <name>run-its</name>! <name>!skip-enforce</name>! <value>true</value>! </property>! </property>! </activation>! </activation>! ...! ...! </profile>! </profile>! </profiles>! </profiles>! Licensed under a Creative Commons license
  32. 32. Profiles ●  OS / Java settings <profiles>! <profile>! <profiles>! <activation>! <os>! <profile>! <name>Windows XP</name>! <activation>! <family>Windows</family>! <jdk>[1.3,1.6)</jdk>! <arch>x86</arch>! </activation>! <version>5.1.2600</version>! ...! </os>! </profile>! </activation>! </profiles>! ...! </profile>! </profiles>! Licensed under a Creative Commons license
  33. 33. Profiles ●  Activation on present or missing files <profiles>! <profile>! <activation>! <file>! <missing>${project.build.directory}/generated-sources/ axistools/wsdl2java/</missing>! </file>! </activation>! ...! </profile>! </profiles>! Licensed under a Creative Commons license
  34. 34. Build Lifecycle And Plugins ●  Plugin based architecture for a great extensibility ●  Standardized lifecycle to build all types of archetypes Licensed under a Creative Commons license
  35. 35. Build Lifecycle And Plugins Default Lifecycle Clean Lifecycle Site Lifecycle validate pre-clean pre-site initialize clean site generate-sources post-clean post-site process-sources site-deploy generate-resources process-resources compile process-classes generate-test-sources process-test-sources generate-test-resources process-test-resources test-compile process-test-classes test prepare-package package pre-integration-test integration-test post-integration-test verify install deploy Licensed under a Creative Commons license
  36. 36. Build Lifecycle And Plugins ●  Many plugins -  Packaging -  Reporting -  IDE integration -  Miscellaneous tools integration ●  Many locations -  maven.apache.org -  mojo.codehaus.org -  code.google.com -  … Licensed under a Creative Commons license
  37. 37. Apache Maven MAVEN OR NOT MAVEN, THAT IS THE QUESTION ! Licensed under a Creative Commons license
  38. 38. Maven, the project’s choice ●  Application’s architecture -  The project has the freedom to divide the application in modules -  Maven doesn’t limit the evolution of the application architecture ●  Dependencies management -  Declarative : Maven automatically downloads them and builds the classpath -  Transitive : We define only what the module needs itself Licensed under a Creative Commons license
  39. 39. Maven, the project’s choice ●  Centralizes and automates -  Builds all development facets -  Tests (build, tests, releases) -  Packages ●  One thing it cannot do for -  Deploys you : to develop  -  Documents -  Checks and reports about the quality of developments Licensed under a Creative Commons license
  40. 40. Maven, the corporate’s choice ●  Widely adopted and known -  Many developers ●  Developments are standardized ●  Decrease of costs -  Reuse of knowledge -  Reuse of configuration fragments -  Reuse of process and code fragments ●  Product quality improvement -  Reports and monitoring Licensed under a Creative Commons license
  41. 41. 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 public API  Licensed under a Creative Commons license
  42. 42. With scripts oriented builds You can have But often you have (if you have good skills) (moreover after years …) Licensed under a Creative Commons license
  43. 43. With Maven We dream to deliver But today we have too often (Maven 3.x) (Maven 2.x) Licensed under a Creative Commons license
  44. 44. Apache Maven ECOSYSTEM Licensed under a Creative Commons license
  45. 45. Maven’s ecosytem ●  Maven alone is nothing ●  You can integrate it with many tools -  A large set of plug-ins is already available -  You can define your own plug-ins Licensed under a Creative Commons license
  46. 46. Apache Maven REPOSITORY MANAGERS Licensed under a Creative Commons license
  47. 47. Repository Managers ●  Several products ●  Basic services -  Sonatype Nexus (replaced -  Search artifacts Proximity) -  Browse repositories -  Jfrog Artifactory -  Proxy external repositories -  Apache Archiva -  Host internal repositories -  Security Licensed under a Creative Commons license
  48. 48. Secure your builds ●  Deploy a repository manager to proxy externals repositories to : -  Avoid external network outages -  Avoid external repository unavailabilities -  To reduce your company’s external network usage -  To increase the speed of artifact downloads ●  Additional services offered by such servers : -  Artifacts procurement to filter what is coming from the outside -  Staging repository to validate your release before deploying it Licensed under a Creative Commons license
  49. 49. Nexus at eXo for productivity Licensed under a Creative Commons license
  50. 50. Nexus at eXo for collaboration ●  Deploy 3rd Party Artifacts ●  Collaborate with Internal Repositories ●  Distribute to the community with Public Repositories ●  Distribute to customers with Private Repositories Licensed under a Creative Commons license
  51. 51. Nexus at eXo for quality ●  Ease the Burden on Central and others remote repositories ●  Gain Predictability and Scalability ●  Control and Audit Dependencies and Releases ●  Stage releases Licensed under a Creative Commons license
  52. 52. Apache Maven QUALITY MANAGEMENT Licensed under a Creative Commons license
  53. 53. Tests Automation ●  Use automated tests as often as you can ●  Many tools are available through Maven -  JUnit, TestNG – unit tests, -  Selenium, Canoo – web GUI test, -  Fitnesse, Greenpepper – functional tests, -  SoapUI – web services tests -  JMeter – performances tests -  And many more frameworks are available to reply your needs Licensed under a Creative Commons license
  54. 54. Quality Metrics ●  Extract quality metrics from your project and monitor them : -  Code style (CheckStyle) -  Bad practices or potential bugs (PMD, FindBugs, Clirr) -  Tests coverage (Cobertura, Emma, Clover) -  … ●  You can use blocking rules -  For example, I break the build if the upward compatibility of public APIs is broken ●  You can use reports -  Reports are available in a web site generated by Maven -  Or in a quality dashboard like Sonar Licensed under a Creative Commons license
  55. 55. Dependency Report Licensed under a Creative Commons license
  56. 56. Sonar, a quality dashboard Licensed under a Creative Commons license
  57. 57. Sonar, analyze your project Licensed under a Creative Commons license
  58. 58. Sonar, Continuous Improvement ? Licensed under a Creative Commons license
  59. 59. Apache Maven CONTINUOUS INTEGRATION Licensed under a Creative Commons license
  60. 60. Continuous Integration ●  Setup a continuous integration server to : -  Have a neutral and unmodified environment to run your tests -  Quickly react when ●  The build fails (compilation failure for example) ●  A test fails ●  A quality metric is bad -  Continuously improve the quality of your project and your productivity ●  Many products -  Hudson, Bamboo, TeamCity, Continuum, Cruisecontrol, … Licensed under a Creative Commons license
  61. 61. Hudson, how the weather is ? Licensed under a Creative Commons license
  62. 62. Hudson : build, test, check Licensed under a Creative Commons license
  63. 63. Apache Maven IDE Licensed under a Creative Commons license
  64. 64. Eclipse ●  Integration from maven (eclipse:eclipse) -  Allow many customizations -  Support many versions/variants of eclipse -  Support many usages (ear …) -  Doesn’t support projects with “pom” packaging -  Few support from dev team -  Many bugs in classpath management -  Asynchronous ●  You have to regenerate and reload project each time you change a POM) Licensed under a Creative Commons license
  65. 65. Eclipse ●  Integration from eclipse (m2eclipse) -  Synchronous -  Nice UI and services to edit POMs -  Support projects with “pom” packaging -  Doesn’t support all usages like EAR with WTP -  Doesn’t support very well a large number of modules -  Slow down eclipse on large projects because of a lack of support of incremental build in Maven 2.x and its plugins Licensed under a Creative Commons license
  66. 66. Eclipse (m2eclipse) Licensed under a Creative Commons license
  67. 67. Eclipse (m2eclipse) Licensed under a Creative Commons license
  68. 68. Eclipse (m2eclipse) Licensed under a Creative Commons license
  69. 69. Idea IntelliJ Licensed under a Creative Commons license
  70. 70. Netbeans Licensed under a Creative Commons license
  71. 71. Apache Maven GOOD & BAD PRACTICES Licensed under a Creative Commons license
  72. 72. Apache Maven KISS Licensed under a Creative Commons license
  73. 73. K.I.S.S. ●  Keep It Simple, Stupid ●  Start from scratch -  Do not copy/paste what you find without understanding ●  Use only what you need -  It’s not because maven offers many features that you need to use them ●  Filtering ●  Modules ●  Profiles ●  … Licensed under a Creative Commons license
  74. 74. Apache Maven PROJECT ORGANIZATION GOOD & BAD PRACTICES Licensed under a Creative Commons license
  75. 75. Project bad practices ●  Ignore Maven conventions -  Except if your are migrating from something else and the target has to be to follow them. -  Except if they are not compatible with your IDE ●  Different versions in sub-modules -  In that case they are standalone projects. ●  Too many inheritance levels -  It makes the POMs maintenance more complex -  Where should I set this plugin parameter ? In which parent ? Licensed under a Creative Commons license
  76. 76. Project bad practices ●  Have too many modules -  Is there a good reason ? ●  Technical constraint ? ●  Team organization ? -  It increases the build time ●  Many more artifacts to generate ●  Dependencies resolution more complex -  It involves more complex developments ●  More modules to import in your IDE ●  More modules to update … Licensed under a Creative Commons license
  77. 77. Project good practices ●  Use the default inheritance : -  The reactor project is also the parent of its modules. -  Configuration is easier : ●  No need to redefine SCM settings, site distribution settings … Licensed under a Creative Commons license
  78. 78. Apache Maven POM GOOD & BAD PRACTICES Licensed under a Creative Commons license
  79. 79. POM bad practices ●  Dependencies : -  DON’T confuse dependencies and dependencyManagement ●  Plugins : -  DON’T confuse plugins and pluginManagement -  DON’T use AntRun plugin everywhere -  DON’T let Maven choose plugins versions for you Licensed under a Creative Commons license
  80. 80. POM bad practices ●  Profiles : -  DON’T create environment dependant builds -  DON’T rely on dependencies coming from profiles (there is no transitive activation of profiles) ●  Reporting and quality -  DON’T activate on an existing project all reports with default configuration -  DON’T control formatting rules without giving settings for IDEs. ●  DON’T put everything you find in your POM. Licensed under a Creative Commons license
  81. 81. POM good practices ●  Set versions of dependencies in project parent’s dependencyManagement ●  Set dependencies (groupId, artifactId, scope) in each module they are used ●  Use the dependency plugin (from apache) and versions plugin (from mojo) to analyze, cleanup and update your dependencies. Licensed under a Creative Commons license
  82. 82. Apache Maven DEVELOPMENT GOOD & BAD PRACTICES Licensed under a Creative Commons license
  83. 83. Development bad practices ●  DON’T spend your time in the terminal, ●  DON’T exchange libraries through emails, ●  DON’T always use "-Dmaven.test.skip=true” ●  DON’T manually do releases Licensed under a Creative Commons license
  84. 84. Development good practices ●  Keep up-to-date your version of Maven -  For example in 2.1 the time of dependencies/modules resolution decreased a lot (Initialization of a project of 150 modules passed from 8 minutes to less than 1) ●  Use the reactor plugin (Maven < 2.1) or native reactor command line options (Maven >= 2.1) to rebuild only a subpart of your project : -  All modules depending on module XXX -  All modules used to build XXX ●  Try to not use Maven features not supported by your IDE (resources filtering with the plugin eclipse:eclipse) Licensed under a Creative Commons license
  85. 85. Apache Maven USECASES Licensed under a Creative Commons license
  86. 86. Apache Maven SECURE YOUR CREDENTIALS Licensed under a Creative Commons license
  87. 87. Secure your credentials ●  Generate a private key -  
 arnaud@leopard:~$ mvn --encrypt-master-password toto
 {dZPuZ74YTJ0HnWHGm4zgfDlruYQNda1xib9vAVf2vvY=}
 ●  We save the private key in ~/.m2/settings-security.xml <settingssecurity>! <master>{dZPuZ74YTJ0HnWHGm4zgfDlruYQNda1xib9vAVf2vvY=}</master>! </settingssecurity>! Licensed under a Creative Commons license
  88. 88. Secure your credentials ●  You can move this key to another drive ~/.m2/settings.xml -  <settingssecurity>
 <relocation>/Volumes/ArnaudUsbKey/secure/settings-security.xml</relocation>
 </settingssecurity>! ●  You create an encrypted version of your server password -  arnaud@mbp-arnaud:~$ mvn --encrypt-password titi {SbC9Fl2jA4oHZtz5Fcefp2q1tMXEtBkz9QiKljPiHss=}! ●  You register it in your settings -  <settings>
 ...
 <servers>
 ...
 <server>
 <id>mon.server</id>
 <username>arnaud</username>
 <password>{SbC9Fl2jA4oHZtz5Fcefp2q1tMXEtBkz9QiKljPiHss=}</password>
 </server>
 ...
 </servers>
 ...
 </settings>! Licensed under a Creative Commons license
  89. 89. Apache Maven BUILD A PART OF YOUR PROJECT Licensed under a Creative Commons license
  90. 90. Using Reactor Options ●  Options added in maven 2.1 ●  Available in 2.0.x with the maven-reactor-plugin -  But syntax is longer ●  Allow to control what you want to build in your project Licensed under a Creative Commons license
  91. 91. Using Reactor Options -  arnaud@mbp-arnaud:~$ mvn install
 [INFO] ------------------------------------------------
 [INFO] Reactor Summary:
 [INFO]
 [INFO] Project ....................... SUCCESS [2.132s]
 [INFO] ModuleA ....................... SUCCESS [5.574s]
 [INFO] ModuleB ....................... SUCCESS [0.455s]
 [INFO] ModuleC ....................... SUCCESS [0.396s]
 [INFO] ModuleD ....................... SUCCESS [0.462s]
 [INFO] ModuleE ....................... SUCCESS [0.723s]
 [INFO] ModuleF ....................... SUCCESS [0.404s] ! ●  Builds everything from A to F Licensed under a Creative Commons license
  92. 92. Using Reactor Options -  arnaud@mbp-arnaud:~$ mvn install –pl moduleE,moduleB
 [INFO] -------------------------------------------
 [INFO] Reactor Summary:
 [INFO]
 [INFO] ModuleB .................. SUCCESS [2.774s]
 [INFO] ModuleE .................. SUCCESS [1.008s]
 ●  Builds only modules B and E ●  Following dependencies order ●  -pl --project-list: Build the specified reactor projects instead of all projects Licensed under a Creative Commons license
  93. 93. Using Reactor Options -  arnaud@mbp-arnaud:~$ mvn install –pl moduleD -am
 [INFO] ------------------------------------------
 [INFO] Reactor Summary:
 [INFO]
 [INFO] ModuleA ................. SUCCESS [4.075s]
 [INFO] ModuleB ................. SUCCESS [0.468s]
 [INFO] ModuleC ................. SUCCESS [0.354s]
 [INFO] ModuleD ................. SUCCESS [0.384s]
 ●  Builds module D (-pl) and all modules it uses as dependencies ●  -am --also-make: If a project list is specified, also make projects that the list depends on ●  Usecase : Build all modules required for a war, ear, … Licensed under a Creative Commons license
  94. 94. Using Reactor Options -  arnaud@mbp-arnaud:~$ mvn install –pl moduleD -amd
 [INFO] ------------------------------------------
 [INFO] Reactor Summary:
 [INFO]
 [INFO] ModuleD ................. SUCCESS [4.881s]
 [INFO] ModuleE ................. SUCCESS [0.478s]
 [INFO] ModuleF ................. SUCCESS [0.427s]
 ●  Builds module D (-pl) and all modules which depend on it ●  -amd --also-make-dependents: If a project list is specified, also make projects that depend on projects on the list ●  Usecase : Check that a change in a module didn’t break others which are using it Licensed under a Creative Commons license
  95. 95. Using Reactor Options -  arnaud@mbp-arnaud:~$ mvn install –rf moduleD
 [INFO] ------------------------------------------
 [INFO] Reactor Summary:
 [INFO]
 [INFO] ModuleD ................. SUCCESS [9.707s]
 [INFO] ModuleE ................. SUCCESS [0.625s]
 [INFO] ModuleF ................. SUCCESS [0.679s] [INFO] Project ................. SUCCESS [2.467s]
 ●  Restarts all the build from module D (-rf) ●  -rf,--resume-from <arg> : Resume reactor from specified project ●  Usecase : The build failed a 1st time in module D, you fixed it, and restart the build were it was to end it. Licensed under a Creative Commons license
  96. 96. Apache Maven RELEASE YOUR PROJECT Licensed under a Creative Commons license
  97. 97. Release of a webapp in 2002 ●  Limited usage of eclipse -  No WTP (Only some features in WSAD), -  No ability to produce WARs Licensed under a Creative Commons license
  98. 98. Release of a webapp in 2002 ●  Many manual tasks -  Modify settings files -  Package JARs -  Copy libraries (external and internal) in a « lib » directory -  Package WAR (often with a zip command) -  Tag the code (CVS) -  Send the package on the integration server using FTP -  Deploy the package with AS console Licensed under a Creative Commons license
  99. 99. Release of a webapp in 2002 ●  One problem : The are ●  How long did it take ? always problems -  When everything is ok : 15 -  Error in config files minutes -  Missing dependencies -  When there’s a problem : ½ -  Missing file day or more -  Last minute fix which created a bug -  And many other possibilies .. Licensed under a Creative Commons license
  100. 100. Maven Release Plugin ●  Automates the release process from tagging sources to binaries delivery ●  Release plugin main goals: -  Prepare : To update maven versions and information in POMs and tag the code -  Perform : To deploy binaries in a maven repository ●  After that you can just automate the deployment on the AS using cargo for example. Licensed under a Creative Commons license
  101. 101. Maven Release Plugin Licensed under a Creative Commons license
  102. 102. Configuration and Prerequisites ●  Project version (must be a SNAPSHOT version) ●  Dependencies and plugins versions mustn’t be SNAPSHOTs Licensed under a Creative Commons license
  103. 103. SCM configuration ●  SCM binaries have to be in the PATH ●  SCM credentials have to already be stored or you have to pass them in command line with : –Dusername=XXX –Dpassword=XXX <scm> <connection> scm:svn:http://svn.exoplatform.org/projects/parent/trunk </connection> <developerConnection> scm:svn:http://svn.exoplatform.org/projects/parent/trunk </developerConnection> <url> http://fisheye.exoplatform.org/browse/projects/parent/trunk </url> </scm> Licensed under a Creative Commons license
  104. 104. Distribution Management <project> <distributionManagement> <repository> <id>repository.exoplatform.org</id> <url>${exo.releases.repo.url}</url> </repository> . . . </distributionManagement> . . . <properties> <exo.releases.repo.url> http://repository.exoplatform.org/content/repositories/exo-releases </exo.releases.repo.url> . . . </properties> </project> Licensed under a Creative Commons license
  105. 105. Repository credentials <settings> <servers> <server> <!–- id must be the one used in distributionManagement --> <id>repository.exoplatform.org</id> <username>aheritier</username> <password>{ABCDEFGHIJKLMNOPQRSTUVWYZ}</password> </server> </servers> </settings> Licensed under a Creative Commons license
  106. 106. Default Release Profile in Super POM <profile> <id>release-profile</id> <activation> <property> <name>performRelease</name> <value>true</value> </property> </activation> <build> <plugins> <!–- Configuration to generate sources and javadoc jars --> ... </plugins> </build> </profile> Licensed under a Creative Commons license
  107. 107. Custom release profile <project> ... ... <profiles> <build> <profile> <pluginManagement> <id>myreleaseprofile</id> <plugins> <build> <plugin> <!-– what you want to customize the behavior of the build when you do a release --> <groupId>org.apache.maven.plugins</groupId> </build> <artifactId>maven-release-plugin</artifactId> </profile> <version>2.0-beta-9</version> </profiles> <configuration> ... <useReleaseProfile>false</useReleaseProfile> </project> <arguments>-Pmyreleaseprofile</arguments> </configuration> </plugin> </plugins> </pluginManagement> </build> Licensed under a Creative Commons license
  108. 108. Troubleshooting Releases ●  Common errors during release: -  Build with release profile was tested before and fails -  Local modifications -  Current version is not a SNAPSHOT -  SNAPSHOTs in dependencies and/or plugins -  Missing some configuration (scm, distribMgt, …) -  Tag already exists -  Unable to deploy project to the Repository -  Connection problems Licensed under a Creative Commons license
  109. 109. Apache Maven BACK TO THE FUTURE Licensed under a Creative Commons license
  110. 110. Apache Maven PRODUCT Licensed under a Creative Commons license
  111. 111. Apache Maven 2.0.x ●  bugs fix ●  Last release : 2.0.11 ●  No other release of 2.0.x in the future Licensed under a Creative Commons license
  112. 112. Apache Maven 2.x ●  Evolutions, new features ●  Several important new features in 2.1 like -  Parallel downloads -  Encrypted passwords ●  Last release : 2.2.1 Licensed under a Creative Commons license
  113. 113. Apache Maven 3.x ●  Do not be afraid !!!!! ●  Not final before at least one year ●  Full compatibility with maven 2.x projects Licensed under a Creative Commons license
  114. 114. Apache Maven 3.x ●  What’s new : -  How POMs are constructed -  How the lifecycle is executed -  How the plugin manager executes -  How artifacts are resolved -  How it can be embedded -  How dependency injection is done Licensed under a Creative Commons license
  115. 115. Apache Maven 3.x ●  What it will change for maven users ? -  Any-source POM -  Versionless parent elements -  Mixins : a compositional form of Maven POM configuration -  Better IDE integration -  Error & integrity reporting ●  Much improved error reporting where we will provide links to each identifiable problem we know of. There are currently 42 common things that can go wrong. ●  Don't allow builds where versions come from non-project sources like local settings and CLI parameters ●  Don't allow builds where versions come from profiles that have to be activated manually Licensed under a Creative Commons license
  116. 116. Apache Maven 3.x ●  What it will change for maven developers ? -  Lifecycle extension points -  Plugin extension points -  Incremental build support -  Queryable lifecycle -  Extensible reporting Licensed under a Creative Commons license
  117. 117. Apache Maven 3.x ●  New tools -  Tycho : OSGI, Eclipse -  Mvnsh Licensed under a Creative Commons license
  118. 118. Maven Shell Licensed under a Creative Commons license
  119. 119. Apache Maven COMMUNITY Licensed under a Creative Commons license
  120. 120. Users community ●  1780 subscribers on users mailing list ●  90 days statistics ●  Number of subscribers in blue ●  Number of messages per day in red ●  http://people.apache.org/~coar/mlists.html Licensed under a Creative Commons license
  121. 121. The web site Licensed under a Creative Commons license
  122. 122. Dowloads ●  Per month downloads ●  http://people.apache.org/~vgritsenko/stats/projects/ maven.html Licensed under a Creative Commons license
  123. 123. 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, Licensed under a Creative Commons license
  124. 124. Commit Statistics Licensed under a Creative Commons license
  125. 125. Apache Maven CONCLUSION Licensed under a Creative Commons license
  126. 126. Conclusion ●  Today, Maven is widely adopted in corporate environments, ●  It provides many services, ●  It has an important and really active community of users and developers ●  Many resources to learn to use it and a professional support are available ●  A product probably far from being perfect but on rails for the future ●  Many things to do -  We need you ! Licensed under a Creative Commons license
  127. 127. Apache Maven QUESTIONS ? Licensed under a Creative Commons license
  128. 128. Licence et copyrights ●  Photos and logos belong to their respective authors/owners ●  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/ Licensed under a Creative Commons license
  129. 129. Apache Maven TO GO FURTHER … Licensed under a Creative Commons license
  130. 130. Apache Maven DOCUMENTATIONS Licensed under a Creative Commons license
  131. 131. 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 Licensed under a Creative Commons license
  132. 132. Books ●  Sonatype / O’Reilly : -  The Definitive Guide -  http://www.sonatype.com/ books -  Free download -  Available in several languages ●  Soon in French Licensed under a Creative Commons license
  133. 133. Books ●  Exist Global -  Better builds with Maven -  http://www.maestrodev.com/ better-build-maven -  Free download Licensed under a Creative Commons license
  134. 134. 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 -  Available on 20th November Licensed under a Creative Commons license
  135. 135. Apache Maven SUPPORT Licensed under a Creative Commons license
  136. 136. 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 some others companies Licensed under a Creative Commons license
  137. 137. Apache Maven ANNEXE Licensed under a Creative Commons license
  138. 138. Setup a global mirror <settings> <mirrors> <mirror> <!--This sends everything else to /public --> <id>global-mirror</id> <mirrorOf>external:*</mirrorOf> <url>http://repository.exoplatform.org/content/groups/all</url> </mirror> </mirrors> <profiles> <profile> <id>mirror</id> <!--Enable snapshots for the built in central repo to direct --> <!--all requests to the repository manager via the mirror --> <repositories> <repository> <id>central</id> <url>http://central</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>central</id> <url>http://central</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles> <activeProfiles> <!--make the profile active all the time --> <activeProfile>mirror</activeProfile> </activeProfiles> </settings> Licensed under a Creative Commons license
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×