Apache Maven 2 Part 2

Return on Intelligence
Return on IntelligenceReturn on Intelligence
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
1 of 42

Recommended

4 maven junit by
4 maven junit4 maven junit
4 maven junitHonnix Liang
692 views43 slides
Alpes Jug (29th March, 2010) - Apache Maven by
Alpes Jug (29th March, 2010) - Apache MavenAlpes Jug (29th March, 2010) - Apache Maven
Alpes Jug (29th March, 2010) - Apache MavenArnaud Héritier
1.5K views134 slides
Geneva Jug (30th March, 2010) - Maven by
Geneva Jug (30th March, 2010) - MavenGeneva Jug (30th March, 2010) - Maven
Geneva Jug (30th March, 2010) - MavenArnaud Héritier
1.3K views138 slides
Running your Java EE applications in the Cloud by
Running your Java EE applications in the CloudRunning your Java EE applications in the Cloud
Running your Java EE applications in the CloudArun Gupta
600 views20 slides
OSGi-enabled Java EE Applications using GlassFish at JCertif 2011 by
OSGi-enabled Java EE Applications using GlassFish at JCertif 2011OSGi-enabled Java EE Applications using GlassFish at JCertif 2011
OSGi-enabled Java EE Applications using GlassFish at JCertif 2011Arun Gupta
1.5K views56 slides
Magnolia CMS 5.0 - Architecture by
Magnolia CMS 5.0 - ArchitectureMagnolia CMS 5.0 - Architecture
Magnolia CMS 5.0 - ArchitecturePhilipp Bärfuss
4.4K views37 slides

More Related Content

What's hot

Introduction in Apache Maven2 by
Introduction in Apache Maven2Introduction in Apache Maven2
Introduction in Apache Maven2Heiko Scherrer
870 views40 slides
Lorraine JUG (1st June, 2010) - Maven by
Lorraine JUG (1st June, 2010) - MavenLorraine JUG (1st June, 2010) - Maven
Lorraine JUG (1st June, 2010) - MavenArnaud Héritier
1.1K views141 slides
Tools Coverage for the Java EE Platform @ Silicon Valley Code Camp 2010 by
Tools Coverage for the Java EE Platform @ Silicon Valley Code Camp 2010Tools Coverage for the Java EE Platform @ Silicon Valley Code Camp 2010
Tools Coverage for the Java EE Platform @ Silicon Valley Code Camp 2010Arun Gupta
847 views25 slides
Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010 by
Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010
Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010Arun Gupta
1.7K views57 slides
Liferay maven sdk by
Liferay maven sdkLiferay maven sdk
Liferay maven sdkMika Koivisto
3.2K views20 slides
Deep Dive Hands-on in Java EE 6 - Oredev 2010 by
Deep Dive Hands-on in Java EE 6 - Oredev 2010Deep Dive Hands-on in Java EE 6 - Oredev 2010
Deep Dive Hands-on in Java EE 6 - Oredev 2010Arun Gupta
730 views113 slides

What's hot(20)

