SlideShare ist ein Scribd-Unternehmen logo
1 von 141
Downloaden Sie, um offline zu lesen
Apache Maven – LorraineJUG
      June 1st, 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)
                  •    Contact me :
                        »  http://aheritier.net
                        »  Twitter : @aheritier
                        »  Skype : aheritier
                          2
Apache Maven
CHOOSE YOUR MENU
Overview

•    Definition                            •  Maven  or not Maven,
     History
• 
                                            that is the question !
•    Concepts
      »  Conventions                         » Maven, the project
      »  POM                                  choice
      »  Reactor and Modules                 » Maven, the corporate
      »  Inheritance
      »  Artifact Repository
                                              choice
      »  Dependency                          » Competitors
      »  Version
      »  Profiles
      »  Build Lifecycle And Plugins



                                       4
Back to the future

•  Maven 2.x
•  Maven 3.x

•  Community




                     5
Ecosystem

•  Repository   Managers            •  Continuous   Integration
•  Quality Management               •  IDE

    » Tests Automation                » Eclipse
    » Quality Metrics Reports         » Idea IntelliJ
    » Project Reports                 » Netbeans
    » Sonar




                                6
Good & Bad Practices

•  K.I.S.S.

•  Project    Organization
•  POM

•  Development




                             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




                          8
Apache Maven
OVERVIEW
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.




                          10
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 !!!

                        11
Apache Maven
CONCEPTS



               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, …)
     •  …



                                      13
POM

•  An   XML file (pom.xml)    <?xml version="1.0" encoding="UTF-8"?>!
                              <project>!
                               <modelVersion>4.0.0</modelVersion>!
                               <groupId>net.aheritier.samples</groupId>!

•  Describing                  <artifactId>simple-webapp</artifactId>!
                               <version>1.1-SNAPSHOT</version>!
  » Project identification     <packaging>war</packaging>!
                               <name>Simple webapp</name>!
  » Project version            <inceptionYear>2007</inceptionYear>!
                               <dependencies>!
  » Project description         <dependency>!
                                 <groupId>org.springframework</groupId>!
  » Build settings               <artifactId>spring-struts</artifactId>!

  » Dependencies
                                 <version>2.0.2</version>!
                                </dependency>!

  » …                           ...!
                               </dependencies>!
                              </project>!




                             14
Reactor

•  Split your project in
   sub-modules                 <project>!

                                 ...!
•  Maven computes the
                                 <modules>!
   build order from                <module>moduleA</module>
                                                          !
   dependencies                    <module>moduleB</module>
                                                          !

   between sub-                    <module>moduleC</module>
                                                          !

   modules.                        <module>moduleD</module>
                                                          !
                                   <module>moduleE</module>
                                                          !

•  Modules have to be              <module>moduleF</module>
                                                          !

   defined in the POM            </modules>!
                                 ...!
    »  No auto-discovery for   </project>!
      performance reasons


                                   15
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>!




              16
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




                   17
Artifact Repository




                      18
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


                      19
Dependencies

Without Maven    With Maven




                20
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


                             21
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



                                          22
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!


                           23
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



                                 24
Versions




           25
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 




                                           26
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.



                                   27
Versions

•  Usethe versions plugin to update all versions
 of your project and its modules

 mvn versions:set –DnewVersion=A.B.C-SNAPSHOT!




                              28
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!




                               29
Profiles

●    activeByDefault = If no other profile is activated
●    Activation through Maven settings

<settings>!
     ...!
     <activeProfiles>!
       <activeProfile>profile-1</activeProfile>!
     </activeProfiles>!
     ...!
</settings>!




                                    30
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>!


                                   31
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>!

                                32
Profiles

•  Activation    on present or missing files
<profiles>!
  <profile>!
    <activation>!
      <file>!
        <missing>${project.build.directory}/generated-sources/
  axistools/wsdl2java/</missing>!
      </file>!
    </activation>!
    ...!
  </profile>!
</profiles>!


                                 33
Build Lifecycle And Plugins



                         •  Plugin  based
                            architecture for a great
                            extensibility
                         •  Standardized lifecycle
                            to build all types of
                            archetypes




                        34
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

                                       35
Build Lifecycle And Plugins

•  Many plugins
    »  Packaging
    »  Reporting
    »  IDE integration
    »  Miscellaneous tools integration
•  Many locations
    »  maven.apache.org
    »  mojo.codehaus.org
    »  code.google.com
    »  …
                             Take care while selecting them !!!

                               36
Apache Maven
MAVEN OR NOT MAVEN,
THAT IS THE QUESTION !


               37
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

                                  38
Maven, the project’s choice

•  Centralizesand                » Builds
 automates all                   » Tests
 development facets              » Packages
 (build, tests, releases)        » Deploys
                                 » Documents
