SlideShare a Scribd company logo
1 of 40
Maven for AMPer - An Overview
                     By Yukti Kaura
The Intent
                                                                                   2




 The intent of this presentation is to clarify the understanding of how
   Maven is integrated with AMPer. During the course of this
   presentation the focus would be to answer the following basic
   questions
 THE BASICS
 • What is Maven?
 • What is Maven to AMPer: Case Study?
 • What does the Maven site contain?
 • What are the External Maven Tools used in Eclipse?


 DIVING DEEPER
 • What is settings.xml?
 • What is pom.xml?



Maven for AMPer - An Overview | CONFIDENTIAL 2008                    December 13, 2012
What is Maven ?
                                                                                3




 •     MAVEN – is a project management tool.
 •     It provides a superset of features found in a build tool
       such as ANT.
 •     In addition to providing build capabilities- used to
       build deployable artifacts from source code, Maven
       can also run reports, generate a web site etc…
 •     More formally,
       Maven is a project management tool which
       encompasses a project object model,
       a set of standards, a project lifecycle,
       a dependency management system, and logic for
       executing plugin goals at defined phases in a
       lifecycle. When you use Maven, you describe your
       project using a well-defined project object model .


Maven for AMPer - An Overview | CONFIDENTIAL 2008                 December 13, 2012
Project Lifecycle
                                                                       4




            http://maven.apache.org/plugins/index.html
Maven for AMPer - An Overview | CONFIDENTIAL 2008        December 13, 2012
Plugin goals in defined phases of a lifecycle
                                                                                       5




              Plugin contains goals




                                                    Bound Goals are Run when
                                                      Their Phases Execute
Maven for AMPer - An Overview | CONFIDENTIAL 2008                        December 13, 2012
Standard Directory Layout of Maven
                                                                                                  6




  src/main/java                       Application/Library sources

  src/main/resources                  Application/Library resources

  src/main/filters                    Resource filter files

  src/main/assembly                   Assembly descriptors

  src/main/config                     Configuration files

  src/main/webapp                     Web application sources

  src/test/java                       Test sources

  src/test/resources                  Test resources

  src/test/filters                    Test resource filter files

  src/site                            Site

  LICENSE.txt                         Project's license

  README.txt                          Project's readme



                                                                      Benefits of
                                                                      Standards
Maven for AMPer - An Overview | CONFIDENTIAL 2008                                   December 13, 2012
Dependency Management                                                                            7




 Project A depends on projects B and                                  A
 C. Project B depends on project D,
 and project C depends on project E.
 The full set of direct and transitive
 dependencies for project A would be                                                       C
 projects B, C, D, and E, but all
                                                    B
 project A had to do was define a
 dependency on B and C.

 Transitive dependencies can come                   D                                        E
 in handy when your project relies on
 other projects with several small
 dependencies (like Hibernate,
 Apache Struts, or the Spring                              You just tell Maven which
 Framework).                                            libraries you need, and Maven
                                                         will take care of the libraries
                                                         that your libraries need (and
                                                                     so on).

Maven for AMPer - An Overview | CONFIDENTIAL 2008                                 December 13, 2012
Maven Coordinates                                                                       8




                                                                      pom.xml




                     Maven Space is a coordinate system of projects


