SlideShare a Scribd company logo
Apache Maven – JUG Lausanne – April 8th, 2010



                                           Arnaud Héritier
                                             eXo Platform
                                 Software Factory Manager
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
Apache Maven
CHOOSE YOUR MENU



   Licensed under a Creative Commons license
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
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
Good & Bad Practices
●    K.I.S.S.
●    Project Organization
●    POM
●    Development




       Licensed under a Creative Commons license
Usecases
●    Secure your credentials
●    Build a part of your project using reactor options
●    Automate your release process
     -    (at least the technical part)
●    Setup a global mirror




          Licensed under a Creative Commons license
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 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
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
Apache Maven
CONCEPTS



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

●    Standardized
     -  project descriptor (POM)
     -  build lifecycle
     -  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
             ●  target directory for generated stuffs (sources, classes, …)

             ●  …
          Licensed under a Creative Commons license                           13
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
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
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
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
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
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
Dependencies
Without Maven                   With Maven




 Licensed under a Creative Commons license
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
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
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
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
Versions




Licensed under a Creative Commons license
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
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
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
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
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
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
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
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
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
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
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
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 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
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
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
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
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
With Maven
We dream to deliver                              But today we have too often
(Maven 3.x)                                      (Maven 2.x)




     Licensed under a Creative Commons license
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 already available
     -  You can define your own plug-ins




          Licensed under a Creative Commons license
Apache Maven
REPOSITORY MANAGERS



   Licensed under a Creative Commons license
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
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
Nexus at eXo for productivity




Licensed under a Creative Commons license
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
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
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, 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
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
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 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
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/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
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
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 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
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
        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
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
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
Apache Maven
POM GOOD & BAD PRACTICES



   Licensed under a Creative Commons license
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
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
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
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,
●    DON’T always use "-Dmaven.test.skip=true”
●    DON’T manually do releases




       Licensed under a Creative Commons license
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
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 toto

         {dZPuZ74YTJ0HnWHGm4zgfDlruYQNda1xib9vAVf2vvY=}




●        We save the private key in ~/.m2/settings-security.xml

<settingssecurity>!
     <master>{dZPuZ74YTJ0HnWHGm4zgfDlruYQNda1xib9vAVf2vvY=}</master>!
</settingssecurity>!




            Licensed under a Creative Commons license
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
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 syntax is longer
●    Allow to control what you want to build in your
     project




          Licensed under a Creative Commons license
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
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
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
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
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
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 to produce WARs




          Licensed under a Creative Commons license
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
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
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
Maven Release Plugin




Licensed under a Creative Commons license
Configuration and Prerequisites
●    Project version (must be a SNAPSHOT version)
●    Dependencies and plugins versions mustn’t be
     SNAPSHOTs




       Licensed under a Creative Commons license
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
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.acme.com/myproject/trunk</connection>!
 <developerConnection>scm:svn:https://svn.acme.com/myproject/trunk</developerConnection>!
 <url>http://fisheye.acme.com/browse/myproject/trunk</url>!
</scm>!




       Licensed under a Creative Commons license
Distribution Management
●    Where you want to upload released binaries
     ●  The url of a repository dedicated for your project/

        corporate maven deliveries in your repository manager

<project>!
 <distributionManagement>!
  <repository>!
   <id>repository.acme.com</id>!
   <url>${acme.releases.repo.url}</url>!                   This id will be used in user’s
  </repository>!                                           maven settings
 . . .!                                                    (~/.m2/settings.xml)
 </distributionManagement>!
 . . . !
 <properties>!
  <acme.releases.repo.url>http://repo.acme.com/acme-releases</acme.releases.repo.url>!
  . . .!
 </properties>!                                            Often useful to have a property
</project>!                                                to test the release process on a
                                                            fake repository, to validate a
                                                            repo manager ...
       Licensed under a Creative Commons license
Repository credentials
●    One server entry is required per different repository id in
     distribution management of projects
●    In a corporate environment, use a unique id for all
     repositories hosted on repository managers using same
     credentials (corporate LDAP …)
<settings>!
 ...!
 <servers>!
  <server>!
   <id>repository.acme.com</id>!
   <username>aheritier</username>!                     This id is the one defined in
   <password>{ABCDEFGHIJKLMNOPQRSTUVWYZ}</password>!   distributionManagement entry of
  </server>!                                           the project to release
  ...!
 </servers>!
 ...!
</settings>!


       Licensed under a Creative Commons license
Default Release Profile in Super POM
●    This profile is used when you generate binaries of the
     release with “mvn release:perform”
●    By default, generates sources and javadocs jars for each
     module.
<profile>!
 <id>release-profile</id>!
 <activation>!
  <property>!
   <name>performRelease</name>!
   <value>true</value>!                            This activation could be used in
  </property>!                                     profiles you want to activate in
 </activation>!                                    the release process
 <build>!
  <plugins>!
  ...!
  </plugins>!                                      Configuration to generate
 </build>!                                         sources and javadoc jars with
</profile>!                                        basic setting

       Licensed under a Creative Commons license
Custom release profile
<project>!
 ...!
 <build>!
  <pluginManagement>!
   <plugins>!
    <plugin>!
      <groupId>org.apache.maven.plugins</groupId>!
      <artifactId>maven-release-plugin</artifactId>!
      <version>2.0</version>!
      <configuration>!
       <useReleaseProfile>false</useReleaseProfile>!
       <releaseProfiles>myreleaseprofile</releaseProfiles>!   Don’t use the default profile
      </configuration>!
    </plugin>!
   </plugins>!
                                                              Use our customized profile
  </pluginManagement>!
 </build>!
 ...!
 <profiles>!
  <profile>!
   <id>myreleaseprofile</id>!
   <build>!
    ...!                                                      Our customized profile
   </build>!
  </profile>!                                                 Customize the behavior of
 </profiles>!                                                 the build for a release
 ...!                                                         Take care to test is before
</project>!
                                                              the release !!
         Licensed under a Creative Commons license
Apache Maven
SETUP A GLOBAL MIRROR



   Licensed under a Creative Commons license
Why should we setup a global mirror ?
●    To simplify users and projects settings
●    To control where binaries are coming from
     -  To not rely on project’s repositories
     -  To use only the corporate repository manager

●    To improve build performances
     -    By reducing the number of requests to find a missing
          artefact




          Licensed under a Creative Commons license