•  Onething it cannot do         » Checks and reports
 for you : to develop            about the quality of
                                  developments




                            39
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


                           40
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 


                                      41
With scripts oriented builds
You can have                 But often you have
(if you have good skills)    (moreover after years …)




                            42
With Maven
We dream to deliver    But today we have too often
(Maven 3.x)            (Maven 2.x)




                      43
Apache Maven
BACK TO THE FUTURE
Apache Maven
PRODUCT



               45
Apache Maven 2.0.x

•  bugs  fix
•  Last release : 2.0.11

•  No   other release of 2.0.x in the future




                             46
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




                         47
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)




                         48
Apache Maven 3.x – Why ?

 » 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
   •  …




                                   49
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


                                  50
Apache Maven 3.x - performances

•  Many optimizations
•  New support of parallel builds of modules

•  New   incremental (partial) build
  » To improve IDE integration




                            51
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




                             52
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


                           53
Apache Maven 3.x – New tools



                      •  mvnsh
                          » A cross-platform shell
                           dedicated to maven
                      •  Tycho
                          » Maven ready for OSGI
                           and Eclipse
                           developments




                     54
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

                              55
Apache Maven
COMMUNITY



               56
Users Mailing List

•    users@maven.apache.org                •  Blue   :
      »  Traffic statistics cover a            » Number of subscribers
       total of 1697 days.                 •  Red :
      »  Current subscribers: 1861             » Number of messages
      »  Current digest                        per day
       subscribers: 47
      »  Total posts (1697 days):
         80633
    »  Mean posts per day: 47.52
•  http://pulse.apache.org/



                                      57
Apache Maven Web Site




                    58
Dowloads

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




                        59
The team

•  60committers,
•  More than 30 active in 2009,

•  Several organizations like Sonatype, deliver
   resources and professional support,
•  A community less isolated : more interactions
   with Eclipse, Jetty,




                          60
Commit Statistics




                    61
Apache Maven
ECOSYSTEM
Maven’s ecosystem

•  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




                              63
Apache Maven
REPOSITORY MANAGERS



               64
Repository Managers

•    Basic services                         •  Several   products
      »  Search artifacts
      »  Browse repositories                  » Sonatype Nexus
      »  Proxy external repositories            (replaced Proximity)
      »  Host internal repositories           » Jfrog Artifactory
      »  Security                             » Apache Archiva




                                       65
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



                                 66
Nexus at eXo for productivity




                        67
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
                           68
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




                           69
Apache Maven
QUALITY MANAGEMENT



               70
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


                           71
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


                                    72
Dependency Report




                    73
Sonar, a quality dashboard




                       74
Sonar, analyze your project




                       75
Sonar, Continuous Improvement ?




                     76
Apache Maven
CONTINUOUS INTEGRATION



               77
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,
       …


                                         78
Hudson, how the weather is ?




                      79
Hudson : build, test, check




                        80
Apache Maven
IDE



               81
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)

                                82
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

                            83
Eclipse (m2eclipse)




                      84
Eclipse (m2eclipse)




                      85
Eclipse (m2eclipse)




                      86
Idea IntelliJ




                87
Netbeans




           88
Apache Maven
GOOD & BAD PRACTICES
Apache Maven
KISS



               90
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
       •  …



                              91
Apache Maven
PROJECT ORGANIZATION
GOOD & BAD PRACTICES


               92
Project bad practices




                        93
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 …


                                 94
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 …




                         95
Apache Maven
POM GOOD & BAD PRACTICES



               96
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


                          97
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.

                                98
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.




                         99
Apache Maven
DEVELOPMENT
GOOD & BAD PRACTICES


               100
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




                        101
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)


                                  102
Apache Maven
USECASES
Apache Maven
SECURE YOUR CREDENTIALS



               104
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>!




                                         105
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>!



                                             106
Apache Maven
BUILD A PART OF YOUR PROJECT



               107
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




                         108
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



                            109
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


                            110
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, …

                            111
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

                            112
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.

                            113
Apache Maven
RELEASE YOUR PROJECT



               114
Release of a webapp in 2002

•  Limited   usage of eclipse
  » No WTP (Only some features in WSAD),
  » No ability to produce WARs




                           115
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

                             116
Release of a webapp in 2002

•  Oneproblem : The are                      •  How   long did it take ?
 always problems                                 » When everything is ok :
  » Error in config files                         15 minutes
  »  Missing dependencies                        » When there’s a
  »  Missing file                                 problem : ½ day or
  »  Last minute fix which created a bug          more
  »  And many other possibilies ..




                                           117
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.



                           118
Maven Release Plugin




                       119
Configuration and Prerequisites

•  Project
         version (must be a SNAPSHOT version)