Introduction in Apache Maven2 by Heiko Scherrer
Introduction in Apache Maven2Introduction in Apache Maven2
Introduction in Apache Maven2
Heiko Scherrer870 views
Lorraine JUG (1st June, 2010) - Maven by Arnaud Héritier
Lorraine JUG (1st June, 2010) - MavenLorraine JUG (1st June, 2010) - Maven
Lorraine JUG (1st June, 2010) - Maven
Arnaud Héritier1.1K views
Tools Coverage for the Java EE Platform @ Silicon Valley Code Camp 2010 by Arun Gupta
Tools Coverage for the Java EE Platform @ Silicon Valley Code Camp 2010Tools Coverage for the Java EE Platform @ Silicon Valley Code Camp 2010
Tools Coverage for the Java EE Platform @ Silicon Valley Code Camp 2010
Arun Gupta847 views
Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010 by Arun Gupta
Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010
Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010
Arun Gupta1.7K views
Deep Dive Hands-on in Java EE 6 - Oredev 2010 by Arun Gupta
Deep Dive Hands-on in Java EE 6 - Oredev 2010Deep Dive Hands-on in Java EE 6 - Oredev 2010
Deep Dive Hands-on in Java EE 6 - Oredev 2010
Arun Gupta730 views
Drupal 8. What's cooking (based on Angela Byron slides) by Claudiu Cristea
Drupal 8. What's cooking (based on Angela Byron slides)Drupal 8. What's cooking (based on Angela Byron slides)
Drupal 8. What's cooking (based on Angela Byron slides)
Claudiu Cristea6.8K views
Magnolia CMS 5.0 - UI Architecture by Philipp Bärfuss
Magnolia CMS 5.0 - UI ArchitectureMagnolia CMS 5.0 - UI Architecture
Magnolia CMS 5.0 - UI Architecture
Philipp Bärfuss3.3K views
GWT Overview And Feature Preview - SV Web JUG - June 16 2009 by Fred Sauer
GWT Overview And Feature Preview - SV Web JUG -  June 16 2009GWT Overview And Feature Preview - SV Web JUG -  June 16 2009
GWT Overview And Feature Preview - SV Web JUG - June 16 2009
Fred Sauer2.7K views
Tuscany : Applying OSGi After The Fact by Luciano Resende
Tuscany : Applying  OSGi After The FactTuscany : Applying  OSGi After The Fact
Tuscany : Applying OSGi After The Fact
Luciano Resende984 views
Maven, Eclipse and OSGi Working Together - Carlos Sanchez by mfrancis
Maven, Eclipse and OSGi Working Together - Carlos SanchezMaven, Eclipse and OSGi Working Together - Carlos Sanchez
Maven, Eclipse and OSGi Working Together - Carlos Sanchez
mfrancis711 views
Powering the Next Generation Services with Java Platform - Spark IT 2010 by Arun Gupta
Powering the Next Generation Services with Java Platform - Spark IT 2010Powering the Next Generation Services with Java Platform - Spark IT 2010
Powering the Next Generation Services with Java Platform - Spark IT 2010
Arun Gupta3.4K views
Arun Gupta: London Java Community: Java EE 6 and GlassFish 3 by Skills Matter
Arun Gupta: London Java Community: Java EE 6 and GlassFish 3 Arun Gupta: London Java Community: Java EE 6 and GlassFish 3
Arun Gupta: London Java Community: Java EE 6 and GlassFish 3
Skills Matter659 views
Java 7 Modularity: a View from the Gallery by njbartlett
Java 7 Modularity: a View from the GalleryJava 7 Modularity: a View from the Gallery
Java 7 Modularity: a View from the Gallery
njbartlett3.3K views
Java EE 6 and GlassFish v3: Paving the path for future by Arun Gupta
Java EE 6 and GlassFish v3: Paving the path for futureJava EE 6 and GlassFish v3: Paving the path for future
Java EE 6 and GlassFish v3: Paving the path for future
Arun Gupta1.1K views
The Dolphins Leap Again by Ivan Zoratti
The Dolphins Leap AgainThe Dolphins Leap Again
The Dolphins Leap Again
Ivan Zoratti1K views

Viewers also liked

How to develop your creativity by
How to develop your creativityHow to develop your creativity
How to develop your creativityReturn on Intelligence
974 views31 slides
Windows Azure: Quick start by
Windows Azure: Quick startWindows Azure: Quick start
Windows Azure: Quick startReturn on Intelligence
1K views24 slides
Successful interview for a young IT specialist by
Successful interview for a young IT specialistSuccessful interview for a young IT specialist
Successful interview for a young IT specialistReturn on Intelligence
1K views13 slides
Agile Project Grows by
Agile Project GrowsAgile Project Grows
Agile Project GrowsReturn on Intelligence
884 views27 slides
Introduction to python by
Introduction to pythonIntroduction to python
Introduction to pythonReturn on Intelligence
1.5K views52 slides
English for E-mails by
English for E-mailsEnglish for E-mails
English for E-mailsReturn on Intelligence
1.8K views26 slides

Viewers also liked(20)

Similar to Apache Maven 2 Part 2

Apache maven 2. advanced topics by
Apache maven 2. advanced topicsApache maven 2. advanced topics
Apache maven 2. advanced topicsReturn on Intelligence
919 views42 slides
Apache maven 2 overview by
Apache maven 2 overviewApache maven 2 overview
Apache maven 2 overviewReturn on Intelligence
1.8K views37 slides
Continuous Deployment Pipeline with maven by
Continuous Deployment Pipeline with mavenContinuous Deployment Pipeline with maven
Continuous Deployment Pipeline with mavenAlan Parkinson
7.6K views31 slides
How maven makes your development group look like a bunch of professionals. by
How maven makes your development group look like a bunch of professionals.How maven makes your development group look like a bunch of professionals.
How maven makes your development group look like a bunch of professionals.Fazreil Amreen Abdul Jalil
945 views24 slides
Maven introduction in Mule by
Maven introduction in MuleMaven introduction in Mule
Maven introduction in MuleShahid Shaik
300 views46 slides
Maven by
MavenMaven
MavenRajkattamuri
222 views46 slides