How should we setup a global mirror ?
 <setting>

   <mirrors>

     <mirror>

       <id>global-mirror</id>

       <mirrorOf>external:*</mirrorOf>

       <url>http://repo.acme.com/public</url>

     </mirror>

                                                              Send all requests to this url
   </mirrors>

   <profiles>

     <profile>

       <id>mirror</id>

       <repositories>

         <repository>

            <id>central</id>

            <url>http://central</url>

            <releases><enabled>true</enabled></releases>

                                                              Use « central » id to override
            <snapshots><enabled>true</enabled></snapshots>
   default maven configuration
         </repository>

       </repositories>
                                       Enable snapshots
       <pluginRepositories>

         <pluginRepository>

            <id>central</id>

            <url>http://central</url>

            <releases><enabled>true</enabled></releases>

            <snapshots><enabled>true</enabled></snapshots>

         </pluginRepository>

       </pluginRepositories>

     </profile>

   </profiles>

   <activeProfiles>

     <activeProfile>mirror</activeProfile>

   </activeProfiles>

 </settings>     !                                            make the profile active all the
                                                              time
     Licensed under a Creative Commons license
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




       Licensed under a Creative Commons license
Apache Maven 2.x
●    Evolutions, new features
●    Several important new features in 2.1 like
     -  Parallel downloads
     -  Encrypted passwords
     -  Reactor command line options
●    Last release : 2.2.1




          Licensed under a Creative Commons license
Apache Maven 3.x
●    Do not be afraid !!!!!
●    Full compatibility with maven 2.x projects
      -    Or at least at 99,99999%
●    Availability in 2010 (2nd half)
●    Why Maven 3.X ?
      -    To build new foundations for the future
      -    The major part of the code was reviewed / rewritten
             ●   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
Apache Maven 3.x - robustness
●    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
●    Backward compatibility
     -    Several thousands of integration tests


          Licensed under a Creative Commons license
Apache Maven 3.x - performances
●    Many optimizations
●    New support of parallel builds of modules
●    New incremental (partial) build
     -    To improve IDE integration




          Licensed under a Creative Commons license
Apache Maven 3.x – new features
●    Any-source POM
     -    If you don’t like XML, choose another DSL
●    Versionless parent elements
     -    If you don’t use versions or release plugins to
          automatically update them
●    Mixins
     -    a compositional form of Maven POM configuration
●    Global excludes



          Licensed under a Creative Commons license
Apache Maven 3.x
●    What it will change for maven developers ?
     -  Lifecycle extension points
     -  Plugin extension points
     -  Incremental build support
     -  Queryable lifecycle
     -  Extensible reporting
     -  Bye bye Plexus, welcome JSR 330 & Google Guice
     -  Well defined and documented APIs




          Licensed under a Creative Commons license
Apache Maven 3.x – New tools
                                            ●    mvnsh
                                                 -    A cross-platform shell
                                                      dedicated to maven
                                            ●    Tycho
                                                 -    Maven ready for OSGI and
                                                      Eclipse developments




Licensed under a Creative Commons license
In Apache Maven 3.0 ?
●    A backward compatibility near to 100% for projects
     and plugins
●    A totally new implementation
     -  A greater robustness with a better reporting and more
        readable logs
     -  Performances improvements and new parallel builds
     -  A better integration for others tools like IDE or
        continuous integration servers
●    No change in current POM format



          Licensed under a Creative Commons license
Apache Maven
COMMUNITY



   Licensed under a Creative Commons license
Users Mailing List
●    users@maven.apache.org
     -    Traffic statistics cover a total
          of 1697 days.
     -    Current subscribers: 1861
     -    Current digest subscribers:
          47
     -    Total posts (1697 days):
          80633                                       ●    Blue :
     -    Mean posts per day: 47.52
                                                           -    Number of subscribers
●    http://pulse.apache.org/
                                                      ●    Red :
                                                           -    Number of messages per
                                                                day

          Licensed under a Creative Commons license
Apache Maven Web Site




Licensed under a Creative Commons license
Dowloads




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



       Licensed under a Creative Commons license
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
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 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. Maven 3.0 is a new start.
●    Many things to do
     -    We need you !
          Licensed under a Creative Commons license
Apache Maven
QUESTIONS ?



   Licensed under a Creative Commons license
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
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.codehaus.org/display/MAVEN
●    Project’s users wiki :
     -    http://docs.codehaus.org/display/MAVENUSER




          Licensed under a Creative Commons license
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




          Licensed under a Creative Commons license
Books
●    Sonatype / O’Reilly :
     -    The Definitive Guide
     -    http://www.sonatype.com/
          books
     -    Free download
     -    Available in several
          languages




          Licensed under a Creative Commons license
Books
●    Exist Global
     -    Better builds with Maven
     -    http://www.maestrodev.com/
          better-build-maven
     -    Free download




          Licensed under a Creative Commons license
Apache Maven
SUPPORT



   Licensed under a Creative Commons license
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


          Licensed under a Creative Commons license

More Related Content

What's hot

Liferay maven sdk
Liferay maven sdkLiferay maven sdk
Liferay maven sdk
Mika Koivisto
 
Introduction to maven
Introduction to mavenIntroduction to maven
Introduction to maven
Manos Georgopoulos
 
Maven
MavenMaven
An introduction to Maven
An introduction to MavenAn introduction to Maven
An introduction to Maven
Joao Pereira
 
An Introduction to Maven Part 1
An Introduction to Maven Part 1An Introduction to Maven Part 1
An Introduction to Maven Part 1
MD Sayem Ahmed
 
Flex Continuous Quality Builds Flex & (Ant || Maven)
Flex Continuous Quality Builds Flex & (Ant || Maven)Flex Continuous Quality Builds Flex & (Ant || Maven)
Flex Continuous Quality Builds Flex & (Ant || Maven)
François Le Droff
 
Maven 3 Overview
Maven 3  OverviewMaven 3  Overview
Maven 3 Overview
Mike Ensor
 
Apache Maven
Apache MavenApache Maven
Apache Maven
Rahul Tanwani
 
Apache maven 2 overview
Apache maven 2 overviewApache maven 2 overview
Apache maven 2 overview
Return on Intelligence
 
Intelligent Projects with Maven - DevFest Istanbul
Intelligent Projects with Maven - DevFest IstanbulIntelligent Projects with Maven - DevFest Istanbul
Intelligent Projects with Maven - DevFest Istanbul
Mert Çalışkan
 
How the Atlassian Plugin SDK Cured Cancer and Reunited Soundgarden - Atlassia...
How the Atlassian Plugin SDK Cured Cancer and Reunited Soundgarden - Atlassia...How the Atlassian Plugin SDK Cured Cancer and Reunited Soundgarden - Atlassia...
How the Atlassian Plugin SDK Cured Cancer and Reunited Soundgarden - Atlassia...
Atlassian
 
4 maven junit
4 maven junit4 maven junit
4 maven junit
Honnix Liang
 
Note - Apache Maven Intro
Note - Apache Maven IntroNote - Apache Maven Intro
Note - Apache Maven Intro
boyw165
 
Apache Maven - eXo VN office presentation
Apache Maven - eXo VN office presentationApache Maven - eXo VN office presentation
Apache Maven - eXo VN office presentation
Arnaud Héritier
 