•  Dependencies and plugins versions mustn’t be
   SNAPSHOTs




                       120
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

                            121
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>!




                                           122
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>!
 </project>!
                                                            Often useful to have a property
                                                             to test the release process on a
                                                             fake repository, to validate a
                                                             repo manager ...

                                            123
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>!




                                            124
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


                                   125
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>!                                                Use our customized profile
   </plugins>!
  </pluginManagement>!
 </build>!
 ...!
 <profiles>!
  <profile>!
   <id>myreleaseprofile</id>!
   <build>!                                                   Our customized profile
    ...!
   </build>!                                                  Customize the behavior of
  </profile>!
 </profiles>!
                                                              the build for a release
 ...!                                                         Take care to test is before
</project>!                                                   the release !!


                                                   126
Apache Maven
SETUP A GLOBAL MIRROR



               127
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




                           128
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

                                             129
Apache Maven
CONCLUSION



               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 !


                          131
Apache Maven
QUESTIONS ?



               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/
                                         133
Apache Maven
TO GO FURTHER …
Apache Maven
DOCUMENTATIONS



               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




                           136
Books

•  NicolasDe 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

                           137
Books

•  Sonatype   / O’Reilly :
  » The Definitive Guide
  » http://
   www.sonatype.com/
   books
  » Free download
  » Available in several
   languages




                             138
Books

•  Exist   Global
  » Better builds with
    Maven
  » http://
    www.maestrodev.com/
    better-build-maven
  » Free download




                          139
Apache Maven
SUPPORT



               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

                           141

Weitere ähnliche Inhalte

Was ist angesagt?

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 promisesArnaud Héritier
 
Spring 3.1 to 3.2 in a Nutshell - Spring I/O 2012
Spring 3.1 to 3.2 in a Nutshell - Spring I/O 2012Spring 3.1 to 3.2 in a Nutshell - Spring I/O 2012
Spring 3.1 to 3.2 in a Nutshell - Spring I/O 2012Sam Brannen
 
Preparing for java 9 modules upload
Preparing for java 9 modules uploadPreparing for java 9 modules upload
Preparing for java 9 modules uploadRyan Cuprak
 
Spring Framework 3.2 - What's New
Spring Framework 3.2 - What's NewSpring Framework 3.2 - What's New
Spring Framework 3.2 - What's NewSam Brannen
 
MyFaces CODI Conversations
MyFaces CODI ConversationsMyFaces CODI Conversations
MyFaces CODI Conversationsos890
 
Node.js Development with Apache NetBeans
Node.js Development with Apache NetBeansNode.js Development with Apache NetBeans
Node.js Development with Apache NetBeansRyan Cuprak
 
Maven: from Scratch to Production (.pdf)
Maven: from Scratch to Production (.pdf)Maven: from Scratch to Production (.pdf)
Maven: from Scratch to Production (.pdf)Johan Mynhardt
 
Why jakarta ee matters (ConFoo 2021)
Why jakarta ee matters (ConFoo 2021)Why jakarta ee matters (ConFoo 2021)
Why jakarta ee matters (ConFoo 2021)Ryan Cuprak
 
DevNexus 2019: Migrating to Java 11
DevNexus 2019: Migrating to Java 11DevNexus 2019: Migrating to Java 11
DevNexus 2019: Migrating to Java 11DaliaAboSheasha
 
OSDC 2013 | Introduction into Chef by Andy Hawkins
OSDC 2013 | Introduction into Chef by Andy HawkinsOSDC 2013 | Introduction into Chef by Andy Hawkins
OSDC 2013 | Introduction into Chef by Andy HawkinsNETWAYS
 
Faster Java EE Builds with Gradle
Faster Java EE Builds with GradleFaster Java EE Builds with Gradle
Faster Java EE Builds with GradleRyan Cuprak
 
Building Android apps with Maven
Building Android apps with MavenBuilding Android apps with Maven
Building Android apps with MavenFabrizio Giudici
 
BP-9 Share Customization Best Practices
BP-9 Share Customization Best PracticesBP-9 Share Customization Best Practices
BP-9 Share Customization Best PracticesAlfresco Software
 

Was ist angesagt? (18)

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
 
Maven for eXo VN
Maven for eXo VNMaven for eXo VN
Maven for eXo VN
 
Maven Overview
Maven OverviewMaven Overview
Maven Overview
 
Apache Maven 2 Part 2
Apache Maven 2 Part 2Apache Maven 2 Part 2
Apache Maven 2 Part 2
 
Spring 3.1 to 3.2 in a Nutshell - Spring I/O 2012
Spring 3.1 to 3.2 in a Nutshell - Spring I/O 2012Spring 3.1 to 3.2 in a Nutshell - Spring I/O 2012
Spring 3.1 to 3.2 in a Nutshell - Spring I/O 2012
 
Maven
MavenMaven
Maven
 
Preparing for java 9 modules upload
Preparing for java 9 modules uploadPreparing for java 9 modules upload
Preparing for java 9 modules upload
 
