SlideShare a Scribd company logo
Apache Maven 2 Overview
                                                         Part 2

                                        Advanced Topics of Apache Maven 2


                                                          Anatoly Kondratyev
                                                            September 2012


30 January 2013
             Exigen Services confidential                   Exigen Services confidential
The Goal




•   Understand several Maven capabilities
•   Build multi-module project with Maven
•   Some special pom blocks
•   Nexus configuration notes



        Exigen Services confidential        2
Maven in real world

      WORKING WITH MULTI-MODULE
                      PROJECTS


Exigen Services confidential                     3
Project contents

                 GWT
               application




                                     EJB A   EJB B



                 My Library




      Exigen Services confidential                   4
What to do with Maven?

• 4 independent artifacts with dependencies
  •   Build in one step?
  •   Organize versioning?
  •   Keeping up to date?
  •   Wrong!
• Maven Inheritance and Aggregation
  • Solves the above problems
  • Right!


        Exigen Services confidential          5
Maven Inheritance & Aggregation


•   <packaging>pom</packaging>
•   Super pom
•   Data in parent pom is inherited
•   Maven dependency reactor
•   Notes
    • No cyclic dependencies
    • No same modules


        Exigen Services confidential   6
Maven Inheritance & Aggregation




                                     Parent
                                           pom


 EJB A                  EJB B                 Gwt         My library
         ejb                         ejb            war            jar




      Exigen Services confidential                                     7
Maven in action
<project …>
    <modelVersion>4.0.0</modelVersion>
    <groupId>ru.exigenservices</groupId>
    <artifactId>my-parent</artifactId>
    <version>1.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

    <modules>
        <module>EJB-A</module>
        <module>EJB-B</module>
        <module>Gwt</module>
        <module>MyLibrary</module>
    </modules>
</project>

         Exigen Services confidential      8
Maven in action




• What about deployment?
  • EAR needed
  • Special step needed
• Maybe divide frontend and backend?
• NB! One pom – one artifact



      Exigen Services confidential     9
Maven in action




                                       Parent
                                              pom


       Frontend                                             Backend
                 pom                                                    pom


                 Frontend                                                Backend
 Gwt                                        EJB A         EJB B                          My library
                 wrapper                                                 wrapper                 jar
       war                  ear                     ejb           ejb              ear




             Exigen Services confidential                                                        10
Multimodal hierarchy
                                •    Parent pom
                                <project …>
                                       <groupId>exigen</groupId>
                                       <artifactId>parent</artifactId>
                                       <version>1.0.1-SNAPSHOT</version>
                                       <packaging>pom</packaging>
                                       <modules>
                                              <module>backend</module>
                                              <module>frontend</module>
                                       </modules>
                                </project>
                                •    Frontend pom
                                <project …>
                                       <parent>
                                              <groupId>exigen</groupId>
                                              <artifactId>parent</artifactId>
                                              <version>1.0.1-SNAPSHOT</version>
                                       </parent>
                                       <artifactId>frontend</artifactId>
                                       <packaging>pom</packaging>
                                       <modules>
                                              <module>Gwt</module>
                                       </modules>
                                </project>




      Exigen Services confidential                                                11
Dependency&Plugin management


• Changeable, overriddable and inheritable
• In parent
  • GroupId & ArtifactId
  • Version
  • Everything you can configure
     • Type, packaging
• In child
  • GroupId & ArtifactId

       Exigen Services confidential          12
Dependency&Plugin Management
Parent:
<dependencyManagement>
   <dependencies>
    <dependency>
         <groupId>javax</groupId>
         <artifactId>javaee-api</artifactId>
         <version>6.0</version>
         <scope>provided</scope>
    </dependency>
   </dependencies>
</dependencyManagement>


Child:
<dependencies>
    <dependency>
         <groupId>javax</groupId>
         <artifactId>javaee-api</artifactId>
    </dependency>
</dependencies>


           Exigen Services confidential        13