Hands On with Maven
Hands On with MavenHands On with Maven
Hands On with Maven
Sid Anand
 
Maven
MavenMaven
An Introduction to Maven
An Introduction to MavenAn Introduction to Maven
An Introduction to Maven
Vadym Lotar
 
Java Builds with Maven and Ant
Java Builds with Maven and AntJava Builds with Maven and Ant
Java Builds with Maven and Ant
David Noble
 
Maven Overview
Maven OverviewMaven Overview
Maven Overview
FastConnect
 

What's hot (19)

Liferay maven sdk
Liferay maven sdkLiferay maven sdk
Liferay maven sdk
 
Introduction to maven
Introduction to mavenIntroduction to maven
Introduction to maven
 
Maven
MavenMaven
Maven
 
An introduction to Maven
An introduction to MavenAn introduction to Maven
An introduction to Maven
 
An Introduction to Maven Part 1
An Introduction to Maven Part 1An Introduction to Maven Part 1
An Introduction to Maven Part 1
 
Flex Continuous Quality Builds Flex & (Ant || Maven)
Flex Continuous Quality Builds Flex & (Ant || Maven)Flex Continuous Quality Builds Flex & (Ant || Maven)
Flex Continuous Quality Builds Flex & (Ant || Maven)
 
Maven 3 Overview
Maven 3  OverviewMaven 3  Overview
Maven 3 Overview
 
Apache Maven
Apache MavenApache Maven
Apache Maven
 
Apache maven 2 overview
Apache maven 2 overviewApache maven 2 overview
Apache maven 2 overview
 
Intelligent Projects with Maven - DevFest Istanbul
Intelligent Projects with Maven - DevFest IstanbulIntelligent Projects with Maven - DevFest Istanbul
Intelligent Projects with Maven - DevFest Istanbul
 
How the Atlassian Plugin SDK Cured Cancer and Reunited Soundgarden - Atlassia...
How the Atlassian Plugin SDK Cured Cancer and Reunited Soundgarden - Atlassia...How the Atlassian Plugin SDK Cured Cancer and Reunited Soundgarden - Atlassia...
How the Atlassian Plugin SDK Cured Cancer and Reunited Soundgarden - Atlassia...
 
4 maven junit
4 maven junit4 maven junit
4 maven junit
 
Note - Apache Maven Intro
Note - Apache Maven IntroNote - Apache Maven Intro
Note - Apache Maven Intro
 
Apache Maven - eXo VN office presentation
Apache Maven - eXo VN office presentationApache Maven - eXo VN office presentation
Apache Maven - eXo VN office presentation
 
Hands On with Maven
Hands On with MavenHands On with Maven
Hands On with Maven
 
Maven
MavenMaven
Maven
 
An Introduction to Maven
An Introduction to MavenAn Introduction to Maven
An Introduction to Maven
 
Java Builds with Maven and Ant
Java Builds with Maven and AntJava Builds with Maven and Ant
Java Builds with Maven and Ant
 
Maven Overview
Maven OverviewMaven Overview
Maven Overview
 

Similar to Lausanne Jug (08th April, 2010) - Maven

Apache Maven at GenevaJUG by Arnaud Héritier
Apache Maven at GenevaJUG by Arnaud HéritierApache Maven at GenevaJUG by Arnaud Héritier
Apache Maven at GenevaJUG by Arnaud Héritier
GenevaJUG
 
Maven
MavenMaven
Introduction in Apache Maven2
Introduction in Apache Maven2Introduction in Apache Maven2
Introduction in Apache Maven2
Heiko Scherrer
 
Java Build Tools
Java Build ToolsJava Build Tools
Java Build Tools
­Avishek A
 
Maven introduction in Mule
Maven introduction in MuleMaven introduction in Mule
Maven introduction in Mule
Shahid Shaik
 
Maven university-course
Maven university-courseMaven university-course
Maven university-course
Olivier Lamy
 
BMO - Intelligent Projects with Maven
BMO - Intelligent Projects with MavenBMO - Intelligent Projects with Maven
BMO - Intelligent Projects with Maven
Mert Çalışkan
 
Jenkins advance topic
Jenkins advance topicJenkins advance topic
Jenkins advance topic
Gourav Varma
 
Apache Maven 2 Part 2
Apache Maven 2 Part 2Apache Maven 2 Part 2
Apache Maven 2 Part 2
Return on Intelligence
 
How maven makes your development group look like a bunch of professionals.
How maven makes your development group look like a bunch of professionals.How maven makes your development group look like a bunch of professionals.
How maven makes your development group look like a bunch of professionals.
Fazreil Amreen Abdul Jalil
 
Maven Introduction
Maven IntroductionMaven Introduction
Maven Introduction
Sandeep Chawla
 
Maven
MavenMaven
S/W Design and Modularity using Maven
S/W Design and Modularity using MavenS/W Design and Modularity using Maven
S/W Design and Modularity using Maven
Scheidt & Bachmann
 
Maven
MavenMaven
Introduction to maven, its configuration, lifecycle and relationship to JS world
Introduction to maven, its configuration, lifecycle and relationship to JS worldIntroduction to maven, its configuration, lifecycle and relationship to JS world
Introduction to maven, its configuration, lifecycle and relationship to JS world
Dmitry Bakaleinik
 
Extending Build to the Client: A Maven User's Guide to Grunt.js
Extending Build to the Client: A Maven User's Guide to Grunt.jsExtending Build to the Client: A Maven User's Guide to Grunt.js
Extending Build to the Client: A Maven User's Guide to Grunt.js
Petr Jiricka
 
Maven
MavenMaven
Java is evolving rapidly: Maven helps you staying on track
Java is evolving rapidly:  Maven helps you staying on trackJava is evolving rapidly:  Maven helps you staying on track
Java is evolving rapidly: Maven helps you staying on track
Arnaud Héritier
 
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Martin Bergljung
 
Maven
MavenMaven

Similar to Lausanne Jug (08th April, 2010) - Maven (20)

Apache Maven at GenevaJUG by Arnaud Héritier
Apache Maven at GenevaJUG by Arnaud HéritierApache Maven at GenevaJUG by Arnaud Héritier
Apache Maven at GenevaJUG by Arnaud Héritier
 
Maven
MavenMaven
Maven
 
Introduction in Apache Maven2
Introduction in Apache Maven2Introduction in Apache Maven2
Introduction in Apache Maven2
 
Java Build Tools
Java Build ToolsJava Build Tools
Java Build Tools
 
Maven introduction in Mule
Maven introduction in MuleMaven introduction in Mule
Maven introduction in Mule
 
Maven university-course
Maven university-courseMaven university-course
Maven university-course
 