Spring Framework 3.2 - What's New
Spring Framework 3.2 - What's NewSpring Framework 3.2 - What's New
Spring Framework 3.2 - What's New
 
MyFaces CODI Conversations
MyFaces CODI ConversationsMyFaces CODI Conversations
MyFaces CODI Conversations
 
Node.js Development with Apache NetBeans
Node.js Development with Apache NetBeansNode.js Development with Apache NetBeans
Node.js Development with Apache NetBeans
 
Maven: from Scratch to Production (.pdf)
Maven: from Scratch to Production (.pdf)Maven: from Scratch to Production (.pdf)
Maven: from Scratch to Production (.pdf)
 
Maven advanced
Maven advancedMaven advanced
Maven advanced
 
Why jakarta ee matters (ConFoo 2021)
Why jakarta ee matters (ConFoo 2021)Why jakarta ee matters (ConFoo 2021)
Why jakarta ee matters (ConFoo 2021)
 
DevNexus 2019: Migrating to Java 11
DevNexus 2019: Migrating to Java 11DevNexus 2019: Migrating to Java 11
DevNexus 2019: Migrating to Java 11
 
OSDC 2013 | Introduction into Chef by Andy Hawkins
OSDC 2013 | Introduction into Chef by Andy HawkinsOSDC 2013 | Introduction into Chef by Andy Hawkins
OSDC 2013 | Introduction into Chef by Andy Hawkins
 
Faster Java EE Builds with Gradle
Faster Java EE Builds with GradleFaster Java EE Builds with Gradle
Faster Java EE Builds with Gradle
 
Building Android apps with Maven
Building Android apps with MavenBuilding Android apps with Maven
Building Android apps with Maven
 
BP-9 Share Customization Best Practices
BP-9 Share Customization Best PracticesBP-9 Share Customization Best Practices
BP-9 Share Customization Best Practices
 

Andere mochten auch

Maven for Dummies
Maven for DummiesMaven for Dummies
Maven for DummiesTomer Gabel
 
Mastering Maven 2.0 In 1 Hour V1.3
Mastering Maven 2.0 In 1 Hour V1.3Mastering Maven 2.0 In 1 Hour V1.3
Mastering Maven 2.0 In 1 Hour V1.3Matthew McCullough
 
An introduction to Maven
An introduction to MavenAn introduction to Maven
An introduction to MavenJoao Pereira
 
Tycho Tutorial (EclipseCon 2012)
Tycho Tutorial (EclipseCon 2012)Tycho Tutorial (EclipseCon 2012)
Tycho Tutorial (EclipseCon 2012)jsievers
 
Alpes Jug (29th March, 2010) - Apache Maven
Alpes Jug (29th March, 2010) - Apache MavenAlpes Jug (29th March, 2010) - Apache Maven
Alpes Jug (29th March, 2010) - Apache MavenArnaud Héritier
 
Captain Agile and the Providers of Value
Captain Agile and the Providers of ValueCaptain Agile and the Providers of Value
Captain Agile and the Providers of ValueSchalk Cronjé
 
20091112 - Mars Jug - Apache Maven
20091112 - Mars Jug - Apache Maven20091112 - Mars Jug - Apache Maven
20091112 - Mars Jug - Apache MavenArnaud Héritier
 
Veni, Vide, Built: Android Gradle Plugin
Veni, Vide, Built: Android Gradle PluginVeni, Vide, Built: Android Gradle Plugin
Veni, Vide, Built: Android Gradle PluginLeonardo YongUk Kim
 
Gradle enabled android project
Gradle enabled android projectGradle enabled android project
Gradle enabled android projectShaka Huang
 
不只自動化而且更敏捷的Android開發工具 gradle mopcon
不只自動化而且更敏捷的Android開發工具 gradle mopcon不只自動化而且更敏捷的Android開發工具 gradle mopcon
不只自動化而且更敏捷的Android開發工具 gradle mopconsam chiu
 
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013Carlos Sanchez
 
Gradle build tool that rocks with DSL JavaOne India 4th May 2012
Gradle build tool that rocks with DSL JavaOne India 4th May 2012Gradle build tool that rocks with DSL JavaOne India 4th May 2012
Gradle build tool that rocks with DSL JavaOne India 4th May 2012Rajmahendra Hegde
 
Gradle - the Enterprise Automation Tool
Gradle  - the Enterprise Automation ToolGradle  - the Enterprise Automation Tool
Gradle - the Enterprise Automation ToolIzzet Mustafaiev
 

Andere mochten auch (20)

Continuous delivery-with-maven
Continuous delivery-with-mavenContinuous delivery-with-maven
Continuous delivery-with-maven
 
Maven tutorial for beginners
Maven tutorial for beginnersMaven tutorial for beginners
Maven tutorial for beginners
 
Maven for Dummies
Maven for DummiesMaven for Dummies
Maven for Dummies
 