Maven for AMPer - An Overview | CONFIDENTIAL 2008                          December 13, 2012
Maven Repository
                                                                           9




    Maven ships with the bare minimum and fetches from a
    remote repository when it needs to. Maven ships with a
    default remote repository location
    (http://repo1.maven.org/maven2) which it uses to
    download the core Maven plugins and dependencies.

    Maven repositories are both a local cache of artifacts
    downloaded from a remote repository and a mechanism
    for allowing your projects to depend on each
    other.




Maven for AMPer - An Overview | CONFIDENTIAL 2008            December 13, 2012
How is Maven used in AMPer?
                                                                                            10




 •     Making the build process easy

 •     Providing quality project information
          »    Unit test reports including coverage

 •       Providing guidelines for best practices development
       E.g. Source code is assumed to be in $
       {basedir}/src/main/java and resources are assumed to be in $
       {basedir}/src/main/resources. Tests are assumed to be in $
       {basedir}/src/test, and a project is assumed to produce
       a JAR file.                                                    Which version of
                                                                        Maven are we
 •     Coherent site of project information: Using the same           using? Maven 2.0
       metadata as for the build process, Maven is able to
       generate a web site

 •     Maven also assists in project workflow such as
       release management.
          »    Maven integrates with source control system SVN and
               manages the release of a project.



Maven for AMPer - An Overview | CONFIDENTIAL 2008                              December 13, 2012
What does the Maven site contain?                                            11




AirMessenger Personal project report




This report contains information about JUnit, FindBugs and CheckStyle.It
also contains data about The Lines Of Code, Change Log, Build Log and
% Code Coverage.
This is an example of the continuous integration system used by the
project.

 http://maven.apache.org/plugins/index.html            Links

Maven for AMPer - An Overview | CONFIDENTIAL 2008                December 13, 2012
12




               What are the External Maven Tools used in Eclipse?




Maven for AMPer - An Overview | CONFIDENTIAL 2008                   December 13, 2012
What are the External Maven Tools used in Eclipse?                                                                  13




 •     Maven 2 install
      This tool builds all the modules, and installs it in the local repository. The local repository
       is created in your home directory (or alternative location that you created it), and is the
       location where all downloaded binaries and the projects you built are stored. When you
       run install, Maven will copy the each project's main artifact and each assembly to your
       local Maven repository. All of these artifacts are now available for reference as
       dependencies in other projects locally.
      Sample output after running the tool




Maven for AMPer - An Overview | CONFIDENTIAL 2008                                                       December 13, 2012
14




 •     Maven 2 Clean
       This tool deletes the output of a build by deleting the build directory. If you
       haven't customized the location of the build directory it will be the $
       {basedir}/target directory as defined by the Super POM.
       Sample output after running the tool




Maven for AMPer - An Overview | CONFIDENTIAL 2008                                        December 13, 2012
15




                                                    STOP & PONDER




Maven for AMPer - An Overview | CONFIDENTIAL 2008                   December 13, 2012
16




                                                    Settings.xml




Maven for AMPer - An Overview | CONFIDENTIAL 2008                  December 13, 2012
settings.xml
                                                                                            17




       Settings in this file are settings which apply to many      <settings>
                                                                          <localRepository/>
       projects and which should not be bundled to any                    <interactiveMode/>
       specific project, or distributed to an audience. These             <usePluginRegistry/
                                                                          >
       include values such as the local repository location,              <offline/>
       alternate remote repository servers, and                           <pluginGroups/>
       authentication information. Location where                         <servers/>
                                                                          <mirrors/>
       a settings.xml file may live:                                      <proxies/>
          » User-specific Settings File: ~/.m2/settings.xml               <profiles/>
                                                                          <activeProfiles/>
                                                                   </settings>
          The settings element in the settings.xml file contains
            elements used to define values which configure
            Maven execution




Maven for AMPer - An Overview | CONFIDENTIAL 2008                              December 13, 2012
Settings.xml - Piece by Piece
                                                                                                                     18




 SERVERS
 The distributionManagement element of the POM defines the repositories for
    deployment. However, certain settings such as security credentials should not be
    distributed along with the pom.xml. This type of information should exist on the build
    server in the settings.xml.
 <servers>
   <server>
    <username>maven</username> These elements appear as a pair denoting the login
      <password>maven</password> and password required to authenticate to this server.

      <id>firsthop</id> This is the id of the server (not of the user to login as) that
                matches the distributionManagement repository element's id
    </server>
   </servers>

 MIRRORS
 <mirrors>
   <mirror>
    <id>standalone.repository</id> - The unique identifier of this mirror
      <url>file:///C:/AlexandriaPlatformSDK/bin/../m2_fhrepository</url> The base URL of this mirror.
      <mirrorOf>central</mirrorOf> The id of the server that this is a mirror of.
                                      For example, to point to a mirror of the Maven central server
                                      (http://repo1.maven.org/maven2), set this element to central.
   </mirror>
 </mirrors>


Maven for AMPer - An Overview | CONFIDENTIAL 2008                                                       December 13, 2012
settings.xml
                                                                                          19




 PROFILES

 The profile element in the settings.xml is a truncated version of the pom.xml
    profile element. It consists of the
 •      activation,
 •      repositories,
 •      pluginRepositories
 •      and properties elements.
    The profile elements only include these four elements because they
    concern themselves with the build system as a whole (which is the role of
    the settings.xml file), not about individual project object model settings.
     If a profile is active from settings, its values will override any equivalent
    profiles which matching identifiers in a POM.
    PROFILES - >REPOSITORIES
       Repositories are remote collections of projects from which Maven uses to
       populate the local repository of the build system. It is from this local
       repository that Maven calls it plugins and dependencies. Different remote
       repositories may contain different projects, and under the active profile
       they may be searched for a matching release or snapshot artifact.



Maven for AMPer - An Overview | CONFIDENTIAL 2008                            December 13, 2012
settings.xml
                                                                                                               20




 Snapshot and Release These are the policies for each type of artifact, Release or
    snapshot. With these two sets, a POM has the power to alter the policies for each
    type independent of the other within a single repository. For example, one may
    decide to enable only snapshot downloads, possibly for development purposes.

 <repository>
        <snapshots>
                <enabled>true</enabled> true or false for whether this repository is enabled for the
            respective type (releases or snapshots)
                <updatePolicy>always</updatePolicy> This element specifies how often updates should attempt
            to occur. Maven will compare the local POMs timestamp to the remote. The choices are:
            always, daily (default), interval:X (where X is an integer in minutes) or never.
       </snapshots>
       <releases>
                <enabled>true</enabled>
                <updatePolicy>always</updatePolicy>
       </releases>
       <id>firsthop</id>
       <name>Airwide Solutions Maven Repository</name>
      <url>http://maven.alexmontreal.airwidesolutions.com/maven/repository2</url>
 </repository>




Maven for AMPer - An Overview | CONFIDENTIAL 2008                                                 December 13, 2012
settings.xml
                                                                                           21




       PROFILES -> PLUGIN REPOSITORIES
       Repositories are home to two major types of artifacts. The first are
       artifacts that are used as dependencies of other artifacts. The
       other type of artifact is plugins. Maven plugins are themselves a
       special type of artifact. Because of this, plugin repositories are
       separated from other repositories. The structure of the
       pluginRepositories element block is similar to the repositories
       element. The pluginRepository elements each specify a remote
       location of where Maven can find new plugins


 ACTIVE PROFILES

       The final piece of the settings.xml puzzle is
       the activeProfiles element. This contains a set of active profile
       elements, which each have a value of a profile id. Any profile id
       defined as an activeProfile will be active, regardless of any
       environment settings

          <activeProfiles>
            <activeProfile>firsthopDefault</activeProfile>
           </activeProfiles>



Maven for AMPer - An Overview | CONFIDENTIAL 2008                             December 13, 2012
22




                                                    STOP & PONDER




Maven for AMPer - An Overview | CONFIDENTIAL 2008                   December 13, 2012
23




                                                    Pom.xml




Maven for AMPer - An Overview | CONFIDENTIAL 2008             December 13, 2012
What is a POM?
                                                                                      24




 •     A Project Object Model or POM
       is the fundamental unit of work
       in Maven. It is an XML file that
       contains information about the
       project and configuration
       details used by Maven to build
       the project. It contains default
       values for most projects.
       Examples for this is the build
       directory, which is target; the
       source directory, which
       is src/main/java; the test source
       directory, which is src/main/test

 •     Maven projects, dependencies,
       builds, artifacts: all of these are          The Project Object Model
       objects to be modeled and
       described. These objects are
       described by an XML file called
       a Project Object Model .



Maven for AMPer - An Overview | CONFIDENTIAL 2008                        December 13, 2012
Concepts
                                                                                                       25




          Project Structure
          extension
           |-- pom.xml                                      The source directory, which
           `-- src                                                  is src/main/java;
                |-- main                                    The test source directory,
                | `-- java                                  which is src/main/test is
                |        `-- com
                                                            Default Project Structure
                |             `-- airwidesolutions
                |                 `-- amper
                |                    `-- App.java
                `-- test
                    `-- java
                        `-- com
                             `-- airwidesolutions
                                  `-- amper
                                         `-- AppTest.java




Maven for AMPer - An Overview | CONFIDENTIAL 2008                                         December 13, 2012
The Super POM                                                                     26




 •     All Maven project POMs extend the Super POM which
       defines a set of defaults shared by all projects.
 •     The Super POM defines some standard configuration
       variables that are inherited by all projects.
        The default Super POM defines a single remote Maven
       repository with an ID of central

 •     The central Maven repository also contains Maven
       plugins. The default plugin repository is the central Maven
       repository.

 •     The build element sets the default values for directories in
       the Maven Standard Directory layout .i.e. it specifies the
       default directory structure.




Maven for AMPer - An Overview | CONFIDENTIAL 2008                     December 13, 2012
Maven Coordinate                                                                                                      27



 <project>
 <modelVersion>4.0.0</modelVersion> - Current model version should be set to 4.0.0
 <groupId>com.mycompany.app</groupId>
 <artifactId>my-app</artifactId>
 <version>1</version>
 </project>

 Maven Coordinate is made up of three components. These three values form the project's fully qualified
 artifact name. This is in the form of <groupId>:<artifactId>:<version>

         groupId
         A groupId groups a set of related artifacts. Group identifiers generally resemble a Java package
             name.
         e.g. com.airwidesolutions.amper

          artifactId
                The artifactId is the project's main identifier. When you generate an artifact, this artifact is
                   going to be
                named with the artifactId. e.g. amper.build

          version
             When an artifact is released, it is released with a version number. This version number is an
             identifier of the form <major version>.<minor version>.<incremental version>-
             <qualifier> such as "1.1.2-alpha-01". We can also use a snapshot version. A snapshot version
             is a version for a component which is under development, snapshot version numbers always end
             in SNAPSHOT; for example, "1.0-SNAPSHOT“.Maven will expand SNAPSHOT token to a date and
             time value converted to UTC (Coordinated Universal Time) e.g. 1.0-20080207-230803-1 .




Maven for AMPer - An Overview | CONFIDENTIAL 2008                                                         December 13, 2012
Project Inheritance
                                                                                                    28




 •     The following slides deal with 3 scenarios as examples and the variation in the
       definition of pom.xml in each case
 •     Example 1
       Let us specify their directory structure as this




       Let us reuse our previous artifact, com.mycompany.app:my-app:1 as displayed in the
       previous slide. Now, if we were to turn com.mycompany.app:my-app:1 into a parent
       artifact of com.mycompany.app:my-module:1,we will have to modify
       com.mycompany.app:my-module:1's POM to the following configuration:

          <project>
           <parent>                                       Notice that we now have an added
            <groupId>com.mycompany.app</groupId>          section, the parent section. This
            <artifactId>my-app</artifactId>               section allows us to specify which
            <version>1</version>                          artifact is the parent of our POM.
           </parent>
           <modelVersion>4.0.0</modelVersion>
                                                          Alternatively, if we want the groupId
           <groupId>com.mycompany.app</groupId>
           <artifactId>my-module</artifactId>
                                                          and / or the version of your modules to
           <version>1</version>                           be the same as their parents, you can
          </project>                                      remove the groupId and / or the version
                                                          identity of your module in its POM.


Maven for AMPer - An Overview | CONFIDENTIAL 2008                                      December 13, 2012
Project Aggregation
                                                                                                                  29




 •     Project Aggregation is similar to Project Inheritance. But instead of specifying the
       parent POM from the module, it specifies the modules from the parent POM. By doing
       so, the parent project now knows its modules, and if a Maven command is invoked
       against the parent project, that Maven command will then be executed to the parent's
       modules as well. To do Project Aggregation, you must do the following:

 •     Change the parent POMs packaging to the value "pom" .
 •     Specify in the parent POM the directories of its modules (children POMs)

 <project>
                                                    In the revised com.mycompany.app:my-app:1, the
  <modelVersion>4.0.0</modelVersion>
                                                    packaging section and the modules sections were
  <groupId>com.mycompany.app</groupId>
                                                    added. For the packaging, it's value was set to "pom", and
  <artifactId>my-app</artifactId>
                                                    for the modules section, we have the element
  <version>1</version>                              <module>my-module</module>.
  <packaging>pom</packaging>
                                                    The value of <module> is the relative path from the
                                                    com.mycompany.app:my-app:1 to
  <modules>
                                                    com.mycompany.app:my-module:1's POM (by practice,
    <module>my-module</module>
                                                    we use the module's artifactId as the module directory's
   </modules>
                                                    name).
 </project>




Maven for AMPer - An Overview | CONFIDENTIAL 2008                                                    December 13, 2012
30
 Project Inheritance vs Project Aggregation

        INHERITANCE

 •     If you have several Maven projects, and they all have similar configurations, you can
       refactor your projects by pulling out those similar configurations and making a
       parent project. Thus, all you have to do is to let your Maven projects inherit that
       parent project, and those configurations would then be applied to all of them.

       AGGREGATION
 •     And if you have a group of projects that are built or processed together, you can
       create a parent project and have that parent project declare those projects as its
       modules. By doing so, you'd only have to build the parent and the rest will follow.

 •     But of course, you can have both Project Inheritance and Project Aggregation.
       Meaning, you can have your modules specify a parent project, and at the same time,
       have that parent project specify those Maven projects as its modules. You'd just
       have to apply all three rules:

 •     Specify in every child POM who their parent POM is.
 •     Change the parent POMs packaging to the value "pom" .
 •     Specify in the parent POM the directories of its modules (children POMs)




Maven for AMPer - An Overview | CONFIDENTIAL 2008                                     December 13, 2012
Example 3
                                                                                        31




  To do both project inheritance and aggregation, you only have to apply
  all three rules.
  com.mycompany.app:my-app:1's POM

  <project>
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.mycompany.app</groupId>
   <artifactId>my-app</artifactId>
   <version>1</version>
   <packaging>pom</packaging>
   <modules>
    <module>../my-module</module>
   </modules>
  </project>
  com.mycompany.app:my-module:1's POM

  <project>
   <parent>
    <groupId>com.mycompany.app</groupId>
    <artifactId>my-app</artifactId>
    <version>1</version>
    <relativePath>../parent/pom.xml</relativePath>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>my-module</artifactId>
  </project>
Maven for AMPer - An Overview | CONFIDENTIAL 2008                          December 13, 2012
Dependency Management
                                                                                                  32




 •     Maven can manage both internal and external dependencies. An external dependency
       for a Java project might be a library such as Log4J. An internal dependency is
       illustrated by a web application project depending on another project that contains
       service classes, model objects, or persistence logic .
 Dependency Scope
 •     Scope controls which dependencies are available in which classpath, and which
       dependencies are included with an application .
 •     compile
       compile is the default scope; all dependencies are compile-scoped if a scope is not
       supplied. compile dependencies are available in all classpaths.Furthermore, those
       dependencies are propagated to dependent projects.
 •     provided
          provided dependencies are used when you expect the JDK or a container to provide.
          provided dependencies are available on the compilation classpath (not runtime).
 •     runtime
          runtime dependencies are required to execute and test the system, but they are not
          required for compilation
 •     test
        test -scoped dependencies are not required during the normal operation of an
       application, and they are available only during test compilation and execution phases


Maven for AMPer - An Overview | CONFIDENTIAL 2008                                    December 13, 2012
Example from ldap/pom.xml
                                                                        33




  <dependencies>
       <dependency>
          <groupId>com.firsthop.wb2</groupId>
          <artifactId>wb2.platform.nnapi</artifactId>
          <scope>provided</scope>
         </dependency>
         <dependency>
          <groupId>com.firsthop.wb2</groupId>
          <artifactId>wb2.platform.nnapi</artifactId>
          <type>test-jar</type>
          <scope>provided</scope>
         </dependency>
         <dependency>
          <groupId>com.firsthop.wb2</groupId>
          <artifactId>wb2.platform.mndeploy</artifactId>
          <scope>compile</scope>
         </dependency>
  </dependencies>




Maven for AMPer - An Overview | CONFIDENTIAL 2008          December 13, 2012
Dependency Management
                                                                                                    34




 •     The dependency management section is a mechanism for centralizing dependency
       information. When you have a set of projects that inherits a common parent it's
       possible to put all information about the dependency in the common POM and have
       simpler references to the artifacts in the child POMs.

 •     Maven provides a way for you to consolidate dependency version numbers in the
       dependencyManagement element. You'll usually see the
       dependencyManagement element in a top-level parent POM for an organization or
       project. Using the dependencyManagement element in a pom.xml allows you to
       reference a dependency in a child project without having to explicitly list the version.
       Maven will walk up the parent-child hierarchy until it finds a project with a
       dependencyManagement element, it will then use the version specified in this
       dependencyManagement element.

 •     Default dependency information for projects that inherit from this one. The
       dependencies in this section are not immediately resolved. Instead, when a POM
       derived from this one declares a dependency described by a matching groupId and
       artifactId, the version and other values from this section are used for that
       dependency if they were not already specified.




Maven for AMPer - An Overview | CONFIDENTIAL 2008                                      December 13, 2012
Example
                                                                                                               35




       For example, if you have a large set of projects which make use of the
       amper.personalservicelogic.api version 0.0.7, you could define the following
       dependencyManagement element in your multi-module project's top-level POM.
        <dependencyManagement>
             <dependencies>
               <dependency>
                  <groupId>com.airwidesolutions.amper</groupId>
                              <artifactId>amper.personalservicelogic.api</artifactId>
                  <version>0.0.7</version>
               </dependency>
             <dependencies>
        </dependencyManagement>
        Then, in a child project, you can add a dependency to the amper.personalservicelogic.api
            using the following dependency XML:
        <dependencies>
               <dependency>
                  <groupId>com.airwidesolutions.amper</groupId>
                              <artifactId>amper.personalservicelogic.api</artifactId>
              </dependency>
        <dependencies>
               The child project did not have to explicitly list the version of
               the amper.personalservicelogic.api dependency. Because this dependency was defined in the
               top-level POM's dependencyManagement element, the version number is going to propagate to
               the child project's dependency



Maven for AMPer - An Overview | CONFIDENTIAL 2008                                                 December 13, 2012
Build tag
                                                                                                       36




The <build> element contains informations required to build the project.
<build>
    <plugins> The list of plugins to use.
    <plugin>
    <artifactId>maven-release-plugin</artifactId>
    <configuration>
           <tagBase>https://svn.alexmontreal.airwidesolutions.com/svn/repository
   /amper/selfprovisioning/tags</tagBase>
    </configuration>
   </plugin>
 </plugins>
    <testResources> This element describes all of the classpath resources such as
                             properties files associated with a project's unit tests.
       <testResource>
           <filtering>true</filtering> Whether resources are filtered to replace tokens
                                     with parameterised values or not. The
                                     values are taken from the properties element

                  <directory>${basedir}/src/test/resources</directory>
                            Describe the directory where the resources are stored.

               <includes>
                      <include>**/wb2.xml</include> A list of patterns to include, e.g. **/*.xml.
               </includes>
       </testResource>
    </testResources>
</build>
Maven for AMPer - An Overview | CONFIDENTIAL 2008                                         December 13, 2012
SCM tag
                                                                                                         37




 The <scm> element contains informations required to the SCM (Source Control
    Management) of the project.

 <scm>
    <connection>scm:svn:https://svn.alexmontreal.airwidesolutions.com/svn/repository/amper/selfprovi
    sioning/trunk</connection>
     The source control management system URL that describes the repository and how
     and how to connect to the repository.
    Note :- The SCM we use is SubVersioN which is among the fully implemented SCM of
    Maven

 <developerConnection>scm:svn:https://svn.alexmontreal.airwidesolutions.com/svn/repository/amper/sel
     fprovisioning/trunk</developerConnection>
    Just like connection, but for developers, i.e. this scm connection will not be read
     only.
  <url>https://svn.alexmontreal.airwidesolutions.com/svn/repository/amper/selfprovisioning/trunk</url>
    The URL to the project's browsable SCM repository
 </scm>




Maven for AMPer - An Overview | CONFIDENTIAL 2008                                           December 13, 2012
Distribution Management
                                                                                                     38




 This element describes all that pertains to distribution for a project. It is primarily used for
     deployment of artifacts and the site produced by the build.



  <distributionManagement>
       <repository> Information needed to deploy the artifacts generated by the project
                          to a remote repository
              <id>firsthop</id> A unique identifier for a repository. This is used to match
                               the repository to configuration in the settings.xml file
              <name> Airwide Solutions Maven Repository</name> Human readable name
                                                                of the repository.
                                               <url>
      scp://maven.alexmontreal.airwidesolutions.com/srv/maven/repository2</url>
              The url of the repository, in the form protocol://hostname/path.
       </repository>
  </distributionManagement>




Maven for AMPer - An Overview | CONFIDENTIAL 2008                                       December 13, 2012
39




                                                    STOP & PONDER




Maven for AMPer - An Overview | CONFIDENTIAL 2008                   December 13, 2012
References
                                                                     40




 •     http://maven.apache.org/ref/current/maven-
       model/maven.html#class_DependencyManagement
 •     http://www.sonatype.com/book/reference/public-
       book.html
 •     http://maven.apache.org/guides/




Maven for AMPer - An Overview | CONFIDENTIAL 2008       December 13, 2012

More Related Content

What's hot

What's hot (20)

Introduction to Maven
Introduction to MavenIntroduction to Maven
Introduction to Maven
 
Using Maven 2
Using Maven 2Using Maven 2
Using Maven 2
 
Apache Maven
Apache MavenApache Maven
Apache Maven
 
Maven
MavenMaven
Maven
 
Log management (elk) for spring boot application
Log management (elk) for spring boot applicationLog management (elk) for spring boot application
Log management (elk) for spring boot application
 
Maven ppt
Maven pptMaven ppt
Maven ppt
 
Maven Presentation - SureFire vs FailSafe
Maven Presentation - SureFire vs FailSafeMaven Presentation - SureFire vs FailSafe
Maven Presentation - SureFire vs FailSafe
 
Maven
MavenMaven
Maven
 
Maven
MavenMaven
Maven
 
Maven plugins, properties en profiles: Advanced concepts in Maven
Maven plugins, properties en profiles: Advanced concepts in MavenMaven plugins, properties en profiles: Advanced concepts in Maven
Maven plugins, properties en profiles: Advanced concepts in Maven
 
(Re)-Introduction to Maven
(Re)-Introduction to Maven(Re)-Introduction to Maven
(Re)-Introduction to Maven
 
Maven
MavenMaven
Maven
 
Maven
MavenMaven
Maven
 
An introduction to Maven
An introduction to MavenAn introduction to Maven
An introduction to Maven
 
Maven
MavenMaven
Maven
 
Introduction to Maven
Introduction to MavenIntroduction to Maven
Introduction to Maven
 
Intelligent Projects with Maven - DevFest Istanbul
Intelligent Projects with Maven - DevFest IstanbulIntelligent Projects with Maven - DevFest Istanbul
Intelligent Projects with Maven - DevFest Istanbul
 
Maven tutorial
Maven tutorialMaven tutorial
Maven tutorial
 
Maven basics
Maven basicsMaven basics
Maven basics
 
What is maven
What is mavenWhat is maven
What is maven
 

Viewers also liked

Tech Talk #5 : Code Analysis SonarQube - Lương Trọng Nghĩa
Tech Talk #5 : Code Analysis SonarQube - Lương Trọng NghĩaTech Talk #5 : Code Analysis SonarQube - Lương Trọng Nghĩa
Tech Talk #5 : Code Analysis SonarQube - Lương Trọng NghĩaNexus FrontierTech
 
Maven for Dummies
Maven for DummiesMaven for Dummies
Maven for DummiesTomer Gabel
 
Build Automation using Maven
Build Automation using Maven Build Automation using Maven
Build Automation using Maven Ankit Gubrani
 
Selenium Test Automation
Selenium Test AutomationSelenium Test Automation
Selenium Test AutomationBabuDevanandam
 
Continuous integration and delivery for java based web applications
Continuous integration and delivery for java based web applicationsContinuous integration and delivery for java based web applications
Continuous integration and delivery for java based web applicationsSunil Dalal
 

Viewers also liked (8)

Tech Talk #5 : Code Analysis SonarQube - Lương Trọng Nghĩa
Tech Talk #5 : Code Analysis SonarQube - Lương Trọng NghĩaTech Talk #5 : Code Analysis SonarQube - Lương Trọng Nghĩa
Tech Talk #5 : Code Analysis SonarQube - Lương Trọng Nghĩa
 
Maven 3.0 at Øredev
Maven 3.0 at ØredevMaven 3.0 at Øredev
Maven 3.0 at Øredev
 
Maven for Dummies
Maven for DummiesMaven for Dummies
Maven for Dummies
 
Build Automation using Maven
Build Automation using Maven Build Automation using Maven
Build Automation using Maven
 
Selenium Test Automation
Selenium Test AutomationSelenium Test Automation
Selenium Test Automation
 
Demystifying Maven
Demystifying MavenDemystifying Maven
Demystifying Maven
 
Maven Introduction
Maven IntroductionMaven Introduction
Maven Introduction
 
Continuous integration and delivery for java based web applications
Continuous integration and delivery for java based web applicationsContinuous integration and delivery for java based web applications
Continuous integration and delivery for java based web applications
 

Similar to Maven for AMPer - Understanding Project Build Tool

Similar to Maven for AMPer - Understanding Project Build Tool (20)

Maven
MavenMaven
Maven
 
S/W Design and Modularity using Maven
S/W Design and Modularity using MavenS/W Design and Modularity using Maven
S/W Design and Modularity using Maven
 
Mavennotes.pdf
Mavennotes.pdfMavennotes.pdf
Mavennotes.pdf
 
A-Z_Maven.pdf
A-Z_Maven.pdfA-Z_Maven.pdf
A-Z_Maven.pdf
 
Maven Nexus
Maven NexusMaven Nexus
Maven Nexus
 
Maven
MavenMaven
Maven
 
Maven in mulesoft
Maven in mulesoftMaven in mulesoft
Maven in mulesoft
 
Maven
MavenMaven
Maven
 
SE2018_Lec-22_-Continuous-Integration-Tools
SE2018_Lec-22_-Continuous-Integration-ToolsSE2018_Lec-22_-Continuous-Integration-Tools
SE2018_Lec-22_-Continuous-Integration-Tools
 
Apache maven 2 overview
Apache maven 2 overviewApache maven 2 overview
Apache maven 2 overview
 
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
 
Jenkins advance topic
Jenkins advance topicJenkins advance topic
Jenkins advance topic
 
Build tool
Build toolBuild tool
Build tool
 
Maven
MavenMaven
Maven
 
Apache Maven at GenevaJUG by Arnaud Héritier
Apache Maven at GenevaJUG by Arnaud HéritierApache Maven at GenevaJUG by Arnaud Héritier
Apache Maven at GenevaJUG by Arnaud Héritier
 
Geneva Jug (30th March, 2010) - Maven
Geneva Jug (30th March, 2010) - MavenGeneva Jug (30th March, 2010) - Maven
Geneva Jug (30th March, 2010) - Maven
 
Maven
MavenMaven
Maven
 
Maven 2.0 - Project management and comprehension tool
Maven 2.0 - Project management and comprehension toolMaven 2.0 - Project management and comprehension tool
Maven 2.0 - Project management and comprehension tool
 
Oracle 12c Launch Event 02 ADF 12c and Maven in Jdeveloper / By Aino Andriessen
Oracle 12c Launch Event 02 ADF 12c and Maven in Jdeveloper / By Aino Andriessen Oracle 12c Launch Event 02 ADF 12c and Maven in Jdeveloper / By Aino Andriessen
Oracle 12c Launch Event 02 ADF 12c and Maven in Jdeveloper / By Aino Andriessen
 
Maven
MavenMaven
Maven
 

More from Yukti Kaura

Apache spark linkedin
Apache spark linkedinApache spark linkedin
Apache spark linkedinYukti Kaura
 
Cloud computing saas
Cloud computing   saasCloud computing   saas
Cloud computing saasYukti Kaura
 
Cloud computing - Basics and Beyond
Cloud computing - Basics and BeyondCloud computing - Basics and Beyond
Cloud computing - Basics and BeyondYukti Kaura
 
NodeJS ecosystem
NodeJS ecosystemNodeJS ecosystem
NodeJS ecosystemYukti Kaura
 
Hadoop and big data
Hadoop and big dataHadoop and big data
Hadoop and big dataYukti Kaura
 
Web services for Laymen
Web services for LaymenWeb services for Laymen
Web services for LaymenYukti Kaura
 
Clean code - Agile Software Craftsmanship
Clean code - Agile Software CraftsmanshipClean code - Agile Software Craftsmanship
Clean code - Agile Software CraftsmanshipYukti Kaura
 
Basics of Flex Components, Skinning
Basics of Flex Components, SkinningBasics of Flex Components, Skinning
Basics of Flex Components, SkinningYukti Kaura
 

More from Yukti Kaura (9)

Apache spark linkedin
Apache spark linkedinApache spark linkedin
Apache spark linkedin
 
Cloud computing saas
Cloud computing   saasCloud computing   saas
Cloud computing saas
 
Cloud computing - Basics and Beyond
Cloud computing - Basics and BeyondCloud computing - Basics and Beyond
Cloud computing - Basics and Beyond
 
NodeJS ecosystem
NodeJS ecosystemNodeJS ecosystem
NodeJS ecosystem
 
Hadoop and big data
Hadoop and big dataHadoop and big data
Hadoop and big data
 
Web services for Laymen
Web services for LaymenWeb services for Laymen
Web services for Laymen
 
Spring batch
Spring batch Spring batch
Spring batch
 
Clean code - Agile Software Craftsmanship
Clean code - Agile Software CraftsmanshipClean code - Agile Software Craftsmanship
Clean code - Agile Software Craftsmanship
 
Basics of Flex Components, Skinning
Basics of Flex Components, SkinningBasics of Flex Components, Skinning
Basics of Flex Components, Skinning
 

Maven for AMPer - Understanding Project Build Tool

  • 1. Maven for AMPer - An Overview By Yukti Kaura
  • 2. The Intent 2 The intent of this presentation is to clarify the understanding of how Maven is integrated with AMPer. During the course of this presentation the focus would be to answer the following basic questions THE BASICS • What is Maven? • What is Maven to AMPer: Case Study? • What does the Maven site contain? • What are the External Maven Tools used in Eclipse? DIVING DEEPER • What is settings.xml? • What is pom.xml? Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 3. What is Maven ? 3 • MAVEN – is a project management tool. • It provides a superset of features found in a build tool such as ANT. • In addition to providing build capabilities- used to build deployable artifacts from source code, Maven can also run reports, generate a web site etc… • More formally, Maven is a project management tool which encompasses a project object model, a set of standards, a project lifecycle, a dependency management system, and logic for executing plugin goals at defined phases in a lifecycle. When you use Maven, you describe your project using a well-defined project object model . Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 4. Project Lifecycle 4 http://maven.apache.org/plugins/index.html Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 5. Plugin goals in defined phases of a lifecycle 5 Plugin contains goals Bound Goals are Run when Their Phases Execute Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 6. Standard Directory Layout of Maven 6 src/main/java Application/Library sources src/main/resources Application/Library resources src/main/filters Resource filter files src/main/assembly Assembly descriptors src/main/config Configuration files src/main/webapp Web application sources src/test/java Test sources src/test/resources Test resources src/test/filters Test resource filter files src/site Site LICENSE.txt Project's license README.txt Project's readme Benefits of Standards Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 7. Dependency Management 7 Project A depends on projects B and A C. Project B depends on project D, and project C depends on project E. The full set of direct and transitive dependencies for project A would be C projects B, C, D, and E, but all B project A had to do was define a dependency on B and C. Transitive dependencies can come D E in handy when your project relies on other projects with several small dependencies (like Hibernate, Apache Struts, or the Spring You just tell Maven which Framework). libraries you need, and Maven will take care of the libraries that your libraries need (and so on). Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 8. Maven Coordinates 8 pom.xml Maven Space is a coordinate system of projects Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 9. Maven Repository 9 Maven ships with the bare minimum and fetches from a remote repository when it needs to. Maven ships with a default remote repository location (http://repo1.maven.org/maven2) which it uses to download the core Maven plugins and dependencies. Maven repositories are both a local cache of artifacts downloaded from a remote repository and a mechanism for allowing your projects to depend on each other. Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 10. How is Maven used in AMPer? 10 • Making the build process easy • Providing quality project information » Unit test reports including coverage • Providing guidelines for best practices development E.g. Source code is assumed to be in $ {basedir}/src/main/java and resources are assumed to be in $ {basedir}/src/main/resources. Tests are assumed to be in $ {basedir}/src/test, and a project is assumed to produce a JAR file. Which version of Maven are we • Coherent site of project information: Using the same using? Maven 2.0 metadata as for the build process, Maven is able to generate a web site • Maven also assists in project workflow such as release management. » Maven integrates with source control system SVN and manages the release of a project. Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 11. What does the Maven site contain? 11 AirMessenger Personal project report This report contains information about JUnit, FindBugs and CheckStyle.It also contains data about The Lines Of Code, Change Log, Build Log and % Code Coverage. This is an example of the continuous integration system used by the project. http://maven.apache.org/plugins/index.html Links Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 12. 12 What are the External Maven Tools used in Eclipse? Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 13. What are the External Maven Tools used in Eclipse? 13 • Maven 2 install This tool builds all the modules, and installs it in the local repository. The local repository is created in your home directory (or alternative location that you created it), and is the location where all downloaded binaries and the projects you built are stored. When you run install, Maven will copy the each project's main artifact and each assembly to your local Maven repository. All of these artifacts are now available for reference as dependencies in other projects locally. Sample output after running the tool Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 14. 14 • Maven 2 Clean This tool deletes the output of a build by deleting the build directory. If you haven't customized the location of the build directory it will be the $ {basedir}/target directory as defined by the Super POM. Sample output after running the tool Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 15. 15 STOP & PONDER Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 16. 16 Settings.xml Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 17. settings.xml 17 Settings in this file are settings which apply to many <settings> <localRepository/> projects and which should not be bundled to any <interactiveMode/> specific project, or distributed to an audience. These <usePluginRegistry/ > include values such as the local repository location, <offline/> alternate remote repository servers, and <pluginGroups/> authentication information. Location where <servers/> <mirrors/> a settings.xml file may live: <proxies/> » User-specific Settings File: ~/.m2/settings.xml <profiles/> <activeProfiles/> </settings> The settings element in the settings.xml file contains elements used to define values which configure Maven execution Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 18. Settings.xml - Piece by Piece 18 SERVERS The distributionManagement element of the POM defines the repositories for deployment. However, certain settings such as security credentials should not be distributed along with the pom.xml. This type of information should exist on the build server in the settings.xml. <servers> <server> <username>maven</username> These elements appear as a pair denoting the login <password>maven</password> and password required to authenticate to this server. <id>firsthop</id> This is the id of the server (not of the user to login as) that matches the distributionManagement repository element's id </server> </servers> MIRRORS <mirrors> <mirror> <id>standalone.repository</id> - The unique identifier of this mirror <url>file:///C:/AlexandriaPlatformSDK/bin/../m2_fhrepository</url> The base URL of this mirror. <mirrorOf>central</mirrorOf> The id of the server that this is a mirror of. For example, to point to a mirror of the Maven central server (http://repo1.maven.org/maven2), set this element to central. </mirror> </mirrors> Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 19. settings.xml 19 PROFILES The profile element in the settings.xml is a truncated version of the pom.xml profile element. It consists of the • activation, • repositories, • pluginRepositories • and properties elements. The profile elements only include these four elements because they concern themselves with the build system as a whole (which is the role of the settings.xml file), not about individual project object model settings. If a profile is active from settings, its values will override any equivalent profiles which matching identifiers in a POM. PROFILES - >REPOSITORIES Repositories are remote collections of projects from which Maven uses to populate the local repository of the build system. It is from this local repository that Maven calls it plugins and dependencies. Different remote repositories may contain different projects, and under the active profile they may be searched for a matching release or snapshot artifact. Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 20. settings.xml 20 Snapshot and Release These are the policies for each type of artifact, Release or snapshot. With these two sets, a POM has the power to alter the policies for each type independent of the other within a single repository. For example, one may decide to enable only snapshot downloads, possibly for development purposes. <repository> <snapshots> <enabled>true</enabled> true or false for whether this repository is enabled for the respective type (releases or snapshots) <updatePolicy>always</updatePolicy> This element specifies how often updates should attempt to occur. Maven will compare the local POMs timestamp to the remote. The choices are: always, daily (default), interval:X (where X is an integer in minutes) or never. </snapshots> <releases> <enabled>true</enabled> <updatePolicy>always</updatePolicy> </releases> <id>firsthop</id> <name>Airwide Solutions Maven Repository</name> <url>http://maven.alexmontreal.airwidesolutions.com/maven/repository2</url> </repository> Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 21. settings.xml 21 PROFILES -> PLUGIN REPOSITORIES Repositories are home to two major types of artifacts. The first are artifacts that are used as dependencies of other artifacts. The other type of artifact is plugins. Maven plugins are themselves a special type of artifact. Because of this, plugin repositories are separated from other repositories. The structure of the pluginRepositories element block is similar to the repositories element. The pluginRepository elements each specify a remote location of where Maven can find new plugins ACTIVE PROFILES The final piece of the settings.xml puzzle is the activeProfiles element. This contains a set of active profile elements, which each have a value of a profile id. Any profile id defined as an activeProfile will be active, regardless of any environment settings <activeProfiles> <activeProfile>firsthopDefault</activeProfile> </activeProfiles> Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 22. 22 STOP & PONDER Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 23. 23 Pom.xml Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 24. What is a POM? 24 • A Project Object Model or POM is the fundamental unit of work in Maven. It is an XML file that contains information about the project and configuration details used by Maven to build the project. It contains default values for most projects. Examples for this is the build directory, which is target; the source directory, which is src/main/java; the test source directory, which is src/main/test • Maven projects, dependencies, builds, artifacts: all of these are The Project Object Model objects to be modeled and described. These objects are described by an XML file called a Project Object Model . Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 25. Concepts 25 Project Structure extension |-- pom.xml The source directory, which `-- src is src/main/java; |-- main The test source directory, | `-- java which is src/main/test is | `-- com Default Project Structure | `-- airwidesolutions | `-- amper | `-- App.java `-- test `-- java `-- com `-- airwidesolutions `-- amper `-- AppTest.java Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 26. The Super POM 26 • All Maven project POMs extend the Super POM which defines a set of defaults shared by all projects. • The Super POM defines some standard configuration variables that are inherited by all projects. The default Super POM defines a single remote Maven repository with an ID of central • The central Maven repository also contains Maven plugins. The default plugin repository is the central Maven repository. • The build element sets the default values for directories in the Maven Standard Directory layout .i.e. it specifies the default directory structure. Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 27. Maven Coordinate 27 <project> <modelVersion>4.0.0</modelVersion> - Current model version should be set to 4.0.0 <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1</version> </project> Maven Coordinate is made up of three components. These three values form the project's fully qualified artifact name. This is in the form of <groupId>:<artifactId>:<version> groupId A groupId groups a set of related artifacts. Group identifiers generally resemble a Java package name. e.g. com.airwidesolutions.amper artifactId The artifactId is the project's main identifier. When you generate an artifact, this artifact is going to be named with the artifactId. e.g. amper.build version When an artifact is released, it is released with a version number. This version number is an identifier of the form <major version>.<minor version>.<incremental version>- <qualifier> such as "1.1.2-alpha-01". We can also use a snapshot version. A snapshot version is a version for a component which is under development, snapshot version numbers always end in SNAPSHOT; for example, "1.0-SNAPSHOT“.Maven will expand SNAPSHOT token to a date and time value converted to UTC (Coordinated Universal Time) e.g. 1.0-20080207-230803-1 . Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 28. Project Inheritance 28 • The following slides deal with 3 scenarios as examples and the variation in the definition of pom.xml in each case • Example 1 Let us specify their directory structure as this Let us reuse our previous artifact, com.mycompany.app:my-app:1 as displayed in the previous slide. Now, if we were to turn com.mycompany.app:my-app:1 into a parent artifact of com.mycompany.app:my-module:1,we will have to modify com.mycompany.app:my-module:1's POM to the following configuration: <project> <parent> Notice that we now have an added <groupId>com.mycompany.app</groupId> section, the parent section. This <artifactId>my-app</artifactId> section allows us to specify which <version>1</version> artifact is the parent of our POM. </parent> <modelVersion>4.0.0</modelVersion> Alternatively, if we want the groupId <groupId>com.mycompany.app</groupId> <artifactId>my-module</artifactId> and / or the version of your modules to <version>1</version> be the same as their parents, you can </project> remove the groupId and / or the version identity of your module in its POM. Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 29. Project Aggregation 29 • Project Aggregation is similar to Project Inheritance. But instead of specifying the parent POM from the module, it specifies the modules from the parent POM. By doing so, the parent project now knows its modules, and if a Maven command is invoked against the parent project, that Maven command will then be executed to the parent's modules as well. To do Project Aggregation, you must do the following: • Change the parent POMs packaging to the value "pom" . • Specify in the parent POM the directories of its modules (children POMs) <project> In the revised com.mycompany.app:my-app:1, the <modelVersion>4.0.0</modelVersion> packaging section and the modules sections were <groupId>com.mycompany.app</groupId> added. For the packaging, it's value was set to "pom", and <artifactId>my-app</artifactId> for the modules section, we have the element <version>1</version> <module>my-module</module>. <packaging>pom</packaging> The value of <module> is the relative path from the com.mycompany.app:my-app:1 to <modules> com.mycompany.app:my-module:1's POM (by practice, <module>my-module</module> we use the module's artifactId as the module directory's </modules> name). </project> Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 30. 30 Project Inheritance vs Project Aggregation INHERITANCE • If you have several Maven projects, and they all have similar configurations, you can refactor your projects by pulling out those similar configurations and making a parent project. Thus, all you have to do is to let your Maven projects inherit that parent project, and those configurations would then be applied to all of them. AGGREGATION • And if you have a group of projects that are built or processed together, you can create a parent project and have that parent project declare those projects as its modules. By doing so, you'd only have to build the parent and the rest will follow. • But of course, you can have both Project Inheritance and Project Aggregation. Meaning, you can have your modules specify a parent project, and at the same time, have that parent project specify those Maven projects as its modules. You'd just have to apply all three rules: • Specify in every child POM who their parent POM is. • Change the parent POMs packaging to the value "pom" . • Specify in the parent POM the directories of its modules (children POMs) Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 31. Example 3 31 To do both project inheritance and aggregation, you only have to apply all three rules. com.mycompany.app:my-app:1's POM <project> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1</version> <packaging>pom</packaging> <modules> <module>../my-module</module> </modules> </project> com.mycompany.app:my-module:1's POM <project> <parent> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1</version> <relativePath>../parent/pom.xml</relativePath> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>my-module</artifactId> </project> Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 32. Dependency Management 32 • Maven can manage both internal and external dependencies. An external dependency for a Java project might be a library such as Log4J. An internal dependency is illustrated by a web application project depending on another project that contains service classes, model objects, or persistence logic . Dependency Scope • Scope controls which dependencies are available in which classpath, and which dependencies are included with an application . • compile compile is the default scope; all dependencies are compile-scoped if a scope is not supplied. compile dependencies are available in all classpaths.Furthermore, those dependencies are propagated to dependent projects. • provided provided dependencies are used when you expect the JDK or a container to provide. provided dependencies are available on the compilation classpath (not runtime). • runtime runtime dependencies are required to execute and test the system, but they are not required for compilation • test test -scoped dependencies are not required during the normal operation of an application, and they are available only during test compilation and execution phases Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 33. Example from ldap/pom.xml 33 <dependencies> <dependency> <groupId>com.firsthop.wb2</groupId> <artifactId>wb2.platform.nnapi</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>com.firsthop.wb2</groupId> <artifactId>wb2.platform.nnapi</artifactId> <type>test-jar</type> <scope>provided</scope> </dependency> <dependency> <groupId>com.firsthop.wb2</groupId> <artifactId>wb2.platform.mndeploy</artifactId> <scope>compile</scope> </dependency> </dependencies> Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 34. Dependency Management 34 • The dependency management section is a mechanism for centralizing dependency information. When you have a set of projects that inherits a common parent it's possible to put all information about the dependency in the common POM and have simpler references to the artifacts in the child POMs. • Maven provides a way for you to consolidate dependency version numbers in the dependencyManagement element. You'll usually see the dependencyManagement element in a top-level parent POM for an organization or project. Using the dependencyManagement element in a pom.xml allows you to reference a dependency in a child project without having to explicitly list the version. Maven will walk up the parent-child hierarchy until it finds a project with a dependencyManagement element, it will then use the version specified in this dependencyManagement element. • Default dependency information for projects that inherit from this one. The dependencies in this section are not immediately resolved. Instead, when a POM derived from this one declares a dependency described by a matching groupId and artifactId, the version and other values from this section are used for that dependency if they were not already specified. Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 35. Example 35 For example, if you have a large set of projects which make use of the amper.personalservicelogic.api version 0.0.7, you could define the following dependencyManagement element in your multi-module project's top-level POM. <dependencyManagement> <dependencies> <dependency> <groupId>com.airwidesolutions.amper</groupId> <artifactId>amper.personalservicelogic.api</artifactId> <version>0.0.7</version> </dependency> <dependencies> </dependencyManagement> Then, in a child project, you can add a dependency to the amper.personalservicelogic.api using the following dependency XML: <dependencies> <dependency> <groupId>com.airwidesolutions.amper</groupId> <artifactId>amper.personalservicelogic.api</artifactId> </dependency> <dependencies> The child project did not have to explicitly list the version of the amper.personalservicelogic.api dependency. Because this dependency was defined in the top-level POM's dependencyManagement element, the version number is going to propagate to the child project's dependency Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 36. Build tag 36 The <build> element contains informations required to build the project. <build> <plugins> The list of plugins to use. <plugin> <artifactId>maven-release-plugin</artifactId> <configuration> <tagBase>https://svn.alexmontreal.airwidesolutions.com/svn/repository /amper/selfprovisioning/tags</tagBase> </configuration> </plugin> </plugins> <testResources> This element describes all of the classpath resources such as properties files associated with a project's unit tests. <testResource> <filtering>true</filtering> Whether resources are filtered to replace tokens with parameterised values or not. The values are taken from the properties element <directory>${basedir}/src/test/resources</directory> Describe the directory where the resources are stored. <includes> <include>**/wb2.xml</include> A list of patterns to include, e.g. **/*.xml. </includes> </testResource> </testResources> </build> Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 37. SCM tag 37 The <scm> element contains informations required to the SCM (Source Control Management) of the project. <scm> <connection>scm:svn:https://svn.alexmontreal.airwidesolutions.com/svn/repository/amper/selfprovi sioning/trunk</connection> The source control management system URL that describes the repository and how and how to connect to the repository. Note :- The SCM we use is SubVersioN which is among the fully implemented SCM of Maven <developerConnection>scm:svn:https://svn.alexmontreal.airwidesolutions.com/svn/repository/amper/sel fprovisioning/trunk</developerConnection> Just like connection, but for developers, i.e. this scm connection will not be read only. <url>https://svn.alexmontreal.airwidesolutions.com/svn/repository/amper/selfprovisioning/trunk</url> The URL to the project's browsable SCM repository </scm> Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 38. Distribution Management 38 This element describes all that pertains to distribution for a project. It is primarily used for deployment of artifacts and the site produced by the build. <distributionManagement> <repository> Information needed to deploy the artifacts generated by the project to a remote repository <id>firsthop</id> A unique identifier for a repository. This is used to match the repository to configuration in the settings.xml file <name> Airwide Solutions Maven Repository</name> Human readable name of the repository. <url> scp://maven.alexmontreal.airwidesolutions.com/srv/maven/repository2</url> The url of the repository, in the form protocol://hostname/path. </repository> </distributionManagement> Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 39. 39 STOP & PONDER Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012
  • 40. References 40 • http://maven.apache.org/ref/current/maven- model/maven.html#class_DependencyManagement • http://www.sonatype.com/book/reference/public- book.html • http://maven.apache.org/guides/ Maven for AMPer - An Overview | CONFIDENTIAL 2008 December 13, 2012

Editor's Notes

  1. December 13, 2012
  2. December 13, 2012 A goal is a specific task that may be executed as a standalone goal or along with other goals as part of a larger build. A goal is a “unit of work” in Maven. Examples of goals include the compile goal in the Compiler plugin, which compiles all of the source code for a project. When referring to a plugin goal, we frequently use the shorthandnotation: pluginId : goalId When the jar:jar goal needs to create a JAR file, it looks to the POM to find out what the JAR file’s name is
  3. December 13, 2012 At the top level files descriptive of the project: a pom.xml file (and any properties, maven.xml or build.xml if using Ant). In addition, there are textual documents meant for the user to be able to read immediately on receiving the source: README.txt, LICENSE.txt, etc. There are just two subdirectories of this structure: src and target. The only other directories that would be expected here are metadata likeCVS or .svn, and any subprojects in a multiproject build (each of which would be laid out as above). The target directory is used to house all output of the build. The src directory contains all of the source material for building the project, its site and so on. It contains a subdirectory for each type: main for the main build artifact, test for the unit test code and resources, site and so on.
  4. December 13, 2012 These four elements become the key to locating and using one particular project in the vast space of other “Mavenized” projects . Maven repositories (public, private, and local) are organized according to these identifiers. When this project is A Simple Maven Project installed into the local Maven repository, it immediately becomes locally available to any other project that wishes to use it. All you must do is add it as a dependency of another project using the unique Maven coordinates for a specific artifact. mavenbook:my-app:jar:1.0-SNAPSHOT. This notation also applies to project dependencies, our project relies on JUnit version 3.8.1, it contains a dependency on junit:junit:jar:3.8.1.