BMO - Intelligent Projects with Maven
BMO - Intelligent Projects with MavenBMO - Intelligent Projects with Maven
BMO - Intelligent Projects with Maven
 
Jenkins advance topic
Jenkins advance topicJenkins advance topic
Jenkins advance topic
 
Apache Maven 2 Part 2
Apache Maven 2 Part 2Apache Maven 2 Part 2
Apache Maven 2 Part 2
 
How maven makes your development group look like a bunch of professionals.
How maven makes your development group look like a bunch of professionals.How maven makes your development group look like a bunch of professionals.
How maven makes your development group look like a bunch of professionals.
 
Maven Introduction
Maven IntroductionMaven Introduction
Maven Introduction
 
Maven
MavenMaven
Maven
 
S/W Design and Modularity using Maven
S/W Design and Modularity using MavenS/W Design and Modularity using Maven
S/W Design and Modularity using Maven
 
Maven
MavenMaven
Maven
 
Introduction to maven, its configuration, lifecycle and relationship to JS world
Introduction to maven, its configuration, lifecycle and relationship to JS worldIntroduction to maven, its configuration, lifecycle and relationship to JS world
Introduction to maven, its configuration, lifecycle and relationship to JS world
 
Extending Build to the Client: A Maven User's Guide to Grunt.js
Extending Build to the Client: A Maven User's Guide to Grunt.jsExtending Build to the Client: A Maven User's Guide to Grunt.js
Extending Build to the Client: A Maven User's Guide to Grunt.js
 
Maven
MavenMaven
Maven
 
Java is evolving rapidly: Maven helps you staying on track
Java is evolving rapidly:  Maven helps you staying on trackJava is evolving rapidly:  Maven helps you staying on track
Java is evolving rapidly: Maven helps you staying on track
 
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
 
Maven
MavenMaven
Maven
 

More from Arnaud Héritier

Devops Recto-Verso @ DevoxxMA
Devops Recto-Verso @ DevoxxMADevops Recto-Verso @ DevoxxMA
Devops Recto-Verso @ DevoxxMA
Arnaud Héritier
 
Quand java prend de la vitesse, apache maven vous garde sur les rails
Quand java prend de la vitesse, apache maven vous garde sur les railsQuand java prend de la vitesse, apache maven vous garde sur les rails
Quand java prend de la vitesse, apache maven vous garde sur les rails
Arnaud Héritier
 
Sonar In Action 20110302-vn
Sonar In Action 20110302-vnSonar In Action 20110302-vn
Sonar In Action 20110302-vn
Arnaud Héritier
 
2014 August - eXo Software Factory Overview
2014 August - eXo Software Factory Overview2014 August - eXo Software Factory Overview
2014 August - eXo Software Factory Overview
Arnaud Héritier
 
CRaSH @ JUGSummerCamp 2012 - Quickie
CRaSH @ JUGSummerCamp 2012 - QuickieCRaSH @ JUGSummerCamp 2012 - Quickie
CRaSH @ JUGSummerCamp 2012 - Quickie
Arnaud Héritier
 
LavaJUG-Maven 3.x, will it lives up to its promises
LavaJUG-Maven 3.x, will it lives up to its promisesLavaJUG-Maven 3.x, will it lives up to its promises
LavaJUG-Maven 3.x, will it lives up to its promises
Arnaud Héritier
 
Hands on iOS developments with jenkins
Hands on iOS developments with jenkinsHands on iOS developments with jenkins
Hands on iOS developments with jenkins
Arnaud Héritier
 
eXo Software Factory Overview
eXo Software Factory OvervieweXo Software Factory Overview
eXo Software Factory Overview
Arnaud Héritier
 
Mobile developments at eXo
Mobile developments at eXoMobile developments at eXo
Mobile developments at eXo
Arnaud Héritier
 
Jenkins User Meetup - eXo usages of Jenkins
Jenkins User Meetup - eXo usages of JenkinsJenkins User Meetup - eXo usages of Jenkins
Jenkins User Meetup - eXo usages of Jenkins
Arnaud Héritier
 
ToursJUG-Maven 3.x, will it lives up to its promises
ToursJUG-Maven 3.x, will it lives up to its promisesToursJUG-Maven 3.x, will it lives up to its promises
ToursJUG-Maven 3.x, will it lives up to its promises
Arnaud Héritier
 
YaJUG-Maven 3.x, will it lives up to its promises
YaJUG-Maven 3.x, will it lives up to its promisesYaJUG-Maven 3.x, will it lives up to its promises
YaJUG-Maven 3.x, will it lives up to its promises
Arnaud Héritier
 
BordeauxJUG-Maven 3.x, will it lives up to its promises
BordeauxJUG-Maven 3.x, will it lives up to its promisesBordeauxJUG-Maven 3.x, will it lives up to its promises
BordeauxJUG-Maven 3.x, will it lives up to its promises
Arnaud Héritier
 
ToulouseJUG-Maven 3.x, will it lives up to its promises
ToulouseJUG-Maven 3.x, will it lives up to its promisesToulouseJUG-Maven 3.x, will it lives up to its promises
ToulouseJUG-Maven 3.x, will it lives up to its promises
Arnaud Héritier
 
LyonJUG - Maven 3.x, will it live up to its promises?
LyonJUG - Maven 3.x, will it live up to its promises?LyonJUG - Maven 3.x, will it live up to its promises?
LyonJUG - Maven 3.x, will it live up to its promises?
Arnaud Héritier
 
20091112 - Mars Jug - Apache Maven
20091112 - Mars Jug - Apache Maven20091112 - Mars Jug - Apache Maven
20091112 - Mars Jug - Apache Maven
Arnaud Héritier
 
20080311 - Paris Vi Master STL TA - Initiation Maven
20080311 - Paris Vi Master STL TA - Initiation Maven20080311 - Paris Vi Master STL TA - Initiation Maven
20080311 - Paris Vi Master STL TA - Initiation Maven
Arnaud Héritier
 
20081008 - Tours Jug - Apache Maven
20081008  - Tours Jug - Apache Maven20081008  - Tours Jug - Apache Maven
20081008 - Tours Jug - Apache Maven
Arnaud Héritier
 
20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven
Arnaud Héritier
 
20080513 - Paris Jug - Maven à La Demande
20080513 - Paris Jug - Maven à La Demande20080513 - Paris Jug - Maven à La Demande
20080513 - Paris Jug - Maven à La Demande
Arnaud Héritier
 

More from Arnaud Héritier (20)

Devops Recto-Verso @ DevoxxMA
Devops Recto-Verso @ DevoxxMADevops Recto-Verso @ DevoxxMA
Devops Recto-Verso @ DevoxxMA
 