Mastering Maven 2.0 In 1 Hour V1.3
Mastering Maven 2.0 In 1 Hour V1.3Mastering Maven 2.0 In 1 Hour V1.3
Mastering Maven 2.0 In 1 Hour V1.3
 
Demystifying Maven
Demystifying MavenDemystifying Maven
Demystifying Maven
 
An introduction to Maven
An introduction to MavenAn introduction to Maven
An introduction to Maven
 
Tycho Tutorial (EclipseCon 2012)
Tycho Tutorial (EclipseCon 2012)Tycho Tutorial (EclipseCon 2012)
Tycho Tutorial (EclipseCon 2012)
 
Maven 3 / Tycho
Maven 3 / TychoMaven 3 / Tycho
Maven 3 / Tycho
 
Alpes Jug (29th March, 2010) - Apache Maven
Alpes Jug (29th March, 2010) - Apache MavenAlpes Jug (29th March, 2010) - Apache Maven
Alpes Jug (29th March, 2010) - Apache Maven
 
Captain Agile and the Providers of Value
Captain Agile and the Providers of ValueCaptain Agile and the Providers of Value
Captain Agile and the Providers of Value
 
20091112 - Mars Jug - Apache Maven
20091112 - Mars Jug - Apache Maven20091112 - Mars Jug - Apache Maven
20091112 - Mars Jug - Apache Maven
 
Maven 3.0 at Øredev
Maven 3.0 at ØredevMaven 3.0 at Øredev
Maven 3.0 at Øredev
 
Veni, Vide, Built: Android Gradle Plugin
Veni, Vide, Built: Android Gradle PluginVeni, Vide, Built: Android Gradle Plugin
Veni, Vide, Built: Android Gradle Plugin
 
Gradle enabled android project
Gradle enabled android projectGradle enabled android project
Gradle enabled android project
 
不只自動化而且更敏捷的Android開發工具 gradle mopcon
不只自動化而且更敏捷的Android開發工具 gradle mopcon不只自動化而且更敏捷的Android開發工具 gradle mopcon
不只自動化而且更敏捷的Android開發工具 gradle mopcon
 
Gradle
GradleGradle
Gradle
 
Gradle in 45min
Gradle in 45minGradle in 45min
Gradle in 45min
 
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013
 
Gradle build tool that rocks with DSL JavaOne India 4th May 2012
Gradle build tool that rocks with DSL JavaOne India 4th May 2012Gradle build tool that rocks with DSL JavaOne India 4th May 2012
Gradle build tool that rocks with DSL JavaOne India 4th May 2012
 
Gradle - the Enterprise Automation Tool
Gradle  - the Enterprise Automation ToolGradle  - the Enterprise Automation Tool
Gradle - the Enterprise Automation Tool
 

Ähnlich wie Lorraine JUG (1st June, 2010) - Maven

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 3 Overview
Maven 3  OverviewMaven 3  Overview
Maven 3 OverviewMike Ensor
 
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 MavenScheidt & Bachmann
 
Lausanne Jug (08th April, 2010) - Maven
Lausanne Jug (08th April, 2010) - MavenLausanne Jug (08th April, 2010) - Maven
Lausanne Jug (08th April, 2010) - MavenArnaud Héritier
 
BP-10 Keeping Your Sanity – Rapid Development & Deployment Tools
BP-10 Keeping Your Sanity – Rapid Development & Deployment ToolsBP-10 Keeping Your Sanity – Rapid Development & Deployment Tools
BP-10 Keeping Your Sanity – Rapid Development & Deployment ToolsAlfresco Software
 
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éritierGenevaJUG
 
Geneva Jug (30th March, 2010) - Maven
Geneva Jug (30th March, 2010) - MavenGeneva Jug (30th March, 2010) - Maven
Geneva Jug (30th March, 2010) - MavenArnaud Héritier
 
Riviera JUG (20th April, 2010) - Maven
Riviera JUG (20th April, 2010) - MavenRiviera JUG (20th April, 2010) - Maven
Riviera JUG (20th April, 2010) - MavenArnaud 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 promisesArnaud 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 promisesArnaud Héritier
 
Apache maven and its impact on java 9 (Java One 2017)
Apache maven and its impact on java 9 (Java One 2017)Apache maven and its impact on java 9 (Java One 2017)
Apache maven and its impact on java 9 (Java One 2017)Robert Scholte
 
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 promisesArnaud Héritier
 
Practical maven-slides 2
Practical maven-slides 2Practical maven-slides 2
Practical maven-slides 2Will Iverson
 
Maven Basics - Explained
Maven Basics - ExplainedMaven Basics - Explained
Maven Basics - ExplainedSmita Prasad
 
(Re)-Introduction to Maven
(Re)-Introduction to Maven(Re)-Introduction to Maven
(Re)-Introduction to MavenEric Wyles
 