Flat vs Tree, Flat

   .
   |-- my-module
   | `-- pom.xml
   `--parent
       `--pom.xml

• Pom.xml for my-module:
  <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>


         Exigen Services confidential                     15
Maven reactor


• Collects all the available modules to build
• Sorts the projects into the correct build order
   • a project dependency on another module in the build
   • different rules with plugins dependencies
   • the order declared in the <modules> element (if no other rule
     applies)
• Builds the selected projects in order
• Be aware of cycles and same modules on different
  parents




         Exigen Services confidential                                16
Conclusion



•   Inheritance and aggregation
•   Flat/Tree structure
•   Maven reactor
•   Dependency&Plugin management
•   Deploy to Nexus/Weblogic problem



        Exigen Services confidential   17
What will help you

                           PROPERTIES, PROFILES,
                              EXECUTION BLOCKS


Exigen Services confidential                         18
Maven properties



• Just as common Ant properties
• ${property_name}
• Case sensitive
  • Upper case for environment variables
• Dot(.) notated path




      Exigen Services confidential         19
Predefined properties
• Build in properties
   • ${basedir} – directory with pom
   • ${version} – artifact version
• Project properties
   •   ${project.build.directory}
   •   ${project.build.outputDirectory} (target/classes)
   •   ${project.name}
   •   ${project.version}
• Local user settings
   • ${settings.localRepository}
• Environment properties
   •   ${env.M2_HOME}



           Exigen Services confidential                    20
Maven profiles


• Maven profile – special way for configuring
  build
• Different environments – different results
  • Renaming
  • Different build cycles
  • Special plugin configuration
• Just different targets
• For different users

       Exigen Services confidential         22
Maven profiles



• Per project
  • pom.xml
• Per user
  • %USER_HOME%/.m2/settings.xml
• Per computer (Global)
  • %M2_HOME%/conf/settings.xml



      Exigen Services confidential   23
Maven profiles



• Activation
  • By hand (-P profile1,profile2)
  • <activeProfiles>
  • <activation>
     • By environment settings
     • By properties




      Exigen Services confidential   24
Maven profiles
<profiles>
   <profile>
    <activation>
        <jdk>[1.3,1.6)</jdk>
    </activation>
   ...
   </profile>
   <profile>
    <activation>
        <property>
            <name>environment</name>
            <value>test</value>
        </property>
    </activation>
   ...
   </profile>
</profiles>

         Exigen Services confidential   25
Mojo


• Plugin
  • Executing action
• Mojo – magical charm in hoodoo
  •   Just a Goal
  •   Plugin consists of Mojos
  •   Some parameters
  •   MOJO aka POJO (Plain-old-Java-object)


        Exigen Services confidential          27
Mojo



• When we should use mojos?
• Run from command line
• Different execution parameters for different
  configurations
• Group of mojos from same plugin with
  different configuration


       Exigen Services confidential          28
Execution blocks
Plugin:time

<plugin>
    <groupId>com.mycompany.example</groupId>
    <artifactId>plugin</artifactId>
    <version>1.0</version>
    <executions>
     <execution>
          <id>first</id>
          <phase>test</phase>
          <goals>
               <goal>time</goal>
          </goals>
          <configuration> … </configuration>
     </execution>
     <execution>
          <id>default</id>
          …
          <!– No phase block -->
     </execution>
    </executions>
</plugin>



              Exigen Services confidential     29
SCM SourceCodeManagement

•   CVS, Mercurial, Perforce, Subversion, etc.
•   Commit/update
•   scm:bootstrap – build project
•   Maven Release Plugin
    • Snapshot  Version
    • Check everything
    • Commit



        Exigen Services confidential         30
Maven archetypes

• Create folders, poms, general stuff
• Archetype  Project
• For creating project:
  • archetype:generate
     • Select archetype from list
     • Set up groupId, artifactId, version, …
     • Get all project structure and draft files
  • maven-archetype-quickstart
• For creating archetype:
  • archetype:create-from-project


       Exigen Services confidential                31
Provided Arhetypes

• maven-archetype-archetype
   • Sample archetype
• maven-archetype-j2ee-simple
   • Simplified sample J2EE application
• maven-archetype-plugin
   • Sample Maven plugin
• maven-archetype-quickstart
   •   Sample Maven project
• maven-archetype-webapp
   • Sample Maven Webapp project
• More information:
  http://maven.apache.org/archetype/maven-archetype-bundles/


          Exigen Services confidential                         32
archetype:create-from-project

• Sample project
• mvn archetype:create-from-project
   • src catalog
   • Pom.xml (maven-archetype)
   • Some resources
• Modify code (…targetgenerated-sourcesarchetype)
   • archetype-metadata.xml
   • Update properties and default values; review
• Go to target, run “mvn install”
• To test archetype
   “mvn archetype:generate -DarchetypeCatalog=local”



         Exigen Services confidential                  33
Good configuration - great advantage

                                                NEXUS
                                          SETTING.XML


Exigen Services confidential                                34
Sonatype Nexus

•   Artifact repository
•   Nexus and Nexus Pro
•   Rather simple
•   Widely used

• Other Maven Repository Managers
    • Apache Archiva
    • Artifactory
    • Comparison
      http://docs.codehaus.org/display/MAVENUSER/Maven+Repository+Manager+Fe
      ature+Matrix


          Exigen Services confidential                                    35
Nexus hints



• Nexus configuration + local configuration
• Proxy repositories
  • Add everything and cache it!
  • Add to Public Repositories group
• Restrictions on uploading artifacts
  • UI: Artifact Upload



      Exigen Services confidential            36
Settings.xml
• Servers                                                      • Profile
   <servers>
                                                                 <profiles>
    <server>
                                                                  <profile>
          <id>nexus</id>
                                                                   <id>nexus</id>
          <username>…</username>
                                                                   <repositories>
          <password>…</password>
                                                                     <repository>
    </server>
                                                                       <id>central</id>
   </servers>
                                                                       <url>http://central</url>
• Mirrors (2.0.9)                                                      <releases>
   <mirrors>                                                             <enabled>true</enabled>
    <mirror>                                                             <updatePolicy>never</updatePolicy>
           <id>nexus</id>                                              </releases>
           <mirrorOf>*</mirrorOf>                                      <snapshots>
   <url>http://localserver:8081/nexus/content/groups/public/                  <enabled>true</enabled>
   </url>                                                              </snapshots>
     </mirror>                                                       </repository>
    </mirrors>                                                      </repositories>

• Active Profile                                                    <pluginRepositories>
    <activeProfiles>                                                     …
                                                                    </pluginRepositories>
          <activeProfile>nexus</activeProfile>
                                                                   </profile>
    </activeProfiles>
                                                                 </profiles>


                Exigen Services confidential                                                            37
updatePolicy


• UpdatePolicy
  •   Always
  •   Daily (default)
  •   Interval:X (X – integer in minutes)
  •   Never
• Repository Snapshots
  • Enabled true/false


        Exigen Services confidential        38
When you have free time…

LICENSE, ORGANIZATION, DEVELOPER
                 S, CONTRIBUTORS


   Exigen Services confidential                         39
Licenses

• How your project could be used?



<licenses>
  <license>
   <name>The Apache Software License, Version 2.0</name>
   <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
   <distribution>repo</distribution>
   <comments>A business-friendly OSS license</comments>
  </license>
</licenses>


         Exigen Services confidential                          40
Organization


• Just tell everybody!



<organization>
  <name>Exigen Services</name>
  <url>http://www.exigenservices.ru/</url>
</organization>




      Exigen Services confidential           41
Developers & Contributors block


•   Id, name, email
•   Organization, organizationUrl
•   Roles
•   Timezone
•   Properties

• Contributors don’t have Id

        Exigen Services confidential   42
Developers block
<developers>
 <developer>
    <id>anatoly.k</id>
    <name>Anatoly</name>
    <email>Anatoly.Kondratiev@exigenservices.com</email>
    <organization>Exigen</organization>
    <organizationUrl>http://www.exigenservices.ru/</organizationUrl>
    <roles>
         <role>Configuration Manager</role>
         <role>Developer</role>
    </roles>
    <timezone>+3</timezone>
    <properties>
         <skype>anatoly.kondratyev</skype>
    </properties>
 </developer>
</developers>


           Exigen Services confidential
Final notes




• A great amount of plugins
• Ant-run
• Mirrors on local repo, not on computer




      Exigen Services confidential         44
Now it’s your turn…

                                QUESTIONS



Exigen Services confidential                    45

More Related Content

KEY
4 maven junit
PDF
Alpes Jug (29th March, 2010) - Apache Maven
PDF
Geneva Jug (30th March, 2010) - Maven
PDF
Running your Java EE applications in the Cloud
PDF
OSGi-enabled Java EE Applications using GlassFish at JCertif 2011
KEY
Magnolia CMS 5.0 - Architecture
PDF
The State of Java under Oracle at JCertif 2011
PDF
Understanding
4 maven junit
Alpes Jug (29th March, 2010) - Apache Maven
Geneva Jug (30th March, 2010) - Maven
Running your Java EE applications in the Cloud
OSGi-enabled Java EE Applications using GlassFish at JCertif 2011
Magnolia CMS 5.0 - Architecture
The State of Java under Oracle at JCertif 2011
Understanding

What's hot (20)

PDF
Introduction in Apache Maven2
PDF
Lorraine JUG (1st June, 2010) - Maven
PDF
Tools Coverage for the Java EE Platform @ Silicon Valley Code Camp 2010
PDF
Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010
PDF
Liferay maven sdk
PDF
Deep Dive Hands-on in Java EE 6 - Oredev 2010
PDF
Drupal 8. What's cooking (based on Angela Byron slides)
PDF
Maven for eXo VN
KEY
Magnolia CMS 5.0 - UI Architecture
PDF
Glass Fishv3 March2010
PDF
Apache Maven - eXo TN presentation
PDF
GWT Overview And Feature Preview - SV Web JUG - June 16 2009
PDF
Tuscany : Applying OSGi After The Fact
PDF
Maven, Eclipse and OSGi Working Together - Carlos Sanchez
PDF
Powering the Next Generation Services with Java Platform - Spark IT 2010
PDF
Arun Gupta: London Java Community: Java EE 6 and GlassFish 3
PDF
Java 7 Modularity: a View from the Gallery
KEY
Magnolia CMS 5.0 - Overview
PDF
Java EE 6 and GlassFish v3: Paving the path for future
PDF
The Dolphins Leap Again
Introduction in Apache Maven2
Lorraine JUG (1st June, 2010) - Maven
Tools Coverage for the Java EE Platform @ Silicon Valley Code Camp 2010
Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010
Liferay maven sdk
Deep Dive Hands-on in Java EE 6 - Oredev 2010
Drupal 8. What's cooking (based on Angela Byron slides)
Maven for eXo VN
Magnolia CMS 5.0 - UI Architecture
Glass Fishv3 March2010
Apache Maven - eXo TN presentation
GWT Overview And Feature Preview - SV Web JUG - June 16 2009
Tuscany : Applying OSGi After The Fact
Maven, Eclipse and OSGi Working Together - Carlos Sanchez
Powering the Next Generation Services with Java Platform - Spark IT 2010
Arun Gupta: London Java Community: Java EE 6 and GlassFish 3
Java 7 Modularity: a View from the Gallery
Magnolia CMS 5.0 - Overview
Java EE 6 and GlassFish v3: Paving the path for future
The Dolphins Leap Again
Ad

Viewers also liked (20)

PPTX
How to develop your creativity
PPTX
Windows Azure: Quick start
PPT
Successful interview for a young IT specialist
PPTX
Agile Project Grows
PPTX
Introduction to python
PPT
English for E-mails
PPT
Quality Principles
PPTX
Non Blocking Algorithms at Traffic Conditions
PPTX
Time Management
PDF
Apache Maven presentation from BitByte conference
PPTX
Profsoux2014 presentation by Pavelchuk
PPT
Introduction to XML
PPTX
Large Scale Software Project
PPT
Jira as a test management tool
PPTX
Service design principles and patterns
PPTX
Risk Management
PPTX
Principles of personal effectiveness
PPTX
Cross-cultural communication
PPT
Resolving conflicts
How to develop your creativity
Windows Azure: Quick start
Successful interview for a young IT specialist
Agile Project Grows
Introduction to python
English for E-mails
Quality Principles
Non Blocking Algorithms at Traffic Conditions
Time Management
Apache Maven presentation from BitByte conference
Profsoux2014 presentation by Pavelchuk
Introduction to XML
Large Scale Software Project
Jira as a test management tool
Service design principles and patterns
Risk Management
Principles of personal effectiveness
Cross-cultural communication
Resolving conflicts
Ad

Similar to Apache Maven 2 Part 2 (20)

PPTX
Apache maven 2. advanced topics
PPTX
Apache maven 2 overview
PPTX
Continuous Deployment Pipeline with maven
PPTX
How maven makes your development group look like a bunch of professionals.
PPT
Maven introduction in Mule
PPT
PPT
PDF
Apache Maven at GenevaJUG by Arnaud Héritier
PDF
Hands On with Maven
PDF
Oracle 12c Launch Event 02 ADF 12c and Maven in Jdeveloper / By Aino Andriessen
PDF
Maven 3 Overview
PDF
Riviera JUG (20th April, 2010) - Maven
PPT
Maven in Mule
PDF
Lausanne Jug (08th April, 2010) - Maven
PDF
intellimeet
PDF
Developing Liferay Plugins with Maven
PPTX
S/W Design and Modularity using Maven
PPTX
Introduction to Maven for beginners and DevOps
PPTX
Apache Maven basics
PPT
Training in Android with Maven
Apache maven 2. advanced topics
Apache maven 2 overview
Continuous Deployment Pipeline with maven
How maven makes your development group look like a bunch of professionals.
Maven introduction in Mule
Apache Maven at GenevaJUG by Arnaud Héritier
Hands On with Maven
Oracle 12c Launch Event 02 ADF 12c and Maven in Jdeveloper / By Aino Andriessen
Maven 3 Overview
Riviera JUG (20th April, 2010) - Maven
Maven in Mule
Lausanne Jug (08th April, 2010) - Maven
intellimeet
Developing Liferay Plugins with Maven
S/W Design and Modularity using Maven
Introduction to Maven for beginners and DevOps
Apache Maven basics
Training in Android with Maven

More from Return on Intelligence (13)

PPTX
Types of testing and their classification
PPTX
Differences between Testing in Waterfall and Agile
PPTX
Windows azurequickstart
PPT
Организация внутренней системы обучения
PPTX
Shared position in a project: testing and analysis
PPTX
Introduction to Business Etiquette
PPTX
Agile Testing Process
PPTX
Оценка задач выполняемых по итеративной разработке
PPTX
Meetings arranging
PPTX
The art of project estimation
PPTX
Velocity как инструмент планирования и управления проектом
PPTX
Testing your code
PPTX
Reports Project
Types of testing and their classification
Differences between Testing in Waterfall and Agile
Windows azurequickstart
Организация внутренней системы обучения
Shared position in a project: testing and analysis
Introduction to Business Etiquette
Agile Testing Process
Оценка задач выполняемых по итеративной разработке
Meetings arranging
The art of project estimation
Velocity как инструмент планирования и управления проектом
Testing your code
Reports Project

Recently uploaded (20)

PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Electronic commerce courselecture one. Pdf
PPT
Teaching material agriculture food technology
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Modernizing your data center with Dell and AMD
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Machine learning based COVID-19 study performance prediction
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
NewMind AI Monthly Chronicles - July 2025
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Chapter 3 Spatial Domain Image Processing.pdf
Dropbox Q2 2025 Financial Results & Investor Presentation
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Understanding_Digital_Forensics_Presentation.pptx
Spectral efficient network and resource selection model in 5G networks
Electronic commerce courselecture one. Pdf
Teaching material agriculture food technology
Digital-Transformation-Roadmap-for-Companies.pptx
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Modernizing your data center with Dell and AMD
Per capita expenditure prediction using model stacking based on satellite ima...
Machine learning based COVID-19 study performance prediction
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
The AUB Centre for AI in Media Proposal.docx
Building Integrated photovoltaic BIPV_UPV.pdf
NewMind AI Monthly Chronicles - July 2025
Advanced methodologies resolving dimensionality complications for autism neur...
Chapter 3 Spatial Domain Image Processing.pdf

Apache Maven 2 Part 2

  • 1. Apache Maven 2 Overview Part 2 Advanced Topics of Apache Maven 2 Anatoly Kondratyev September 2012 30 January 2013 Exigen Services confidential Exigen Services confidential
  • 2. The Goal • Understand several Maven capabilities • Build multi-module project with Maven • Some special pom blocks • Nexus configuration notes Exigen Services confidential 2
  • 3. Maven in real world WORKING WITH MULTI-MODULE PROJECTS Exigen Services confidential 3
  • 4. Project contents GWT application EJB A EJB B My Library Exigen Services confidential 4
  • 5. What to do with Maven? • 4 independent artifacts with dependencies • Build in one step? • Organize versioning? • Keeping up to date? • Wrong! • Maven Inheritance and Aggregation • Solves the above problems • Right! Exigen Services confidential 5
  • 6. Maven Inheritance & Aggregation • <packaging>pom</packaging> • Super pom • Data in parent pom is inherited • Maven dependency reactor • Notes • No cyclic dependencies • No same modules Exigen Services confidential 6
  • 7. Maven Inheritance & Aggregation Parent pom EJB A EJB B Gwt My library ejb ejb war jar Exigen Services confidential 7
  • 8. Maven in action <project …> <modelVersion>4.0.0</modelVersion> <groupId>ru.exigenservices</groupId> <artifactId>my-parent</artifactId> <version>1.0.1-SNAPSHOT</version> <packaging>pom</packaging> <modules> <module>EJB-A</module> <module>EJB-B</module> <module>Gwt</module> <module>MyLibrary</module> </modules> </project> Exigen Services confidential 8
  • 9. Maven in action • What about deployment? • EAR needed • Special step needed • Maybe divide frontend and backend? • NB! One pom – one artifact Exigen Services confidential 9
  • 10. Maven in action Parent pom Frontend Backend pom pom Frontend Backend Gwt EJB A EJB B My library wrapper wrapper jar war ear ejb ejb ear Exigen Services confidential 10
  • 11. Multimodal hierarchy • Parent pom <project …> <groupId>exigen</groupId> <artifactId>parent</artifactId> <version>1.0.1-SNAPSHOT</version> <packaging>pom</packaging> <modules> <module>backend</module> <module>frontend</module> </modules> </project> • Frontend pom <project …> <parent> <groupId>exigen</groupId> <artifactId>parent</artifactId> <version>1.0.1-SNAPSHOT</version> </parent> <artifactId>frontend</artifactId> <packaging>pom</packaging> <modules> <module>Gwt</module> </modules> </project> Exigen Services confidential 11
  • 12. Dependency&Plugin management • Changeable, overriddable and inheritable • In parent • GroupId & ArtifactId • Version • Everything you can configure • Type, packaging • In child • GroupId & ArtifactId Exigen Services confidential 12
  • 13. Dependency&Plugin Management Parent: <dependencyManagement> <dependencies> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>6.0</version> <scope>provided</scope> </dependency> </dependencies> </dependencyManagement> Child: <dependencies> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> </dependency> </dependencies> Exigen Services confidential 13
  • 14. Flat vs Tree, Flat . |-- my-module | `-- pom.xml `--parent `--pom.xml • Pom.xml for my-module: <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> Exigen Services confidential 15
  • 15. Maven reactor • Collects all the available modules to build • Sorts the projects into the correct build order • a project dependency on another module in the build • different rules with plugins dependencies • the order declared in the <modules> element (if no other rule applies) • Builds the selected projects in order • Be aware of cycles and same modules on different parents Exigen Services confidential 16
  • 16. Conclusion • Inheritance and aggregation • Flat/Tree structure • Maven reactor • Dependency&Plugin management • Deploy to Nexus/Weblogic problem Exigen Services confidential 17
  • 17. What will help you PROPERTIES, PROFILES, EXECUTION BLOCKS Exigen Services confidential 18
  • 18. Maven properties • Just as common Ant properties • ${property_name} • Case sensitive • Upper case for environment variables • Dot(.) notated path Exigen Services confidential 19
  • 19. Predefined properties • Build in properties • ${basedir} – directory with pom • ${version} – artifact version • Project properties • ${project.build.directory} • ${project.build.outputDirectory} (target/classes) • ${project.name} • ${project.version} • Local user settings • ${settings.localRepository} • Environment properties • ${env.M2_HOME} Exigen Services confidential 20
  • 20. Maven profiles • Maven profile – special way for configuring build • Different environments – different results • Renaming • Different build cycles • Special plugin configuration • Just different targets • For different users Exigen Services confidential 22
  • 21. Maven profiles • Per project • pom.xml • Per user • %USER_HOME%/.m2/settings.xml • Per computer (Global) • %M2_HOME%/conf/settings.xml Exigen Services confidential 23
  • 22. Maven profiles • Activation • By hand (-P profile1,profile2) • <activeProfiles> • <activation> • By environment settings • By properties Exigen Services confidential 24
  • 23. Maven profiles <profiles> <profile> <activation> <jdk>[1.3,1.6)</jdk> </activation> ... </profile> <profile> <activation> <property> <name>environment</name> <value>test</value> </property> </activation> ... </profile> </profiles> Exigen Services confidential 25
  • 24. Mojo • Plugin • Executing action • Mojo – magical charm in hoodoo • Just a Goal • Plugin consists of Mojos • Some parameters • MOJO aka POJO (Plain-old-Java-object) Exigen Services confidential 27
  • 25. Mojo • When we should use mojos? • Run from command line • Different execution parameters for different configurations • Group of mojos from same plugin with different configuration Exigen Services confidential 28
  • 26. Execution blocks Plugin:time <plugin> <groupId>com.mycompany.example</groupId> <artifactId>plugin</artifactId> <version>1.0</version> <executions> <execution> <id>first</id> <phase>test</phase> <goals> <goal>time</goal> </goals> <configuration> … </configuration> </execution> <execution> <id>default</id> … <!– No phase block --> </execution> </executions> </plugin> Exigen Services confidential 29
  • 27. SCM SourceCodeManagement • CVS, Mercurial, Perforce, Subversion, etc. • Commit/update • scm:bootstrap – build project • Maven Release Plugin • Snapshot  Version • Check everything • Commit Exigen Services confidential 30
  • 28. Maven archetypes • Create folders, poms, general stuff • Archetype  Project • For creating project: • archetype:generate • Select archetype from list • Set up groupId, artifactId, version, … • Get all project structure and draft files • maven-archetype-quickstart • For creating archetype: • archetype:create-from-project Exigen Services confidential 31
  • 29. Provided Arhetypes • maven-archetype-archetype • Sample archetype • maven-archetype-j2ee-simple • Simplified sample J2EE application • maven-archetype-plugin • Sample Maven plugin • maven-archetype-quickstart • Sample Maven project • maven-archetype-webapp • Sample Maven Webapp project • More information: http://maven.apache.org/archetype/maven-archetype-bundles/ Exigen Services confidential 32
  • 30. archetype:create-from-project • Sample project • mvn archetype:create-from-project • src catalog • Pom.xml (maven-archetype) • Some resources • Modify code (…targetgenerated-sourcesarchetype) • archetype-metadata.xml • Update properties and default values; review • Go to target, run “mvn install” • To test archetype “mvn archetype:generate -DarchetypeCatalog=local” Exigen Services confidential 33
  • 31. Good configuration - great advantage NEXUS SETTING.XML Exigen Services confidential 34
  • 32. Sonatype Nexus • Artifact repository • Nexus and Nexus Pro • Rather simple • Widely used • Other Maven Repository Managers • Apache Archiva • Artifactory • Comparison http://docs.codehaus.org/display/MAVENUSER/Maven+Repository+Manager+Fe ature+Matrix Exigen Services confidential 35
  • 33. Nexus hints • Nexus configuration + local configuration • Proxy repositories • Add everything and cache it! • Add to Public Repositories group • Restrictions on uploading artifacts • UI: Artifact Upload Exigen Services confidential 36
  • 34. Settings.xml • Servers • Profile <servers> <profiles> <server> <profile> <id>nexus</id> <id>nexus</id> <username>…</username> <repositories> <password>…</password> <repository> </server> <id>central</id> </servers> <url>http://central</url> • Mirrors (2.0.9) <releases> <mirrors> <enabled>true</enabled> <mirror> <updatePolicy>never</updatePolicy> <id>nexus</id> </releases> <mirrorOf>*</mirrorOf> <snapshots> <url>http://localserver:8081/nexus/content/groups/public/ <enabled>true</enabled> </url> </snapshots> </mirror> </repository> </mirrors> </repositories> • Active Profile <pluginRepositories> <activeProfiles> … </pluginRepositories> <activeProfile>nexus</activeProfile> </profile> </activeProfiles> </profiles> Exigen Services confidential 37
  • 35. updatePolicy • UpdatePolicy • Always • Daily (default) • Interval:X (X – integer in minutes) • Never • Repository Snapshots • Enabled true/false Exigen Services confidential 38
  • 36. When you have free time… LICENSE, ORGANIZATION, DEVELOPER S, CONTRIBUTORS Exigen Services confidential 39
  • 37. Licenses • How your project could be used? <licenses> <license> <name>The Apache Software License, Version 2.0</name> <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url> <distribution>repo</distribution> <comments>A business-friendly OSS license</comments> </license> </licenses> Exigen Services confidential 40
  • 38. Organization • Just tell everybody! <organization> <name>Exigen Services</name> <url>http://www.exigenservices.ru/</url> </organization> Exigen Services confidential 41
  • 39. Developers & Contributors block • Id, name, email • Organization, organizationUrl • Roles • Timezone • Properties • Contributors don’t have Id Exigen Services confidential 42
  • 40. Developers block <developers> <developer> <id>anatoly.k</id> <name>Anatoly</name> <email>Anatoly.Kondratiev@exigenservices.com</email> <organization>Exigen</organization> <organizationUrl>http://www.exigenservices.ru/</organizationUrl> <roles> <role>Configuration Manager</role> <role>Developer</role> </roles> <timezone>+3</timezone> <properties> <skype>anatoly.kondratyev</skype> </properties> </developer> </developers> Exigen Services confidential
  • 41. Final notes • A great amount of plugins • Ant-run • Mirrors on local repo, not on computer Exigen Services confidential 44
  • 42. Now it’s your turn… QUESTIONS Exigen Services confidential 45