Introduction in Apache Maven2

Heiko Scherrer
Heiko ScherrerJava Software Architect em Interface21.io
Basic introduction in Maven


                 •
                     Introduction
                 •
                     POM (Project Object Model)
                 •
                     Lifecycle
                 •
                     Repository
                 •
                     Dependency Management
                 •
                     Reporting
                 •
                     IDE Integration
                 •
                     Tips & Tricks



Heiko Scherrer
What is Maven?


       •
           A build tool like Apache Ant but:
             ●
                 Configure your build, don't script it
             ●
                 Define what you build, not how!
       •
           A dependency management tool
             ●
                 Coherent organization of dependencies
       •
           A project management tool
      Take back control!


Heiko Scherrer
What is Maven?



  •
      Currently using Maven2.
      Maven3 is almost backward compatible
  •
      Benefit of a wide range of plugins to
      setup your build and reporting
  •
      Maven repository server, e.g. Sonatype's
      Nexus



Heiko Scherrer
Maven vs. Ant – Why not Ant?


         •
             “Convention over Configuration”
         •
             Appreciate for building complex
             modularized applications
         •
             Based on a repository to store and
             resolve artifacts
         •
             Maven doesn't have to know about
             directory structures (use defaults)


Heiko Scherrer
Downside of Maven




         •
             “Convention over Configuration”
         •
             Exceptions are less meaningful and
             configuration errors hard to find
         •
             Plugins are less documented




Heiko Scherrer
Basic introduction in Maven


                 •
                     Introduction
                 •
                     POM (Project Object Model)
                 •
                     Lifecycle
                 •
                     Repository
                 •
                     Dependency Management
                 •
                     Reporting
                 •
                     IDE Integration
                 •
                     Tips & Tricks



Heiko Scherrer
What represents a project ?



  •
      Each project has a project descriptor
      (pom.xml)
  •
      A project is determined using Maven
      coordinates
      groupId:artifactId:version:classifier:type
  •
      Project Object Model (POM) files support
      inheritance


Heiko Scherrer
Standard directory layout



 •
      Take advantage of
      Mavens default
      configuration - setup a
      standard directory layout
 •
      Maven Archtype plugin
      creates project structure
 •
      The target directory is
      generated after the first
      build run




Heiko Scherrer
POM – Project Object Model (I)

 •
      Define your project    <project ...>

      coordinates              <modelVersion>4.0.0</modelVersion>

                               <groupId>org.openwms</groupId>
 •
      Set a packaging type     <artifactId>org.openwms.core</artifactId>
                               <version>1.0.1-SNAPSHOT</version>

      -> what to build         <packaging>jar</packaging>


      List dependencies,
                               <dependencies>
 •
                                 <dependency>
      you need for your             <groupId>junit</groupId>
                                    <artifactId>junit</artifactId>

      project in different          <version>${junit.version}</version>
                                    <scope>test</scope>

      scopes
                                 </dependency>

                               </dependencies>

 •
      Use custom             </project>


      properties


Heiko Scherrer
POM - Scopes

    •
        COMPILE
        Included in compilation, packaged and delivered
    •
        PROVIDED
        Included in compilation, but not packaged. Expected to be
        provided at runtime
    •
        RUNTIME
        Not included in compilation classpath, but expected at runtime
        (Class.forName...)
    •
        TEST
        Only included in test classpath and test phase; not delivered
    •
        SYSTEM
        Like provided, but must be referenced directly. Used for non
        Maven artifacts