Developing Liferay Plugins with Maven
Developing Liferay Plugins with MavenDeveloping Liferay Plugins with Maven
Developing Liferay Plugins with MavenMika Koivisto
 
Top Maven Interview Questions in 2020 | Edureka
Top Maven Interview Questions in 2020 | EdurekaTop Maven Interview Questions in 2020 | Edureka
Top Maven Interview Questions in 2020 | EdurekaEdureka!
 
Ci jenkins maven svn
Ci jenkins maven svnCi jenkins maven svn
Ci jenkins maven svnAnkur Goyal
 

Ähnlich wie Lorraine JUG (1st June, 2010) - Maven (20)

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 3 Overview
Maven 3  OverviewMaven 3  Overview
Maven 3 Overview
 
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
 
Lausanne Jug (08th April, 2010) - Maven
Lausanne Jug (08th April, 2010) - MavenLausanne Jug (08th April, 2010) - Maven
Lausanne Jug (08th April, 2010) - Maven
 
BP-10 Keeping Your Sanity – Rapid Development & Deployment Tools
BP-10 Keeping Your Sanity – Rapid Development & Deployment ToolsBP-10 Keeping Your Sanity – Rapid Development & Deployment Tools
BP-10 Keeping Your Sanity – Rapid Development & Deployment Tools
 
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
 
Geneva Jug (30th March, 2010) - Maven
Geneva Jug (30th March, 2010) - MavenGeneva Jug (30th March, 2010) - Maven
Geneva Jug (30th March, 2010) - Maven
 
Riviera JUG (20th April, 2010) - Maven
Riviera JUG (20th April, 2010) - MavenRiviera JUG (20th April, 2010) - Maven
Riviera JUG (20th April, 2010) - Maven
 
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
 
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
 
Apache maven and its impact on java 9 (Java One 2017)
Apache maven and its impact on java 9 (Java One 2017)Apache maven and its impact on java 9 (Java One 2017)
Apache maven and its impact on java 9 (Java One 2017)
 
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
 
Practical maven-slides 2
Practical maven-slides 2Practical maven-slides 2
Practical maven-slides 2
 
Maven
MavenMaven
Maven
 
Maven
MavenMaven
Maven
 
Maven Basics - Explained
Maven Basics - ExplainedMaven Basics - Explained
Maven Basics - Explained
 
(Re)-Introduction to Maven
(Re)-Introduction to Maven(Re)-Introduction to Maven
(Re)-Introduction to Maven
 
Developing Liferay Plugins with Maven
Developing Liferay Plugins with MavenDeveloping Liferay Plugins with Maven
Developing Liferay Plugins with Maven
 
Top Maven Interview Questions in 2020 | Edureka
Top Maven Interview Questions in 2020 | EdurekaTop Maven Interview Questions in 2020 | Edureka
Top Maven Interview Questions in 2020 | Edureka
 
Ci jenkins maven svn
Ci jenkins maven svnCi jenkins maven svn
Ci jenkins maven svn
 

Mehr von Arnaud Héritier

Devops Recto-Verso @ DevoxxMA
Devops Recto-Verso @ DevoxxMADevops Recto-Verso @ DevoxxMA
Devops Recto-Verso @ DevoxxMAArnaud Héritier
 
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 trackArnaud 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 railsArnaud Héritier
 
Sonar In Action 20110302-vn
Sonar In Action 20110302-vnSonar In Action 20110302-vn
Sonar In Action 20110302-vnArnaud Héritier
 
2014 August - eXo Software Factory Overview
2014 August - eXo Software Factory Overview2014 August - eXo Software Factory Overview
2014 August - eXo Software Factory OverviewArnaud Héritier
 
CRaSH @ JUGSummerCamp 2012 - Quickie
CRaSH @ JUGSummerCamp 2012 - QuickieCRaSH @ JUGSummerCamp 2012 - Quickie
CRaSH @ JUGSummerCamp 2012 - QuickieArnaud 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 promisesArnaud Héritier
 
Hands on iOS developments with jenkins
Hands on iOS developments with jenkinsHands on iOS developments with jenkins
Hands on iOS developments with jenkinsArnaud Héritier
 
eXo Software Factory Overview
eXo Software Factory OvervieweXo Software Factory Overview
eXo Software Factory OverviewArnaud Héritier
 
Mobile developments at eXo
Mobile developments at eXoMobile developments at eXo
Mobile developments at eXoArnaud 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 JenkinsArnaud Héritier
 
Apache Maven - eXo VN office presentation
Apache Maven - eXo VN office presentationApache Maven - eXo VN office presentation
Apache Maven - eXo VN office presentationArnaud 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
 
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 MavenArnaud Héritier
 