Similar to Apache Maven 2 Part 2(20)

Continuous Deployment Pipeline with maven by Alan Parkinson
Continuous Deployment Pipeline with mavenContinuous Deployment Pipeline with maven
Continuous Deployment Pipeline with maven
Alan Parkinson7.6K views
Maven introduction in Mule by Shahid Shaik
Maven introduction in MuleMaven introduction in Mule
Maven introduction in Mule
Shahid Shaik300 views
Apache Maven at GenevaJUG by Arnaud Héritier by GenevaJUG
Apache Maven at GenevaJUG by Arnaud HéritierApache Maven at GenevaJUG by Arnaud Héritier
Apache Maven at GenevaJUG by Arnaud Héritier
GenevaJUG1.4K views
Hands On with Maven by Sid Anand
Hands On with MavenHands On with Maven
Hands On with Maven
Sid Anand6.1K views
Maven 3 Overview by Mike Ensor
Maven 3  OverviewMaven 3  Overview
Maven 3 Overview
Mike Ensor2.7K views
Riviera JUG (20th April, 2010) - Maven by Arnaud Héritier
Riviera JUG (20th April, 2010) - MavenRiviera JUG (20th April, 2010) - Maven
Riviera JUG (20th April, 2010) - Maven
Arnaud Héritier861 views
Lausanne Jug (08th April, 2010) - Maven by Arnaud Héritier
Lausanne Jug (08th April, 2010) - MavenLausanne Jug (08th April, 2010) - Maven
Lausanne Jug (08th April, 2010) - Maven
Arnaud Héritier4.1K views
Developing Liferay Plugins with Maven by Mika Koivisto
Developing Liferay Plugins with MavenDeveloping Liferay Plugins with Maven
Developing Liferay Plugins with Maven
Mika Koivisto11.7K views

More from Return on Intelligence

Types of testing and their classification by
Types of testing and their classificationTypes of testing and their classification
Types of testing and their classificationReturn on Intelligence
12.8K views42 slides
Differences between Testing in Waterfall and Agile by
Differences between Testing in Waterfall and AgileDifferences between Testing in Waterfall and Agile
Differences between Testing in Waterfall and AgileReturn on Intelligence
30.4K views21 slides
Windows azurequickstart by
Windows azurequickstartWindows azurequickstart
Windows azurequickstartReturn on Intelligence
823 views24 slides
Организация внутренней системы обучения by
Организация внутренней системы обученияОрганизация внутренней системы обучения
Организация внутренней системы обученияReturn on Intelligence
566 views19 slides
Shared position in a project: testing and analysis by
Shared position in a project: testing and analysisShared position in a project: testing and analysis
Shared position in a project: testing and analysisReturn on Intelligence
593 views19 slides
Introduction to Business Etiquette by
Introduction to Business EtiquetteIntroduction to Business Etiquette
Introduction to Business EtiquetteReturn on Intelligence
1.2K views23 slides

More from Return on Intelligence(13)

Организация внутренней системы обучения by Return on Intelligence
Организация внутренней системы обученияОрганизация внутренней системы обучения
Организация внутренней системы обучения
Оценка задач выполняемых по итеративной разработке by Return on Intelligence
Оценка задач выполняемых по итеративной разработкеОценка задач выполняемых по итеративной разработке
Оценка задач выполняемых по итеративной разработке
Velocity как инструмент планирования и управления проектом by Return on Intelligence
Velocity как инструмент планирования и управления проектомVelocity как инструмент планирования и управления проектом
Velocity как инструмент планирования и управления проектом

Recently uploaded