Heiko Scherrer
POM Inheritance

       •
           A super POM comes with your local Maven
           installation (maven2.jar#pom-4.0.0.xml)
       •
           POM files inherit configuration from a parent
           project
       •
           Common used dependencies or configuration
           snippets shall be moved to a parent project
       •
           That way it is possible to build complex
           inheritance strategies
       •
           Find the effective POM:
           mvn help:effective-pom


Heiko Scherrer
Grouping & Inheritance



   •
       Building modules to group projects
   •   Use the packaging type pom and define
       submodules
   •
       Group modules and configure build with
       Profiles
   •
       Use inheritance to follow DRY principle


Heiko Scherrer
POM – Project Object Model (II)

                             <project ...>

                               <modelVersion>4.0.0</modelVersion>
                               <parent>
                                 <groupId>org.openwms</groupId>
                                 <artifactId>org.openwms</artifactId>
   •
       Define a parent           <version>1.0.1-SNAPSHOT</version>
                               </parent>

       project                 <artifactId>org.openwms.core</artifactId>

                               <packaging>pom</packaging>

   •
       Project coordinates     <name>OpenWMS CORE module</name>
                               <modules>
                                 <module>org.openwms.core.domain</module>

       Project name and a
                               </modules>
   •
                               <build>
       list of submodules        <plugins>
                                   <plugin>
                                     <groupId>org.apache.maven.plugins</groupId>
                                     <artifactId>maven-compiler-
   •
       Override plugin               <configuration>
                                                             plugin</artifactId>

                                        <source>1.6</source>
       configuration                    <target>1.6</target>
                                     </configuration>
                                   </plugin>
                                 </plugins>
                               </build>
                             </project>




Heiko Scherrer
Basic introduction in Maven


                 •
                     Introduction
                 •
                     POM (Project Object Model)
                 •
                     Lifecycle
                 •
                     Repository
                 •
                     Dependency Management
                 •
                     Reporting
                 •
                     IDE Integration
                 •
                     Tips & Tricks



Heiko Scherrer
Lifecycle, Phases, Plugins and Goals


  •
      Maven uses plugins to accomplish it's work
  •
      Each plugin offers one or more goals
  •
      A goal is specific to a plugin -
      comparable to an Ant target
  •
      Most plugins are developed and driven by the
      community
  •
      Plugin goals are documented on the generated Maven
      site
                                         Plugin    Goal
  •   Calling a single plugin goal: mvn compiler:compile



Heiko Scherrer
Lifecycles, Phases, Plugins and Goals


   •
       The Lifecycle is a pre-defined procedural process for
       building and distributing a particular artifact
   •
       A Phase is one step in Mavens Build Lifecycle
        ●
            Plugin goals are attached to an execution Phase
        ●
            Each Phase can perform one or more plugin goals
   •
       Kick a Lifecycle Phase execution:
       mvn clean or mvn site
   •   3 standard Lifecycles : clean, default, site
   •
       Plugins can define own Lifecycles (see Flex plugin)


Heiko Scherrer
Standard Lifecycle - Clean

 •
      Provided by the
      clean plugin
 •
      Pre-configured in the       pre-clean

      Super POM
 •    Run mvn clean to
      execute all three               clean

      phases within the
      Lifecycle
 •
      Deletes build                   post-clean

      directory
      ${basedir}/target

Heiko Scherrer
Standard Lifecycle - Default

                                     validate
 •
      21 phases
 •
      Validate project
                                          compile
      completeness for build run
 •
      Compile source code
                                                test
 •
      Run unit tests
 •
      Package in distributable
      format                                        package

 •
      Install to local repository
                                                         install
 •
      Deploy; copies the artifacts
      to a remote repository                                  deploy




Heiko Scherrer
Basic introduction in Maven


                 •
                     Introduction
                 •
                     POM (Project Object Model)
                 •
                     Lifecycle
                 •
                     Repository
                 •
                     Dependency Management
                 •
                     Reporting
                 •
                     IDE Integration
                 •
                     Tips & Tricks



Heiko Scherrer
Local Maven Repository

  •   When executing the Lifecycle phase install,
      Maven populates a local repository with
      artifacts
  •   Local repository: ~/.m2/repository
  •
      Dependencies and custom deliverables are
      stored hierarchically
  •   The groupId is interpreted as directory path
  •   The artifactId and version define the name
      of the artifact

Heiko Scherrer
Remote Maven Repository

     •
         A Remote repository is a central, company-
         wide storage for build artifacts
     •
         Serves as
           ●
                 a Proxy (to minimize bandwidth)
           ●
                 a storage for own project artifacts
                 (accessible by Maven or web UI)
     •
         Sonatype Nexus Repository Manager is
         OpenSource (comm. version available)
     •   Copy to central repo: mvn deploy

Heiko Scherrer
Remote Maven Repository II




Heiko Scherrer
Remote Maven Repository III


 Deploy remote                <distributionManagement>


  •
      In your top-level pom     <repository>
                                  <id>org_openwms_rudi_releases</id>
                                  <name>OpenWMS Internal Releases</name>
                                  <url>http://rudi:8081/nexus/content/rel</url>
                                </repository>

  •
      Define repository         <snapshotRepository>

      server for snapshots
                                  <id>org_openwms_rudi_snapshots</id>
                                  <name>OpenWMS Internal Snapshots</name>
                                  <url>http://rudi:8081/nexus/content/snap</url>

      and releases              </snapshotRepository>


                                <site>
                                  <id>org_openwms_sf</id>
                                  <name>OpenWMS Website</name>

      Server definition for
                                  <url>scp://${distribution.web.server}</url>
  •                             </site>


      website deployment      </distributionManagement>


  •
      Use placeholders!


Heiko Scherrer
Remote Maven Repository IV


                               <settings>
~/.m2/settings.xml:             <servers>
                                 <server>
                                   <id>org_openwms_rudi_releases</id>
 •
     Server credentials            <username>USERNAME</username>
                                   <password>PASSWORD</password>

     used to deploy
                                 </server>
                                </servers>

                                <mirrors>

     Route all requests to a
                                 <mirror>
 •                                 <id>all</id>
                                   <mirrorOf>*</mirrorOf>
     proxy                         <url>http://rudi:8081/nexus/content/all</url>
                                 </mirror>
                                </mirrors>

 •
     Manage exception           <repositories>
                                 <repository>

     routes
                                   <id>org_openwms_sf_snap</id>
                                   <url>http://rudi:8081/nexus/content/snap</url>
                                   <releases><enabled>false</enabled></releases>
                                   <snapshots><enabled>true</enabled></snapshots>

     → Demo                      </repository>
                                </repositories>

                               </settings>




Heiko Scherrer
Basic introduction in Maven


                 •
                     Introduction
                 •
                     POM (Project Object Model)
                 •
                     Lifecycle
                 •
                     Repository
                 •
                     Dependency Management
                 •
                     Reporting
                 •
                     IDE Integration
                 •
                     Tips & Tricks



Heiko Scherrer
Dependency Management


   •
       Manage common dependency
       declarations in parent pom:
       <dependencyManagement>
   •
       Manage common plugin configuration in
       parent pom: <pluginManagement>
   •
       Define repository locations for artifact &
       plugin repositories in parent pom
   •
       Use variables for substitute versions

Heiko Scherrer
Dependency Management - Example
                           <dependencies>
                             <dependency>
 •
     Add dependencies          <groupId>javaee</groupId>
                               <artifactId>javaee-api</artifactId>
                               <scope>provided</scope>

     provided by the EJB     </dependency>



     container
                             <dependency>
                               <groupId>log4j</groupId>
                               <artifactId>log4j</artifactId>
                               <version>1.2.12</version>
                               <exclusions>
 •
     Exclude                     <exclusion>
                                   <groupId>com.sun.jmx</groupId>
                                   <artifactId>jmxri</artifactId>

     dependencies when           </exclusion>
                                </exclusions>
                             </dependency>

     necessary               <dependency>
                               <groupId>junit</groupId>
                               <artifactId>junit</artifactId>
 •
     Set the proper            <scope>test</scope>
                             </dependency>


     scope to avoid          <dependency>
                               <groupId>commons-lang</groupId>


     packaging of
                               <artifactId>commons-lang</artifactId>
                               <version>2.4</version>
                               <scope>compile</scope>


     dependencies
                             </dependency>
                           </dependencies>




Heiko Scherrer
Worth to mention




                 •
                     Resource filtering
                 •
                     Profiles
                 •
                     Classifiers




Heiko Scherrer
Basic introduction in Maven


                 •
                     Introduction
                 •
                     POM (Project Object Model)
                 •
                     Lifecycle
                 •
                     Repository
                 •
                     Dependency Management
                 •
                     Reporting
                 •
                     IDE Integration
                 •
                     Tips & Tricks



Heiko Scherrer
Reporting & Site Generation


                 ASDoc                        Cobertura




                         Website
                                                    Javadoc

                                                                JXR
                                   PMD Checkstyle
                                                      Taglist
                                    JDepend                       CPD
Heiko Scherrer
Reporting & Site Generation



       •   Run site generation: mvn site
       •
           Maven-site-plugin
       •   Site content: ${basedir}/src/site
       •
           Accepted formats: apt, fml, xdoc,
           DocBook, …



Heiko Scherrer
Reporting & Site Generation


            •
                 Report generation is part of site
            •
                 Site customization is done within
                 <reporting> section
            •
                 Useful plugins:
                 maven-project-info-reports-plugin,
                 dashboard-maven-plugin,
                 cobertura-maven-plugin,
                 maven-surefire-report-plugin,
                 maven-javadoc-plugin

            •
                 → Demo

Heiko Scherrer
Basic introduction in Maven


                 •
                     Introduction
                 •
                     POM (Project Object Model)
                 •
                     Lifecycle
                 •
                     Repository
                 •
                     Dependency Management
                 •
                     Reporting
                 •
                     IDE Integration
                 •
                     Tips & Tricks



Heiko Scherrer
IDE Integration (Eclipse)


   •
       Usually each IDE has its own project setting files
   •
       Avoid sharing platform specific files within your
       VCS
   •   Import pom.xml as Maven project → Eclipse demo
   •   Use maven-eclipse-plugin to add particular
       project facets: mvn eclipse:eclipse
   •
       Use the IDE to develop – not to build.
       → Keep Maven out of development process



Heiko Scherrer
IDE Integration II (Eclipse)



   •
       Install m2eclipse:
       http://m2eclipse.sonatype.org/sites/m2e
   •
       m2eclipse comes with Maven3 beta, change
       manually to local Maven2 installation
   •
       In addition to the local and remote repository,
       m2eclipse uses the workspace as 1st. Repository
   •
       Use favorite Run Configurations to run Maven




Heiko Scherrer
Basic introduction in Maven


                 •
                     Introduction
                 •
                     POM (Project Object Model)
                 •
                     Lifecycle
                 •
                     Repository
                 •
                     Dependency Management
                 •
                     Reporting
                 •
                     IDE Integration
                 •
                     Tips & Tricks



Heiko Scherrer
Tips & Tricks



 •    Download sources mvn dependency:sources
 •    Define <server> in your settings.xml to store your
      credentials
 •    Add -DskipTests to bypass test phase
 •    Add -U to update snapshot dependencies manually
 •
      m2e: Nested projects lead to artifact resolving
      errors



Heiko Scherrer
Tips & Tricks II




    •
        Aggregate common config in top-level pom
    •
        SVN ignore IDE specific files and use pom as
        project descriptor at all
    •
        Don't commit binaries or generated files to VCS




Heiko Scherrer
Q&A




Heiko Scherrer
Document History




      •
          Initial svn rev. [1472];
      •
          Updated svn rev. [1475];2011-01-16




Heiko Scherrer
1 de 40

Recomendados

Lorraine JUG (1st June, 2010) - Maven por
Lorraine JUG (1st June, 2010) - MavenLorraine JUG (1st June, 2010) - Maven
Lorraine JUG (1st June, 2010) - MavenArnaud Héritier
1.1K visualizações141 slides
Apache Maven - eXo TN presentation por
Apache Maven - eXo TN presentationApache Maven - eXo TN presentation
Apache Maven - eXo TN presentationArnaud Héritier
915 visualizações129 slides
4 maven junit por
4 maven junit4 maven junit
4 maven junitHonnix Liang
692 visualizações43 slides
Maven 3 Overview por
Maven 3  OverviewMaven 3  Overview
Maven 3 OverviewMike Ensor
2.7K visualizações22 slides
Geneva Jug (30th March, 2010) - Maven por
Geneva Jug (30th March, 2010) - MavenGeneva Jug (30th March, 2010) - Maven
Geneva Jug (30th March, 2010) - MavenArnaud Héritier
1.3K visualizações138 slides
Lausanne Jug (08th April, 2010) - Maven por
Lausanne Jug (08th April, 2010) - MavenLausanne Jug (08th April, 2010) - Maven
Lausanne Jug (08th April, 2010) - MavenArnaud Héritier
4.1K visualizações140 slides

Mais conteúdo relacionado

Mais procurados

Maven for Dummies por
Maven for DummiesMaven for Dummies
Maven for DummiesTomer Gabel
6.3K visualizações9 slides
Maven por
Maven Maven
Maven Khan625
905 visualizações9 slides
Maven Basics - Explained por
Maven Basics - ExplainedMaven Basics - Explained
Maven Basics - ExplainedSmita Prasad
1.1K visualizações46 slides
Maven por
MavenMaven
Mavenfeng lee
1.8K visualizações33 slides
Introduction tomaven por
Introduction tomavenIntroduction tomaven
Introduction tomavenManav Prasad
236 visualizações27 slides
Hands On with Maven por
Hands On with MavenHands On with Maven
Hands On with MavenSid Anand
6.1K visualizações29 slides

Mais procurados(19)

Maven for Dummies por Tomer Gabel
Maven for DummiesMaven for Dummies
Maven for Dummies
Tomer Gabel6.3K visualizações
Maven por Khan625
Maven Maven
Maven
Khan625905 visualizações
Maven Basics - Explained por Smita Prasad
Maven Basics - ExplainedMaven Basics - Explained
Maven Basics - Explained
Smita Prasad1.1K visualizações
Maven por feng lee
MavenMaven
Maven
feng lee1.8K visualizações
Introduction tomaven por Manav Prasad
Introduction tomavenIntroduction tomaven
Introduction tomaven
Manav Prasad236 visualizações
Hands On with Maven por Sid Anand
Hands On with MavenHands On with Maven
Hands On with Maven
Sid Anand6.1K visualizações
Introduction to maven por Manos Georgopoulos
Introduction to mavenIntroduction to maven
Introduction to maven
Manos Georgopoulos1.2K visualizações
Maven ppt por natashasweety7
Maven pptMaven ppt
Maven ppt
natashasweety74.6K visualizações
Maven Overview por FastConnect
Maven OverviewMaven Overview
Maven Overview
FastConnect8.5K visualizações
Maven Introduction por Sandeep Chawla
Maven IntroductionMaven Introduction
Maven Introduction
Sandeep Chawla21.1K visualizações
Note - Apache Maven Intro por boyw165
Note - Apache Maven IntroNote - Apache Maven Intro
Note - Apache Maven Intro
boyw1652.6K visualizações
Apache Maven por Rahul Tanwani
Apache MavenApache Maven
Apache Maven
Rahul Tanwani2.1K visualizações
Maven for eXo VN por Arnaud Héritier
Maven for eXo VNMaven for eXo VN
Maven for eXo VN
Arnaud Héritier669 visualizações
An introduction to Maven por Joao Pereira
An introduction to MavenAn introduction to Maven
An introduction to Maven
Joao Pereira7.9K visualizações
Maven tutorial por Dragos Balan
Maven tutorialMaven tutorial
Maven tutorial
Dragos Balan1.8K visualizações
Introduction to Maven por Mindfire Solutions
Introduction to MavenIntroduction to Maven
Introduction to Maven
Mindfire Solutions955 visualizações
Apache Maven In 10 Slides por Robert Burrell Donkin
Apache Maven In 10 SlidesApache Maven In 10 Slides
Apache Maven In 10 Slides
Robert Burrell Donkin5.7K visualizações
Java Builds with Maven and Ant por David Noble
Java Builds with Maven and AntJava Builds with Maven and Ant
Java Builds with Maven and Ant
David Noble2.4K visualizações

Destaque

08 - CICCM por
08 - CICCM08 - CICCM
08 - CICCMMOHAMED KAMAL محمد كمال
100 visualizações1 slide
SIx Sigma GB- Mohamed Kamal Ibrahim por
SIx Sigma GB- Mohamed Kamal IbrahimSIx Sigma GB- Mohamed Kamal Ibrahim
SIx Sigma GB- Mohamed Kamal IbrahimMOHAMED KAMAL محمد كمال
118 visualizações1 slide
Presentacion 7.1 por
Presentacion 7.1Presentacion 7.1
Presentacion 7.1venom_venom
442 visualizações28 slides
Horario alumnos 4º b por
Horario alumnos 4º bHorario alumnos 4º b
Horario alumnos 4º bcchh07
179 visualizações1 slide
Analisis Foda por
Analisis FodaAnalisis Foda
Analisis FodaFacurocha195
176 visualizações5 slides
Соціальна реклама - взаємодія НГО та рекламного ринку por
Соціальна реклама - взаємодія НГО та рекламного ринкуСоціальна реклама - взаємодія НГО та рекламного ринку
Соціальна реклама - взаємодія НГО та рекламного ринкуUkrainianPhilanthropistsForum
221 visualizações30 slides

Destaque(20)

Presentacion 7.1 por venom_venom
Presentacion 7.1Presentacion 7.1
Presentacion 7.1
venom_venom442 visualizações
Horario alumnos 4º b por cchh07
Horario alumnos 4º bHorario alumnos 4º b
Horario alumnos 4º b
cchh07179 visualizações
Analisis Foda por Facurocha195
Analisis FodaAnalisis Foda
Analisis Foda
Facurocha195176 visualizações
Соціальна реклама - взаємодія НГО та рекламного ринку por UkrainianPhilanthropistsForum
Соціальна реклама - взаємодія НГО та рекламного ринкуСоціальна реклама - взаємодія НГО та рекламного ринку
Соціальна реклама - взаємодія НГО та рекламного ринку
UkrainianPhilanthropistsForum221 visualizações
Estrevista poner poner por micaelagimenez
Estrevista poner ponerEstrevista poner poner
Estrevista poner poner
micaelagimenez638 visualizações
Cầm tay mùa hè 2013 đêm nhạc - copy (6) por Silo.vn
Cầm tay mùa hè 2013   đêm nhạc - copy (6)Cầm tay mùa hè 2013   đêm nhạc - copy (6)
Cầm tay mùa hè 2013 đêm nhạc - copy (6)
Silo.vn169 visualizações
DesignerPlusBuilder - First Architecture Magazine in Malayalam por Naresh Anand
DesignerPlusBuilder - First Architecture Magazine in MalayalamDesignerPlusBuilder - First Architecture Magazine in Malayalam
DesignerPlusBuilder - First Architecture Magazine in Malayalam
Naresh Anand7.6K visualizações
valuation of long term security financial management por dfmalik12321
valuation of long term security financial managementvaluation of long term security financial management
valuation of long term security financial management
dfmalik123213.1K visualizações
The watering eye por Other Mother
The watering eyeThe watering eye
The watering eye
Other Mother8.8K visualizações
Startup Vs. Big Company Accessing whether you want to be a PM At a large or... por Carlos González de Villaumbrosia
Startup Vs. Big Company  Accessing whether you want to be a PM  At a large or...Startup Vs. Big Company  Accessing whether you want to be a PM  At a large or...
Startup Vs. Big Company Accessing whether you want to be a PM At a large or...
Carlos González de Villaumbrosia461 visualizações
Force and friction por safa-medaney
Force and frictionForce and friction
Force and friction
safa-medaney2.2K visualizações
Unidad 5:origen de los seres vivos por jachifachinacho
Unidad 5:origen de los seres vivosUnidad 5:origen de los seres vivos
Unidad 5:origen de los seres vivos
jachifachinacho1K visualizações
Watering eye por Kranthi Kumar
Watering eyeWatering eye
Watering eye
Kranthi Kumar10.4K visualizações
Linea del tiempo sobre la evolución histórica del modelo atómico por May de la Rosa
Linea del tiempo sobre la evolución histórica del modelo atómico Linea del tiempo sobre la evolución histórica del modelo atómico
Linea del tiempo sobre la evolución histórica del modelo atómico
May de la Rosa680 visualizações
Procesos productivos por jachifachinacho
Procesos  productivosProcesos  productivos
Procesos productivos
jachifachinacho365 visualizações
9780273713654 pp05 por Dasrat goswami
9780273713654 pp059780273713654 pp05
9780273713654 pp05
Dasrat goswami2.1K visualizações

Similar a Introduction in Apache Maven2

How maven makes your development group look like a bunch of professionals. por
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
945 visualizações24 slides
S/W Design and Modularity using Maven por
S/W Design and Modularity using MavenS/W Design and Modularity using Maven
S/W Design and Modularity using MavenScheidt & Bachmann
2.9K visualizações78 slides
Maven por
MavenMaven
MavenJyothi Malapati
1.7K visualizações24 slides
(Re)-Introduction to Maven por
(Re)-Introduction to Maven(Re)-Introduction to Maven
(Re)-Introduction to MavenEric Wyles
127 visualizações30 slides
Mavennotes.pdf por
Mavennotes.pdfMavennotes.pdf
Mavennotes.pdfAnkurSingh656748
10 visualizações45 slides
Ci jenkins maven svn por
Ci jenkins maven svnCi jenkins maven svn
Ci jenkins maven svnAnkur Goyal
2.2K visualizações26 slides

Similar a Introduction in Apache Maven2(20)

How maven makes your development group look like a bunch of professionals. por Fazreil Amreen Abdul Jalil
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 Jalil945 visualizações
S/W Design and Modularity using Maven por Scheidt & Bachmann
S/W Design and Modularity using MavenS/W Design and Modularity using Maven
S/W Design and Modularity using Maven
Scheidt & Bachmann2.9K visualizações
Maven por Jyothi Malapati
MavenMaven
Maven
Jyothi Malapati1.7K visualizações
(Re)-Introduction to Maven por Eric Wyles
(Re)-Introduction to Maven(Re)-Introduction to Maven
(Re)-Introduction to Maven
Eric Wyles127 visualizações
Mavennotes.pdf por AnkurSingh656748
Mavennotes.pdfMavennotes.pdf
Mavennotes.pdf
AnkurSingh65674810 visualizações
Ci jenkins maven svn por Ankur Goyal
Ci jenkins maven svnCi jenkins maven svn
Ci jenkins maven svn
Ankur Goyal2.2K visualizações
Alpes Jug (29th March, 2010) - Apache Maven por Arnaud Héritier
Alpes Jug (29th March, 2010) - Apache MavenAlpes Jug (29th March, 2010) - Apache Maven
Alpes Jug (29th March, 2010) - Apache Maven
Arnaud Héritier1.5K visualizações
Apache Maven at GenevaJUG by Arnaud Héritier por GenevaJUG
Apache Maven at GenevaJUG by Arnaud HéritierApache Maven at GenevaJUG by Arnaud Héritier
Apache Maven at GenevaJUG by Arnaud Héritier
GenevaJUG1.4K visualizações
Intelligent Projects with Maven - DevFest Istanbul por Mert Çalışkan
Intelligent Projects with Maven - DevFest IstanbulIntelligent Projects with Maven - DevFest Istanbul
Intelligent Projects with Maven - DevFest Istanbul
Mert Çalışkan1.3K visualizações
Session 2 por gayathiry
Session 2Session 2
Session 2
gayathiry167 visualizações
Session 2 por gayathiry
Session 2Session 2
Session 2
gayathiry162 visualizações
Riviera JUG (20th April, 2010) - Maven por Arnaud Héritier
Riviera JUG (20th April, 2010) - MavenRiviera JUG (20th April, 2010) - Maven
Riviera JUG (20th April, 2010) - Maven
Arnaud Héritier861 visualizações
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a... por Martin Bergljung
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Martin Bergljung627 visualizações
Maven in mulesoft por venkata20k
Maven in mulesoftMaven in mulesoft
Maven in mulesoft
venkata20k141 visualizações
Jenkins advance topic por Gourav Varma
Jenkins advance topicJenkins advance topic
Jenkins advance topic
Gourav Varma182 visualizações
Developing Liferay Plugins with Maven por Mika Koivisto
Developing Liferay Plugins with MavenDeveloping Liferay Plugins with Maven
Developing Liferay Plugins with Maven
Mika Koivisto11.7K visualizações
Maven por Shraddha
MavenMaven
Maven
Shraddha416 visualizações
Apache Maven por eurosigdoc acm
Apache MavenApache Maven
Apache Maven
eurosigdoc acm44 visualizações
What is maven por sureshraj43
What is mavenWhat is maven
What is maven
sureshraj4395 visualizações

Último

Mini-Track: AI and ML in Network Operations Applications por
Mini-Track: AI and ML in Network Operations ApplicationsMini-Track: AI and ML in Network Operations Applications
Mini-Track: AI and ML in Network Operations ApplicationsNetwork Automation Forum
10 visualizações24 slides
SAP Automation Using Bar Code and FIORI.pdf por
SAP Automation Using Bar Code and FIORI.pdfSAP Automation Using Bar Code and FIORI.pdf
SAP Automation Using Bar Code and FIORI.pdfVirendra Rai, PMP
23 visualizações38 slides
Five Things You SHOULD Know About Postman por
Five Things You SHOULD Know About PostmanFive Things You SHOULD Know About Postman
Five Things You SHOULD Know About PostmanPostman
33 visualizações43 slides
【USB韌體設計課程】精選講義節錄-USB的列舉過程_艾鍗學院 por
【USB韌體設計課程】精選講義節錄-USB的列舉過程_艾鍗學院【USB韌體設計課程】精選講義節錄-USB的列舉過程_艾鍗學院
【USB韌體設計課程】精選講義節錄-USB的列舉過程_艾鍗學院IttrainingIttraining
52 visualizações8 slides
Info Session November 2023.pdf por
Info Session November 2023.pdfInfo Session November 2023.pdf
Info Session November 2023.pdfAleksandraKoprivica4
12 visualizações15 slides
Igniting Next Level Productivity with AI-Infused Data Integration Workflows por
Igniting Next Level Productivity with AI-Infused Data Integration Workflows Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration Workflows Safe Software
263 visualizações86 slides

Último(20)

Mini-Track: AI and ML in Network Operations Applications por Network Automation Forum
Mini-Track: AI and ML in Network Operations ApplicationsMini-Track: AI and ML in Network Operations Applications
Mini-Track: AI and ML in Network Operations Applications
Network Automation Forum10 visualizações
SAP Automation Using Bar Code and FIORI.pdf por Virendra Rai, PMP
SAP Automation Using Bar Code and FIORI.pdfSAP Automation Using Bar Code and FIORI.pdf
SAP Automation Using Bar Code and FIORI.pdf
Virendra Rai, PMP23 visualizações
Five Things You SHOULD Know About Postman por Postman
Five Things You SHOULD Know About PostmanFive Things You SHOULD Know About Postman
Five Things You SHOULD Know About Postman
Postman33 visualizações
【USB韌體設計課程】精選講義節錄-USB的列舉過程_艾鍗學院 por IttrainingIttraining
【USB韌體設計課程】精選講義節錄-USB的列舉過程_艾鍗學院【USB韌體設計課程】精選講義節錄-USB的列舉過程_艾鍗學院
【USB韌體設計課程】精選講義節錄-USB的列舉過程_艾鍗學院
IttrainingIttraining52 visualizações
Info Session November 2023.pdf por AleksandraKoprivica4
Info Session November 2023.pdfInfo Session November 2023.pdf
Info Session November 2023.pdf
AleksandraKoprivica412 visualizações
Igniting Next Level Productivity with AI-Infused Data Integration Workflows por Safe Software
Igniting Next Level Productivity with AI-Infused Data Integration Workflows Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Safe Software263 visualizações
Powerful Google developer tools for immediate impact! (2023-24) por wesley chun
Powerful Google developer tools for immediate impact! (2023-24)Powerful Google developer tools for immediate impact! (2023-24)
Powerful Google developer tools for immediate impact! (2023-24)
wesley chun10 visualizações
Unit 1_Lecture 2_Physical Design of IoT.pdf por StephenTec
Unit 1_Lecture 2_Physical Design of IoT.pdfUnit 1_Lecture 2_Physical Design of IoT.pdf
Unit 1_Lecture 2_Physical Design of IoT.pdf
StephenTec12 visualizações
STPI OctaNE CoE Brochure.pdf por madhurjyapb
STPI OctaNE CoE Brochure.pdfSTPI OctaNE CoE Brochure.pdf
STPI OctaNE CoE Brochure.pdf
madhurjyapb14 visualizações
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLive por Network Automation Forum
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLiveAutomating a World-Class Technology Conference; Behind the Scenes of CiscoLive
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLive
Network Automation Forum31 visualizações
Voice Logger - Telephony Integration Solution at Aegis por Nirmal Sharma
Voice Logger - Telephony Integration Solution at AegisVoice Logger - Telephony Integration Solution at Aegis
Voice Logger - Telephony Integration Solution at Aegis
Nirmal Sharma39 visualizações
6g - REPORT.pdf por Liveplex
6g - REPORT.pdf6g - REPORT.pdf
6g - REPORT.pdf
Liveplex10 visualizações
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas... por Bernd Ruecker
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...
Bernd Ruecker37 visualizações
Piloting & Scaling Successfully With Microsoft Viva por Richard Harbridge
Piloting & Scaling Successfully With Microsoft VivaPiloting & Scaling Successfully With Microsoft Viva
Piloting & Scaling Successfully With Microsoft Viva
Richard Harbridge12 visualizações
Special_edition_innovator_2023.pdf por WillDavies22
Special_edition_innovator_2023.pdfSpecial_edition_innovator_2023.pdf
Special_edition_innovator_2023.pdf
WillDavies2217 visualizações
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N... por James Anderson
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...
James Anderson85 visualizações
HTTP headers that make your website go faster - devs.gent November 2023 por Thijs Feryn
HTTP headers that make your website go faster - devs.gent November 2023HTTP headers that make your website go faster - devs.gent November 2023
HTTP headers that make your website go faster - devs.gent November 2023
Thijs Feryn22 visualizações
Microsoft Power Platform.pptx por Uni Systems S.M.S.A.
Microsoft Power Platform.pptxMicrosoft Power Platform.pptx
Microsoft Power Platform.pptx
Uni Systems S.M.S.A.53 visualizações

Introduction in Apache Maven2

  • 1. Basic introduction in Maven • Introduction • POM (Project Object Model) • Lifecycle • Repository • Dependency Management • Reporting • IDE Integration • Tips & Tricks Heiko Scherrer
  • 2. What is Maven? • A build tool like Apache Ant but: ● Configure your build, don't script it ● Define what you build, not how! • A dependency management tool ● Coherent organization of dependencies • A project management tool Take back control! Heiko Scherrer
  • 3. What is Maven? • Currently using Maven2. Maven3 is almost backward compatible • Benefit of a wide range of plugins to setup your build and reporting • Maven repository server, e.g. Sonatype's Nexus Heiko Scherrer
  • 4. Maven vs. Ant – Why not Ant? • “Convention over Configuration” • Appreciate for building complex modularized applications • Based on a repository to store and resolve artifacts • Maven doesn't have to know about directory structures (use defaults) Heiko Scherrer
  • 5. Downside of Maven • “Convention over Configuration” • Exceptions are less meaningful and configuration errors hard to find • Plugins are less documented Heiko Scherrer
  • 6. Basic introduction in Maven • Introduction • POM (Project Object Model) • Lifecycle • Repository • Dependency Management • Reporting • IDE Integration • Tips & Tricks Heiko Scherrer
  • 7. What represents a project ? • Each project has a project descriptor (pom.xml) • A project is determined using Maven coordinates groupId:artifactId:version:classifier:type • Project Object Model (POM) files support inheritance Heiko Scherrer
  • 8. Standard directory layout • Take advantage of Mavens default configuration - setup a standard directory layout • Maven Archtype plugin creates project structure • The target directory is generated after the first build run Heiko Scherrer
  • 9. POM – Project Object Model (I) • Define your project <project ...> coordinates <modelVersion>4.0.0</modelVersion> <groupId>org.openwms</groupId> • Set a packaging type <artifactId>org.openwms.core</artifactId> <version>1.0.1-SNAPSHOT</version> -> what to build <packaging>jar</packaging> List dependencies, <dependencies> • <dependency> you need for your <groupId>junit</groupId> <artifactId>junit</artifactId> project in different <version>${junit.version}</version> <scope>test</scope> scopes </dependency> </dependencies> • Use custom </project> properties Heiko Scherrer
  • 10. POM - Scopes • COMPILE Included in compilation, packaged and delivered • PROVIDED Included in compilation, but not packaged. Expected to be provided at runtime • RUNTIME Not included in compilation classpath, but expected at runtime (Class.forName...) • TEST Only included in test classpath and test phase; not delivered • SYSTEM Like provided, but must be referenced directly. Used for non Maven artifacts Heiko Scherrer
  • 11. POM Inheritance • A super POM comes with your local Maven installation (maven2.jar#pom-4.0.0.xml) • POM files inherit configuration from a parent project • Common used dependencies or configuration snippets shall be moved to a parent project • That way it is possible to build complex inheritance strategies • Find the effective POM: mvn help:effective-pom Heiko Scherrer
  • 12. Grouping & Inheritance • Building modules to group projects • Use the packaging type pom and define submodules • Group modules and configure build with Profiles • Use inheritance to follow DRY principle Heiko Scherrer
  • 13. POM – Project Object Model (II) <project ...> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.openwms</groupId> <artifactId>org.openwms</artifactId> • Define a parent <version>1.0.1-SNAPSHOT</version> </parent> project <artifactId>org.openwms.core</artifactId> <packaging>pom</packaging> • Project coordinates <name>OpenWMS CORE module</name> <modules> <module>org.openwms.core.domain</module> Project name and a </modules> • <build> list of submodules <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler- • Override plugin <configuration> plugin</artifactId> <source>1.6</source> configuration <target>1.6</target> </configuration> </plugin> </plugins> </build> </project> Heiko Scherrer
  • 14. Basic introduction in Maven • Introduction • POM (Project Object Model) • Lifecycle • Repository • Dependency Management • Reporting • IDE Integration • Tips & Tricks Heiko Scherrer
  • 15. Lifecycle, Phases, Plugins and Goals • Maven uses plugins to accomplish it's work • Each plugin offers one or more goals • A goal is specific to a plugin - comparable to an Ant target • Most plugins are developed and driven by the community • Plugin goals are documented on the generated Maven site Plugin Goal • Calling a single plugin goal: mvn compiler:compile Heiko Scherrer
  • 16. Lifecycles, Phases, Plugins and Goals • The Lifecycle is a pre-defined procedural process for building and distributing a particular artifact • A Phase is one step in Mavens Build Lifecycle ● Plugin goals are attached to an execution Phase ● Each Phase can perform one or more plugin goals • Kick a Lifecycle Phase execution: mvn clean or mvn site • 3 standard Lifecycles : clean, default, site • Plugins can define own Lifecycles (see Flex plugin) Heiko Scherrer
  • 17. Standard Lifecycle - Clean • Provided by the clean plugin • Pre-configured in the pre-clean Super POM • Run mvn clean to execute all three clean phases within the Lifecycle • Deletes build post-clean directory ${basedir}/target Heiko Scherrer
  • 18. Standard Lifecycle - Default validate • 21 phases • Validate project compile completeness for build run • Compile source code test • Run unit tests • Package in distributable format package • Install to local repository install • Deploy; copies the artifacts to a remote repository deploy Heiko Scherrer
  • 19. Basic introduction in Maven • Introduction • POM (Project Object Model) • Lifecycle • Repository • Dependency Management • Reporting • IDE Integration • Tips & Tricks Heiko Scherrer
  • 20. Local Maven Repository • When executing the Lifecycle phase install, Maven populates a local repository with artifacts • Local repository: ~/.m2/repository • Dependencies and custom deliverables are stored hierarchically • The groupId is interpreted as directory path • The artifactId and version define the name of the artifact Heiko Scherrer
  • 21. Remote Maven Repository • A Remote repository is a central, company- wide storage for build artifacts • Serves as ● a Proxy (to minimize bandwidth) ● a storage for own project artifacts (accessible by Maven or web UI) • Sonatype Nexus Repository Manager is OpenSource (comm. version available) • Copy to central repo: mvn deploy Heiko Scherrer
  • 22. Remote Maven Repository II Heiko Scherrer
  • 23. Remote Maven Repository III Deploy remote <distributionManagement> • In your top-level pom <repository> <id>org_openwms_rudi_releases</id> <name>OpenWMS Internal Releases</name> <url>http://rudi:8081/nexus/content/rel</url> </repository> • Define repository <snapshotRepository> server for snapshots <id>org_openwms_rudi_snapshots</id> <name>OpenWMS Internal Snapshots</name> <url>http://rudi:8081/nexus/content/snap</url> and releases </snapshotRepository> <site> <id>org_openwms_sf</id> <name>OpenWMS Website</name> Server definition for <url>scp://${distribution.web.server}</url> • </site> website deployment </distributionManagement> • Use placeholders! Heiko Scherrer
  • 24. Remote Maven Repository IV <settings> ~/.m2/settings.xml: <servers> <server> <id>org_openwms_rudi_releases</id> • Server credentials <username>USERNAME</username> <password>PASSWORD</password> used to deploy </server> </servers> <mirrors> Route all requests to a <mirror> • <id>all</id> <mirrorOf>*</mirrorOf> proxy <url>http://rudi:8081/nexus/content/all</url> </mirror> </mirrors> • Manage exception <repositories> <repository> routes <id>org_openwms_sf_snap</id> <url>http://rudi:8081/nexus/content/snap</url> <releases><enabled>false</enabled></releases> <snapshots><enabled>true</enabled></snapshots> → Demo </repository> </repositories> </settings> Heiko Scherrer
  • 25. Basic introduction in Maven • Introduction • POM (Project Object Model) • Lifecycle • Repository • Dependency Management • Reporting • IDE Integration • Tips & Tricks Heiko Scherrer
  • 26. Dependency Management • Manage common dependency declarations in parent pom: <dependencyManagement> • Manage common plugin configuration in parent pom: <pluginManagement> • Define repository locations for artifact & plugin repositories in parent pom • Use variables for substitute versions Heiko Scherrer
  • 27. Dependency Management - Example <dependencies> <dependency> • Add dependencies <groupId>javaee</groupId> <artifactId>javaee-api</artifactId> <scope>provided</scope> provided by the EJB </dependency> container <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> <exclusions> • Exclude <exclusion> <groupId>com.sun.jmx</groupId> <artifactId>jmxri</artifactId> dependencies when </exclusion> </exclusions> </dependency> necessary <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> • Set the proper <scope>test</scope> </dependency> scope to avoid <dependency> <groupId>commons-lang</groupId> packaging of <artifactId>commons-lang</artifactId> <version>2.4</version> <scope>compile</scope> dependencies </dependency> </dependencies> Heiko Scherrer
  • 28. Worth to mention • Resource filtering • Profiles • Classifiers Heiko Scherrer
  • 29. Basic introduction in Maven • Introduction • POM (Project Object Model) • Lifecycle • Repository • Dependency Management • Reporting • IDE Integration • Tips & Tricks Heiko Scherrer
  • 30. Reporting & Site Generation ASDoc Cobertura Website Javadoc JXR PMD Checkstyle Taglist JDepend CPD Heiko Scherrer
  • 31. Reporting & Site Generation • Run site generation: mvn site • Maven-site-plugin • Site content: ${basedir}/src/site • Accepted formats: apt, fml, xdoc, DocBook, … Heiko Scherrer
  • 32. Reporting & Site Generation • Report generation is part of site • Site customization is done within <reporting> section • Useful plugins: maven-project-info-reports-plugin, dashboard-maven-plugin, cobertura-maven-plugin, maven-surefire-report-plugin, maven-javadoc-plugin • → Demo Heiko Scherrer
  • 33. Basic introduction in Maven • Introduction • POM (Project Object Model) • Lifecycle • Repository • Dependency Management • Reporting • IDE Integration • Tips & Tricks Heiko Scherrer
  • 34. IDE Integration (Eclipse) • Usually each IDE has its own project setting files • Avoid sharing platform specific files within your VCS • Import pom.xml as Maven project → Eclipse demo • Use maven-eclipse-plugin to add particular project facets: mvn eclipse:eclipse • Use the IDE to develop – not to build. → Keep Maven out of development process Heiko Scherrer
  • 35. IDE Integration II (Eclipse) • Install m2eclipse: http://m2eclipse.sonatype.org/sites/m2e • m2eclipse comes with Maven3 beta, change manually to local Maven2 installation • In addition to the local and remote repository, m2eclipse uses the workspace as 1st. Repository • Use favorite Run Configurations to run Maven Heiko Scherrer
  • 36. Basic introduction in Maven • Introduction • POM (Project Object Model) • Lifecycle • Repository • Dependency Management • Reporting • IDE Integration • Tips & Tricks Heiko Scherrer
  • 37. Tips & Tricks • Download sources mvn dependency:sources • Define <server> in your settings.xml to store your credentials • Add -DskipTests to bypass test phase • Add -U to update snapshot dependencies manually • m2e: Nested projects lead to artifact resolving errors Heiko Scherrer
  • 38. Tips & Tricks II • Aggregate common config in top-level pom • SVN ignore IDE specific files and use pom as project descriptor at all • Don't commit binaries or generated files to VCS Heiko Scherrer
  • 40. Document History • Initial svn rev. [1472]; • Updated svn rev. [1475];2011-01-16 Heiko Scherrer