20081008 - Tours Jug - Apache Maven
20081008  - Tours Jug - Apache Maven20081008  - Tours Jug - Apache Maven
20081008 - Tours Jug - Apache MavenArnaud 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 MavenArnaud Héritier
 
20080513 - Paris Jug - Maven à La Demande
20080513 - Paris Jug - Maven à La Demande20080513 - Paris Jug - Maven à La Demande
20080513 - Paris Jug - Maven à La DemandeArnaud Héritier
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache MavenArnaud Héritier
 
20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders BattleArnaud Héritier
 

Mehr von Arnaud Héritier (19)

Devops Recto-Verso @ DevoxxMA
Devops Recto-Verso @ DevoxxMADevops Recto-Verso @ DevoxxMA
Devops Recto-Verso @ DevoxxMA
 
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
 
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
 
Apache Maven - eXo VN office presentation
Apache Maven - eXo VN office presentationApache Maven - eXo VN office presentation
Apache Maven - eXo VN office presentation
 
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?
 
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
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven
 
20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle
 

Kürzlich hochgeladen

Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????blackmambaettijean
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 

Kürzlich hochgeladen (20)

Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 

Lorraine JUG (1st June, 2010) - Maven

  • 1. Apache Maven – LorraineJUG June 1st, 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) •  Contact me : »  http://aheritier.net »  Twitter : @aheritier »  Skype : aheritier 2
  • 4. Overview •  Definition •  Maven or not Maven, History •  that is the question ! •  Concepts »  Conventions » Maven, the project »  POM choice »  Reactor and Modules » Maven, the corporate »  Inheritance »  Artifact Repository choice »  Dependency » Competitors »  Version »  Profiles »  Build Lifecycle And Plugins 4
  • 5. Back to the future •  Maven 2.x •  Maven 3.x •  Community 5
  • 6. Ecosystem •  Repository Managers •  Continuous Integration •  Quality Management •  IDE » Tests Automation » Eclipse » Quality Metrics Reports » Idea IntelliJ » Project Reports » Netbeans » Sonar 6
  • 7. Good & Bad Practices •  K.I.S.S. •  Project Organization •  POM •  Development 7
  • 8. 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 8
  • 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. 10
  • 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 !!! 11
  • 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, …) •  … 13
  • 14. POM •  An XML file (pom.xml) <?xml version="1.0" encoding="UTF-8"?>! <project>! <modelVersion>4.0.0</modelVersion>! <groupId>net.aheritier.samples</groupId>! •  Describing <artifactId>simple-webapp</artifactId>! <version>1.1-SNAPSHOT</version>! » Project identification <packaging>war</packaging>! <name>Simple webapp</name>! » Project version <inceptionYear>2007</inceptionYear>! <dependencies>! » Project description <dependency>! <groupId>org.springframework</groupId>! » Build settings <artifactId>spring-struts</artifactId>! » Dependencies <version>2.0.2</version>! </dependency>! » … ...! </dependencies>! </project>! 14
  • 15. Reactor •  Split your project in sub-modules <project>! ...! •  Maven computes the <modules>! build order from <module>moduleA</module> ! dependencies <module>moduleB</module> ! between sub- <module>moduleC</module> ! modules. <module>moduleD</module> ! <module>moduleE</module> ! •  Modules have to be <module>moduleF</module> ! defined in the POM </modules>! ...! »  No auto-discovery for </project>! performance reasons 15
  • 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>! 16
  • 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 17
  • 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 19
  • 20. Dependencies Without Maven With Maven 20
  • 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 21
  • 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 22
  • 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! 23
  • 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 24
  • 25. Versions 25
  • 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  26
  • 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. 27
  • 28. Versions •  Usethe versions plugin to update all versions of your project and its modules mvn versions:set –DnewVersion=A.B.C-SNAPSHOT! 28
  • 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! 29
  • 30. Profiles ●  activeByDefault = If no other profile is activated ●  Activation through Maven settings <settings>! ...! <activeProfiles>! <activeProfile>profile-1</activeProfile>! </activeProfiles>! ...! </settings>! 30
  • 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>! 31
  • 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>! 32
  • 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>! 33
  • 34. Build Lifecycle And Plugins •  Plugin based architecture for a great extensibility •  Standardized lifecycle to build all types of archetypes 34
  • 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 35
  • 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 »  … Take care while selecting them !!! 36
  • 37. Apache Maven MAVEN OR NOT MAVEN, THAT IS THE QUESTION ! 37
  • 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 38
  • 39. Maven, the project’s choice •  Centralizesand » Builds automates all » Tests development facets » Packages (build, tests, releases) » Deploys » Documents •  Onething it cannot do » Checks and reports for you : to develop  about the quality of developments 39
  • 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 40
  • 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  41
  • 42. With scripts oriented builds You can have But often you have (if you have good skills) (moreover after years …) 42
  • 43. With Maven We dream to deliver But today we have too often (Maven 3.x) (Maven 2.x) 43
  • 44. Apache Maven BACK TO THE FUTURE
  • 46. Apache Maven 2.0.x •  bugs fix •  Last release : 2.0.11 •  No other release of 2.0.x in the future 46
  • 47. 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 47
  • 48. 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) 48
  • 49. Apache Maven 3.x – Why ? » 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 •  … 49
  • 50. 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 50
  • 51. Apache Maven 3.x - performances •  Many optimizations •  New support of parallel builds of modules •  New incremental (partial) build » To improve IDE integration 51
  • 52. 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 52
  • 53. 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 53
  • 54. Apache Maven 3.x – New tools •  mvnsh » A cross-platform shell dedicated to maven •  Tycho » Maven ready for OSGI and Eclipse developments 54
  • 55. 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 55
  • 57. Users Mailing List •  users@maven.apache.org •  Blue : »  Traffic statistics cover a » Number of subscribers total of 1697 days. •  Red : »  Current subscribers: 1861 » Number of messages »  Current digest per day subscribers: 47 »  Total posts (1697 days): 80633 »  Mean posts per day: 47.52 •  http://pulse.apache.org/ 57
  • 58. Apache Maven Web Site 58
  • 60. The team •  60committers, •  More than 30 active in 2009, •  Several organizations like Sonatype, deliver resources and professional support, •  A community less isolated : more interactions with Eclipse, Jetty, 60
  • 63. Maven’s ecosystem •  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 63
  • 65. Repository Managers •  Basic services •  Several products »  Search artifacts »  Browse repositories » Sonatype Nexus »  Proxy external repositories (replaced Proximity) »  Host internal repositories » Jfrog Artifactory »  Security » Apache Archiva 65
  • 66. 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 66
  • 67. Nexus at eXo for productivity 67
  • 68. 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 68
  • 69. 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 69
  • 71. 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 71
  • 72. 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 72
  • 74. Sonar, a quality dashboard 74
  • 75. Sonar, analyze your project 75
  • 78. 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, … 78
  • 79. Hudson, how the weather is ? 79
  • 80. Hudson : build, test, check 80
  • 82. 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) 82
  • 83. 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 83
  • 88. Netbeans 88
  • 89. Apache Maven GOOD & BAD PRACTICES
  • 91. 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 •  … 91
  • 94. 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 … 94
  • 95. 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 … 95
  • 96. Apache Maven POM GOOD & BAD PRACTICES 96
  • 97. 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 97
  • 98. 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. 98
  • 99. 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. 99
  • 100. Apache Maven DEVELOPMENT GOOD & BAD PRACTICES 100
  • 101. 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 101
  • 102. 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) 102
  • 104. Apache Maven SECURE YOUR CREDENTIALS 104
  • 105. 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>! 105
  • 106. 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>! 106
  • 107. Apache Maven BUILD A PART OF YOUR PROJECT 107
  • 108. 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 108
  • 109. 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 109
  • 110. 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 110
  • 111. 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, … 111
  • 112. 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 112
  • 113. 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. 113
  • 115. Release of a webapp in 2002 •  Limited usage of eclipse » No WTP (Only some features in WSAD), » No ability to produce WARs 115
  • 116. 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 116
  • 117. Release of a webapp in 2002 •  Oneproblem : The are •  How long did it take ? always problems » When everything is ok : » Error in config files 15 minutes »  Missing dependencies » When there’s a »  Missing file problem : ½ day or »  Last minute fix which created a bug more »  And many other possibilies .. 117
  • 118. 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. 118
  • 120. Configuration and Prerequisites •  Project version (must be a SNAPSHOT version) •  Dependencies and plugins versions mustn’t be SNAPSHOTs 120
  • 121. 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 121
  • 122. 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>! 122
  • 123. 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>! </project>! Often useful to have a property to test the release process on a fake repository, to validate a repo manager ... 123
  • 124. 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>! 124
  • 125. 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 125
  • 126. 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>! Use our customized profile </plugins>! </pluginManagement>! </build>! ...! <profiles>! <profile>! <id>myreleaseprofile</id>! <build>! Our customized profile ...! </build>! Customize the behavior of </profile>! </profiles>! the build for a release ...! Take care to test is before </project>! the release !! 126
  • 127. Apache Maven SETUP A GLOBAL MIRROR 127
  • 128. 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 128
  • 129. 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 129
  • 131. 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 ! 131
  • 133. 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/ 133
  • 134. Apache Maven TO GO FURTHER …
  • 136. 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 136
  • 137. Books •  NicolasDe 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 137
  • 138. Books •  Sonatype / O’Reilly : » The Definitive Guide » http:// www.sonatype.com/ books » Free download » Available in several languages 138
  • 139. Books •  Exist Global » Better builds with Maven » http:// www.maestrodev.com/ better-build-maven » Free download 139
  • 141. 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 141