Quand java prend de la vitesse, apache maven vous garde sur les rails
Quand java prend de la vitesse, apache maven vous garde sur les railsQuand java prend de la vitesse, apache maven vous garde sur les rails
Quand java prend de la vitesse, apache maven vous garde sur les rails
 
Sonar In Action 20110302-vn
Sonar In Action 20110302-vnSonar In Action 20110302-vn
Sonar In Action 20110302-vn
 
2014 August - eXo Software Factory Overview
2014 August - eXo Software Factory Overview2014 August - eXo Software Factory Overview
2014 August - eXo Software Factory Overview
 
CRaSH @ JUGSummerCamp 2012 - Quickie
CRaSH @ JUGSummerCamp 2012 - QuickieCRaSH @ JUGSummerCamp 2012 - Quickie
CRaSH @ JUGSummerCamp 2012 - Quickie
 
LavaJUG-Maven 3.x, will it lives up to its promises
LavaJUG-Maven 3.x, will it lives up to its promisesLavaJUG-Maven 3.x, will it lives up to its promises
LavaJUG-Maven 3.x, will it lives up to its promises
 
Hands on iOS developments with jenkins
Hands on iOS developments with jenkinsHands on iOS developments with jenkins
Hands on iOS developments with jenkins
 
eXo Software Factory Overview
eXo Software Factory OvervieweXo Software Factory Overview
eXo Software Factory Overview
 
Mobile developments at eXo
Mobile developments at eXoMobile developments at eXo
Mobile developments at eXo
 
Jenkins User Meetup - eXo usages of Jenkins
Jenkins User Meetup - eXo usages of JenkinsJenkins User Meetup - eXo usages of Jenkins
Jenkins User Meetup - eXo usages of Jenkins
 
ToursJUG-Maven 3.x, will it lives up to its promises
ToursJUG-Maven 3.x, will it lives up to its promisesToursJUG-Maven 3.x, will it lives up to its promises
ToursJUG-Maven 3.x, will it lives up to its promises
 
YaJUG-Maven 3.x, will it lives up to its promises
YaJUG-Maven 3.x, will it lives up to its promisesYaJUG-Maven 3.x, will it lives up to its promises
YaJUG-Maven 3.x, will it lives up to its promises
 
BordeauxJUG-Maven 3.x, will it lives up to its promises
BordeauxJUG-Maven 3.x, will it lives up to its promisesBordeauxJUG-Maven 3.x, will it lives up to its promises
BordeauxJUG-Maven 3.x, will it lives up to its promises
 
ToulouseJUG-Maven 3.x, will it lives up to its promises
ToulouseJUG-Maven 3.x, will it lives up to its promisesToulouseJUG-Maven 3.x, will it lives up to its promises
ToulouseJUG-Maven 3.x, will it lives up to its promises
 
LyonJUG - Maven 3.x, will it live up to its promises?
LyonJUG - Maven 3.x, will it live up to its promises?LyonJUG - Maven 3.x, will it live up to its promises?
LyonJUG - Maven 3.x, will it live up to its promises?
 
20091112 - Mars Jug - Apache Maven
20091112 - Mars Jug - Apache Maven20091112 - Mars Jug - Apache Maven
20091112 - Mars Jug - Apache Maven
 
20080311 - Paris Vi Master STL TA - Initiation Maven
20080311 - Paris Vi Master STL TA - Initiation Maven20080311 - Paris Vi Master STL TA - Initiation Maven
20080311 - Paris Vi Master STL TA - Initiation Maven
 
20081008 - Tours Jug - Apache Maven
20081008  - Tours Jug - Apache Maven20081008  - Tours Jug - Apache Maven
20081008 - Tours Jug - Apache Maven
 
20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven
 
20080513 - Paris Jug - Maven à La Demande
20080513 - Paris Jug - Maven à La Demande20080513 - Paris Jug - Maven à La Demande
20080513 - Paris Jug - Maven à La Demande
 

Recently uploaded

[Talk] Moving Beyond Spaghetti Infrastructure [AOTB] 2024-07-04.pdf
[Talk] Moving Beyond Spaghetti Infrastructure [AOTB] 2024-07-04.pdf[Talk] Moving Beyond Spaghetti Infrastructure [AOTB] 2024-07-04.pdf
[Talk] Moving Beyond Spaghetti Infrastructure [AOTB] 2024-07-04.pdf
Kief Morris
 
RPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptx
RPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptxRPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptx
RPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptx
SynapseIndia
 
(CISOPlatform Summit & SACON 2024) Digital Personal Data Protection Act.pdf
(CISOPlatform Summit & SACON 2024) Digital Personal Data Protection Act.pdf(CISOPlatform Summit & SACON 2024) Digital Personal Data Protection Act.pdf
(CISOPlatform Summit & SACON 2024) Digital Personal Data Protection Act.pdf
Priyanka Aash
 
find out more about the role of autonomous vehicles in facing global challenges
find out more about the role of autonomous vehicles in facing global challengesfind out more about the role of autonomous vehicles in facing global challenges
find out more about the role of autonomous vehicles in facing global challenges
huseindihon
 
Acumatica vs. Sage Intacct vs. NetSuite _ NOW CFO.pdf
Acumatica vs. Sage Intacct vs. NetSuite _ NOW CFO.pdfAcumatica vs. Sage Intacct vs. NetSuite _ NOW CFO.pdf
Acumatica vs. Sage Intacct vs. NetSuite _ NOW CFO.pdf
BrainSell Technologies
 
How to Build a Profitable IoT Product.pptx
How to Build a Profitable IoT Product.pptxHow to Build a Profitable IoT Product.pptx
How to Build a Profitable IoT Product.pptx
Adam Dunkels
 
Litestack talk at Brighton 2024 (Unleashing the power of SQLite for Ruby apps)
Litestack talk at Brighton 2024 (Unleashing the power of SQLite for Ruby apps)Litestack talk at Brighton 2024 (Unleashing the power of SQLite for Ruby apps)
Litestack talk at Brighton 2024 (Unleashing the power of SQLite for Ruby apps)
Muhammad Ali
 
Integrating Kafka with MuleSoft 4 and usecase
Integrating Kafka with MuleSoft 4 and usecaseIntegrating Kafka with MuleSoft 4 and usecase
Integrating Kafka with MuleSoft 4 and usecase
shyamraj55
 
Uncharted Together- Navigating AI's New Frontiers in Libraries
Uncharted Together- Navigating AI's New Frontiers in LibrariesUncharted Together- Navigating AI's New Frontiers in Libraries
Uncharted Together- Navigating AI's New Frontiers in Libraries
Brian Pichman
 
The importance of Quality Assurance for ICT Standardization
The importance of Quality Assurance for ICT StandardizationThe importance of Quality Assurance for ICT Standardization
The importance of Quality Assurance for ICT Standardization
Axel Rennoch
 