Business Analyst Series 2023 - Week 4 Session 7 by
Business Analyst Series 2023 -  Week 4 Session 7Business Analyst Series 2023 -  Week 4 Session 7
Business Analyst Series 2023 - Week 4 Session 7DianaGray10
80 views31 slides
NTGapps NTG LowCode Platform by
NTGapps NTG LowCode Platform NTGapps NTG LowCode Platform
NTGapps NTG LowCode Platform Mustafa Kuğu
141 views30 slides
State of the Union - Rohit Yadav - Apache CloudStack by
State of the Union - Rohit Yadav - Apache CloudStackState of the Union - Rohit Yadav - Apache CloudStack
State of the Union - Rohit Yadav - Apache CloudStackShapeBlue
145 views53 slides
Elevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlue by
Elevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlueElevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlue
Elevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlueShapeBlue
96 views7 slides
Kyo - Functional Scala 2023.pdf by
Kyo - Functional Scala 2023.pdfKyo - Functional Scala 2023.pdf
Kyo - Functional Scala 2023.pdfFlavio W. Brasil
434 views92 slides
Confidence in CloudStack - Aron Wagner, Nathan Gleason - Americ by
Confidence in CloudStack - Aron Wagner, Nathan Gleason - AmericConfidence in CloudStack - Aron Wagner, Nathan Gleason - Americ
Confidence in CloudStack - Aron Wagner, Nathan Gleason - AmericShapeBlue
41 views9 slides

Recently uploaded(20)

Business Analyst Series 2023 - Week 4 Session 7 by DianaGray10
Business Analyst Series 2023 -  Week 4 Session 7Business Analyst Series 2023 -  Week 4 Session 7
Business Analyst Series 2023 - Week 4 Session 7
DianaGray1080 views
NTGapps NTG LowCode Platform by Mustafa Kuğu
NTGapps NTG LowCode Platform NTGapps NTG LowCode Platform
NTGapps NTG LowCode Platform
Mustafa Kuğu141 views
State of the Union - Rohit Yadav - Apache CloudStack by ShapeBlue
State of the Union - Rohit Yadav - Apache CloudStackState of the Union - Rohit Yadav - Apache CloudStack
State of the Union - Rohit Yadav - Apache CloudStack
ShapeBlue145 views
Elevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlue by ShapeBlue
Elevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlueElevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlue
Elevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlue
ShapeBlue96 views
Confidence in CloudStack - Aron Wagner, Nathan Gleason - Americ by ShapeBlue
Confidence in CloudStack - Aron Wagner, Nathan Gleason - AmericConfidence in CloudStack - Aron Wagner, Nathan Gleason - Americ
Confidence in CloudStack - Aron Wagner, Nathan Gleason - Americ
ShapeBlue41 views
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f... by TrustArc
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...
TrustArc77 views
CloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&T by ShapeBlue
CloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&TCloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&T
CloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&T
ShapeBlue56 views
The Power of Heat Decarbonisation Plans in the Built Environment by IES VE
The Power of Heat Decarbonisation Plans in the Built EnvironmentThe Power of Heat Decarbonisation Plans in the Built Environment
The Power of Heat Decarbonisation Plans in the Built Environment
IES VE57 views
Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda... by ShapeBlue
Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda...Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda...
Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda...
ShapeBlue63 views
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or... by ShapeBlue
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...
ShapeBlue88 views
Webinar : Desperately Seeking Transformation - Part 2: Insights from leading... by The Digital Insurer
Webinar : Desperately Seeking Transformation - Part 2:  Insights from leading...Webinar : Desperately Seeking Transformation - Part 2:  Insights from leading...
Webinar : Desperately Seeking Transformation - Part 2: Insights from leading...
Backroll, News and Demo - Pierre Charton, Matthias Dhellin, Ousmane Diarra - ... by ShapeBlue
Backroll, News and Demo - Pierre Charton, Matthias Dhellin, Ousmane Diarra - ...Backroll, News and Demo - Pierre Charton, Matthias Dhellin, Ousmane Diarra - ...
Backroll, News and Demo - Pierre Charton, Matthias Dhellin, Ousmane Diarra - ...
ShapeBlue83 views
KVM Security Groups Under the Hood - Wido den Hollander - Your.Online by ShapeBlue
KVM Security Groups Under the Hood - Wido den Hollander - Your.OnlineKVM Security Groups Under the Hood - Wido den Hollander - Your.Online
KVM Security Groups Under the Hood - Wido den Hollander - Your.Online
ShapeBlue102 views
CloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlue by ShapeBlue
CloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlueCloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlue
CloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlue
ShapeBlue46 views
CloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlue by ShapeBlue
CloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlueCloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlue
CloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlue
ShapeBlue46 views

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