Feature sql server terbaru performance.pptx
Feature sql server terbaru performance.pptxFeature sql server terbaru performance.pptx
Feature sql server terbaru performance.pptx
ssuser1915fe1
 
The Role of IoT in Australian Mobile App Development - PDF Guide
The Role of IoT in Australian Mobile App Development - PDF GuideThe Role of IoT in Australian Mobile App Development - PDF Guide
The Role of IoT in Australian Mobile App Development - PDF Guide
Shiv Technolabs
 
CHAPTER-8 COMPONENTS OF COMPUTER SYSTEM CLASS 9 CBSE
CHAPTER-8 COMPONENTS OF COMPUTER SYSTEM CLASS 9 CBSECHAPTER-8 COMPONENTS OF COMPUTER SYSTEM CLASS 9 CBSE
CHAPTER-8 COMPONENTS OF COMPUTER SYSTEM CLASS 9 CBSE
kumarjarun2010
 
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-InTrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
TrustArc
 
"Mastering Graphic Design: Essential Tips and Tricks for Beginners and Profes...
"Mastering Graphic Design: Essential Tips and Tricks for Beginners and Profes..."Mastering Graphic Design: Essential Tips and Tricks for Beginners and Profes...
"Mastering Graphic Design: Essential Tips and Tricks for Beginners and Profes...
Anant Gupta
 
Best Practices for Effectively Running dbt in Airflow.pdf
Best Practices for Effectively Running dbt in Airflow.pdfBest Practices for Effectively Running dbt in Airflow.pdf
Best Practices for Effectively Running dbt in Airflow.pdf
Tatiana Al-Chueyr
 
High Profile Girls Call ServiCe Hyderabad 0000000000 Tanisha Best High Class ...
High Profile Girls Call ServiCe Hyderabad 0000000000 Tanisha Best High Class ...High Profile Girls Call ServiCe Hyderabad 0000000000 Tanisha Best High Class ...
High Profile Girls Call ServiCe Hyderabad 0000000000 Tanisha Best High Class ...
aslasdfmkhan4750
 
Figma AI Design Generator_ In-Depth Review.pdf
Figma AI Design Generator_ In-Depth Review.pdfFigma AI Design Generator_ In-Depth Review.pdf
Figma AI Design Generator_ In-Depth Review.pdf
Management Institute of Skills Development
 
Data Integration Basics: Merging & Joining Data
Data Integration Basics: Merging & Joining DataData Integration Basics: Merging & Joining Data
Data Integration Basics: Merging & Joining Data
Safe Software
 
Pigging Unit Lubricant Oil Blending Plant
Pigging Unit Lubricant Oil Blending PlantPigging Unit Lubricant Oil Blending Plant
Pigging Unit Lubricant Oil Blending Plant
LINUS PROJECTS (INDIA)
 

Recently uploaded (20)

[Talk] Moving Beyond Spaghetti Infrastructure [AOTB] 2024-07-04.pdf
[Talk] Moving Beyond Spaghetti Infrastructure [AOTB] 2024-07-04.pdf[Talk] Moving Beyond Spaghetti Infrastructure [AOTB] 2024-07-04.pdf
[Talk] Moving Beyond Spaghetti Infrastructure [AOTB] 2024-07-04.pdf
 
RPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptx
RPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptxRPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptx
RPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptx
 
(CISOPlatform Summit & SACON 2024) Digital Personal Data Protection Act.pdf
(CISOPlatform Summit & SACON 2024) Digital Personal Data Protection Act.pdf(CISOPlatform Summit & SACON 2024) Digital Personal Data Protection Act.pdf
(CISOPlatform Summit & SACON 2024) Digital Personal Data Protection Act.pdf
 
find out more about the role of autonomous vehicles in facing global challenges
find out more about the role of autonomous vehicles in facing global challengesfind out more about the role of autonomous vehicles in facing global challenges
find out more about the role of autonomous vehicles in facing global challenges
 
Acumatica vs. Sage Intacct vs. NetSuite _ NOW CFO.pdf
Acumatica vs. Sage Intacct vs. NetSuite _ NOW CFO.pdfAcumatica vs. Sage Intacct vs. NetSuite _ NOW CFO.pdf
Acumatica vs. Sage Intacct vs. NetSuite _ NOW CFO.pdf
 
How to Build a Profitable IoT Product.pptx
How to Build a Profitable IoT Product.pptxHow to Build a Profitable IoT Product.pptx
How to Build a Profitable IoT Product.pptx
 
Litestack talk at Brighton 2024 (Unleashing the power of SQLite for Ruby apps)
Litestack talk at Brighton 2024 (Unleashing the power of SQLite for Ruby apps)Litestack talk at Brighton 2024 (Unleashing the power of SQLite for Ruby apps)
Litestack talk at Brighton 2024 (Unleashing the power of SQLite for Ruby apps)
 
Integrating Kafka with MuleSoft 4 and usecase
Integrating Kafka with MuleSoft 4 and usecaseIntegrating Kafka with MuleSoft 4 and usecase
Integrating Kafka with MuleSoft 4 and usecase
 
Uncharted Together- Navigating AI's New Frontiers in Libraries
Uncharted Together- Navigating AI's New Frontiers in LibrariesUncharted Together- Navigating AI's New Frontiers in Libraries
Uncharted Together- Navigating AI's New Frontiers in Libraries
 
The importance of Quality Assurance for ICT Standardization
The importance of Quality Assurance for ICT StandardizationThe importance of Quality Assurance for ICT Standardization
The importance of Quality Assurance for ICT Standardization
 
Feature sql server terbaru performance.pptx
Feature sql server terbaru performance.pptxFeature sql server terbaru performance.pptx
Feature sql server terbaru performance.pptx
 
The Role of IoT in Australian Mobile App Development - PDF Guide
The Role of IoT in Australian Mobile App Development - PDF GuideThe Role of IoT in Australian Mobile App Development - PDF Guide
The Role of IoT in Australian Mobile App Development - PDF Guide
 
CHAPTER-8 COMPONENTS OF COMPUTER SYSTEM CLASS 9 CBSE
CHAPTER-8 COMPONENTS OF COMPUTER SYSTEM CLASS 9 CBSECHAPTER-8 COMPONENTS OF COMPUTER SYSTEM CLASS 9 CBSE
CHAPTER-8 COMPONENTS OF COMPUTER SYSTEM CLASS 9 CBSE
 
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-InTrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
 
"Mastering Graphic Design: Essential Tips and Tricks for Beginners and Profes...
"Mastering Graphic Design: Essential Tips and Tricks for Beginners and Profes..."Mastering Graphic Design: Essential Tips and Tricks for Beginners and Profes...
"Mastering Graphic Design: Essential Tips and Tricks for Beginners and Profes...
 
Best Practices for Effectively Running dbt in Airflow.pdf
Best Practices for Effectively Running dbt in Airflow.pdfBest Practices for Effectively Running dbt in Airflow.pdf
Best Practices for Effectively Running dbt in Airflow.pdf
 
High Profile Girls Call ServiCe Hyderabad 0000000000 Tanisha Best High Class ...
High Profile Girls Call ServiCe Hyderabad 0000000000 Tanisha Best High Class ...High Profile Girls Call ServiCe Hyderabad 0000000000 Tanisha Best High Class ...
High Profile Girls Call ServiCe Hyderabad 0000000000 Tanisha Best High Class ...
 
Figma AI Design Generator_ In-Depth Review.pdf
Figma AI Design Generator_ In-Depth Review.pdfFigma AI Design Generator_ In-Depth Review.pdf
Figma AI Design Generator_ In-Depth Review.pdf
 
Data Integration Basics: Merging & Joining Data
Data Integration Basics: Merging & Joining DataData Integration Basics: Merging & Joining Data
Data Integration Basics: Merging & Joining Data
 
Pigging Unit Lubricant Oil Blending Plant
Pigging Unit Lubricant Oil Blending PlantPigging Unit Lubricant Oil Blending Plant
Pigging Unit Lubricant Oil Blending Plant
 

Lausanne Jug (08th April, 2010) - Maven

  • 1. Apache Maven – JUG Lausanne – April 8th, 2010 Arnaud Héritier eXo Platform Software Factory Manager
  • 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. Apache Maven CHOOSE YOUR MENU Licensed under a Creative Commons license
  • 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. 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. Good & Bad Practices ●  K.I.S.S. ●  Project Organization ●  POM ●  Development Licensed under a Creative Commons license
  • 7. Usecases ●  Secure your credentials ●  Build a part of your project using reactor options ●  Automate your release process -  (at least the technical part) ●  Setup a global mirror Licensed under a Creative Commons license
  • 8. Back to the future ●  Maven 2.x ●  Maven 3.x ●  Community Licensed under a Creative Commons license
  • 9. Apache Maven OVERVIEW Licensed under a Creative Commons license
  • 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. 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. Apache Maven CONCEPTS Licensed under a Creative Commons license 12
  • 13. Conventions ●  1 project = 1 artifact (pom, jar, war, ear, …) ●  Standardized -  project descriptor (POM) -  build lifecycle -  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 ●  target directory for generated stuffs (sources, classes, …) ●  … Licensed under a Creative Commons license 13
  • 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. 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. 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. 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. 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. 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. Dependencies Without Maven With Maven Licensed under a Creative Commons license
  • 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. 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. 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. 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. Versions Licensed under a Creative Commons license
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Apache Maven MAVEN OR NOT MAVEN, THAT IS THE QUESTION ! Licensed under a Creative Commons license
  • 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. 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. 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. 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. 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. 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. Apache Maven ECOSYSTEM Licensed under a Creative Commons license
  • 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. Apache Maven REPOSITORY MANAGERS Licensed under a Creative Commons license
  • 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. 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. Nexus at eXo for productivity Licensed under a Creative Commons license
  • 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. 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. Apache Maven QUALITY MANAGEMENT Licensed under a Creative Commons license
  • 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. 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. Dependency Report Licensed under a Creative Commons license
  • 56. Sonar, a quality dashboard Licensed under a Creative Commons license
  • 57. Sonar, analyze your project Licensed under a Creative Commons license
  • 58. Sonar, Continuous Improvement ? Licensed under a Creative Commons license
  • 59. Apache Maven CONTINUOUS INTEGRATION Licensed under a Creative Commons license
  • 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. Hudson, how the weather is ? Licensed under a Creative Commons license
  • 62. Hudson : build, test, check Licensed under a Creative Commons license
  • 63. Apache Maven IDE Licensed under a Creative Commons license
  • 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. 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. Eclipse (m2eclipse) Licensed under a Creative Commons license
  • 67. Eclipse (m2eclipse) Licensed under a Creative Commons license
  • 68. Eclipse (m2eclipse) Licensed under a Creative Commons license
  • 69. Idea IntelliJ Licensed under a Creative Commons license
  • 70. Netbeans Licensed under a Creative Commons license
  • 71. Apache Maven GOOD & BAD PRACTICES Licensed under a Creative Commons license
  • 72. Apache Maven KISS Licensed under a Creative Commons license
  • 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. Apache Maven PROJECT ORGANIZATION GOOD & BAD PRACTICES Licensed under a Creative Commons license
  • 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. 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. 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. Apache Maven POM GOOD & BAD PRACTICES Licensed under a Creative Commons license
  • 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. 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. 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. Apache Maven DEVELOPMENT GOOD & BAD PRACTICES Licensed under a Creative Commons license
  • 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. 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. Apache Maven USECASES Licensed under a Creative Commons license
  • 86. Apache Maven SECURE YOUR CREDENTIALS Licensed under a Creative Commons license
  • 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. 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. Apache Maven BUILD A PART OF YOUR PROJECT Licensed under a Creative Commons license
  • 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. 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. 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. 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. 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. 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. Apache Maven RELEASE YOUR PROJECT Licensed under a Creative Commons license
  • 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. 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. 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. 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. Maven Release Plugin Licensed under a Creative Commons license
  • 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. 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
  • 104. 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.acme.com/myproject/trunk</connection>! <developerConnection>scm:svn:https://svn.acme.com/myproject/trunk</developerConnection>! <url>http://fisheye.acme.com/browse/myproject/trunk</url>! </scm>! Licensed under a Creative Commons license
  • 105. Distribution Management ●  Where you want to upload released binaries ●  The url of a repository dedicated for your project/ corporate maven deliveries in your repository manager <project>! <distributionManagement>! <repository>! <id>repository.acme.com</id>! <url>${acme.releases.repo.url}</url>! This id will be used in user’s </repository>! maven settings . . .! (~/.m2/settings.xml) </distributionManagement>! . . . ! <properties>! <acme.releases.repo.url>http://repo.acme.com/acme-releases</acme.releases.repo.url>! . . .! </properties>! Often useful to have a property </project>! to test the release process on a fake repository, to validate a repo manager ... Licensed under a Creative Commons license
  • 106. Repository credentials ●  One server entry is required per different repository id in distribution management of projects ●  In a corporate environment, use a unique id for all repositories hosted on repository managers using same credentials (corporate LDAP …) <settings>! ...! <servers>! <server>! <id>repository.acme.com</id>! <username>aheritier</username>! This id is the one defined in <password>{ABCDEFGHIJKLMNOPQRSTUVWYZ}</password>! distributionManagement entry of </server>! the project to release ...! </servers>! ...! </settings>! Licensed under a Creative Commons license
  • 107. Default Release Profile in Super POM ●  This profile is used when you generate binaries of the release with “mvn release:perform” ●  By default, generates sources and javadocs jars for each module. <profile>! <id>release-profile</id>! <activation>! <property>! <name>performRelease</name>! <value>true</value>! This activation could be used in </property>! profiles you want to activate in </activation>! the release process <build>! <plugins>! ...! </plugins>! Configuration to generate </build>! sources and javadoc jars with </profile>! basic setting Licensed under a Creative Commons license
  • 108. Custom release profile <project>! ...! <build>! <pluginManagement>! <plugins>! <plugin>! <groupId>org.apache.maven.plugins</groupId>! <artifactId>maven-release-plugin</artifactId>! <version>2.0</version>! <configuration>! <useReleaseProfile>false</useReleaseProfile>! <releaseProfiles>myreleaseprofile</releaseProfiles>! Don’t use the default profile </configuration>! </plugin>! </plugins>! Use our customized profile </pluginManagement>! </build>! ...! <profiles>! <profile>! <id>myreleaseprofile</id>! <build>! ...! Our customized profile </build>! </profile>! Customize the behavior of </profiles>! the build for a release ...! Take care to test is before </project>! the release !! Licensed under a Creative Commons license
  • 109. Apache Maven SETUP A GLOBAL MIRROR Licensed under a Creative Commons license
  • 110. Why should we setup a global mirror ? ●  To simplify users and projects settings ●  To control where binaries are coming from -  To not rely on project’s repositories -  To use only the corporate repository manager ●  To improve build performances -  By reducing the number of requests to find a missing artefact Licensed under a Creative Commons license
  • 111. How should we setup a global mirror ? <setting>
 <mirrors>
 <mirror>
 <id>global-mirror</id>
 <mirrorOf>external:*</mirrorOf>
 <url>http://repo.acme.com/public</url>
 </mirror>
 Send all requests to this url </mirrors>
 <profiles>
 <profile>
 <id>mirror</id>
 <repositories>
 <repository>
 <id>central</id>
 <url>http://central</url>
 <releases><enabled>true</enabled></releases>
 Use « central » id to override <snapshots><enabled>true</enabled></snapshots>
 default maven configuration </repository>
 </repositories>
 Enable snapshots <pluginRepositories>
 <pluginRepository>
 <id>central</id>
 <url>http://central</url>
 <releases><enabled>true</enabled></releases>
 <snapshots><enabled>true</enabled></snapshots>
 </pluginRepository>
 </pluginRepositories>
 </profile>
 </profiles>
 <activeProfiles>
 <activeProfile>mirror</activeProfile>
 </activeProfiles>
 </settings> ! make the profile active all the time Licensed under a Creative Commons license
  • 112. Apache Maven BACK TO THE FUTURE Licensed under a Creative Commons license
  • 113. Apache Maven PRODUCT Licensed under a Creative Commons license
  • 114. 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
  • 115. Apache Maven 2.x ●  Evolutions, new features ●  Several important new features in 2.1 like -  Parallel downloads -  Encrypted passwords -  Reactor command line options ●  Last release : 2.2.1 Licensed under a Creative Commons license
  • 116. Apache Maven 3.x ●  Do not be afraid !!!!! ●  Full compatibility with maven 2.x projects -  Or at least at 99,99999% ●  Availability in 2010 (2nd half) ●  Why Maven 3.X ? -  To build new foundations for the future -  The major part of the code was reviewed / rewritten ●  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
  • 117. Apache Maven 3.x - robustness ●  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 ●  Backward compatibility -  Several thousands of integration tests Licensed under a Creative Commons license
  • 118. Apache Maven 3.x - performances ●  Many optimizations ●  New support of parallel builds of modules ●  New incremental (partial) build -  To improve IDE integration Licensed under a Creative Commons license
  • 119. Apache Maven 3.x – new features ●  Any-source POM -  If you don’t like XML, choose another DSL ●  Versionless parent elements -  If you don’t use versions or release plugins to automatically update them ●  Mixins -  a compositional form of Maven POM configuration ●  Global excludes Licensed under a Creative Commons license
  • 120. Apache Maven 3.x ●  What it will change for maven developers ? -  Lifecycle extension points -  Plugin extension points -  Incremental build support -  Queryable lifecycle -  Extensible reporting -  Bye bye Plexus, welcome JSR 330 & Google Guice -  Well defined and documented APIs Licensed under a Creative Commons license
  • 121. Apache Maven 3.x – New tools ●  mvnsh -  A cross-platform shell dedicated to maven ●  Tycho -  Maven ready for OSGI and Eclipse developments Licensed under a Creative Commons license
  • 122. In Apache Maven 3.0 ? ●  A backward compatibility near to 100% for projects and plugins ●  A totally new implementation -  A greater robustness with a better reporting and more readable logs -  Performances improvements and new parallel builds -  A better integration for others tools like IDE or continuous integration servers ●  No change in current POM format Licensed under a Creative Commons license
  • 123. Apache Maven COMMUNITY Licensed under a Creative Commons license
  • 124. Users Mailing List ●  users@maven.apache.org -  Traffic statistics cover a total of 1697 days. -  Current subscribers: 1861 -  Current digest subscribers: 47 -  Total posts (1697 days): 80633 ●  Blue : -  Mean posts per day: 47.52 -  Number of subscribers ●  http://pulse.apache.org/ ●  Red : -  Number of messages per day Licensed under a Creative Commons license
  • 125. Apache Maven Web Site Licensed under a Creative Commons license
  • 126. Dowloads ●  Per month downloads ●  http://people.apache.org/~vgritsenko/stats/projects/ maven.html Licensed under a Creative Commons license
  • 127. 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
  • 128. Commit Statistics Licensed under a Creative Commons license
  • 129. Apache Maven CONCLUSION Licensed under a Creative Commons license
  • 130. 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. Maven 3.0 is a new start. ●  Many things to do -  We need you ! Licensed under a Creative Commons license
  • 131. Apache Maven QUESTIONS ? Licensed under a Creative Commons license
  • 132. 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
  • 133. Apache Maven TO GO FURTHER … Licensed under a Creative Commons license
  • 134. Apache Maven DOCUMENTATIONS Licensed under a Creative Commons license
  • 135. 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
  • 136. 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 Licensed under a Creative Commons license
  • 137. Books ●  Sonatype / O’Reilly : -  The Definitive Guide -  http://www.sonatype.com/ books -  Free download -  Available in several languages Licensed under a Creative Commons license
  • 138. Books ●  Exist Global -  Better builds with Maven -  http://www.maestrodev.com/ better-build-maven -  Free download Licensed under a Creative Commons license
  • 139. Apache Maven SUPPORT Licensed under a Creative Commons license
  • 140. 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 Licensed under a Creative Commons license