SlideShare a Scribd company logo
1 of 89
Java Build Tooling
  Apache Maven



 Olivier Lamy   |   @olamy
 VP Apache Maven, ASF Member
Agenda
●   Who am I: Introduction
●   What is the Apache Software Foundation
●   Java build tools evolution
●   Apache Maven
●   Extend Apache Maven
●   Complementary Tooling
/me
●   Olivier Lamy (@olamy ) (twitter.com/olamy)
●   https://www.slideshare.net/olamy / http://olamy.blogspot.fr
●   Apache Software Foundation
    –   Member
    –   VP, Maven
    –   PMCs: Maven, Archiva, Tomcat, Sqoop, DirectMemory,
        Kalumet
    –   Commiter: Commons
●   Jenkins etc.. (add bugs in various opensource projects)
●   Also a OpenSource Architect at Talend
What is The ASF
●   Membership-based corporation; Non-profit US
    501(c)3 Charity
●   Directors, officers all unpaid volunteers
●   Paid contractors: sysadmins, press officer
●   Broad-based Membership of individuals
    ensures independence
➔   Collection of Apache project communities
Apache Org Chart
                              Nominate, elect
   Members
                              Directors annually                   Organizational
    ~400                                                           Oversight
                                                                                           Technical
                                                 Board of                                  Oversight
 Nominate, elect                                9 Directors
 new members
                                                                          Create &
                                                                          update upon
                   Appoint officers                                       PMC request


                            Report monthly                    Report quarterly


                                                                                           PMCs
    Officers                                                                               100++
     ~10

Define organizational &
legal policies                               Committers                  Nominate, elect      Vote for
                                                                         new committers       project releases
                                               ~3,000

                                             Write project code
Apache Mission: What
●   Provide open source software to the public free
    of charge
    –   “Apache aims to provide a pragmatic, non-technical
        framework to its projects.”
        - Justin Erenkrantz
●   Let coders code; Foundation exists to do rest
●   Community over code
Apache License
●   Apache projects use the Apache License 2.0
●   Pragmatic and permissive
    –   Maximum freedom for users
●   Includes patent grant
●   Easily and frequently used by other groups
Apache Projects
●   Over 100 code-producing community driven
    projects
    –   50+ Podlings in Incubation
●   “Apache Projects include millions of lines of code overseen
    by an all-volunteer community across six continents.
    Apache technologies power more than half the Internet,
    petabytes of data, teraflops of operations, billions of
    objects, and enhance the lives of countless users and
    developers.”
Apache Projects
●   Industry standards:
    –   Apache HTTP Server (original project from the
        foundation)
    –   Apache Tomcat (Servlet container)
    –   Apache Hadoop
    –   Apache Commons *
    –   Apache Subversion
    –   Etc http://projects.apache.org/indexes/alpha.html
Java Build Tools Evolution
Javac
                Basic command line tool


Too many parameters to set for classpath, sourcepath,
           annotations processors etc..


              Use it for hello world only
Java Build Evolution
●   We don't only build one or two classes.
●   Use of external dependencies
●   Complex packaging (not only jars)
●   Running tests (complex tests)
●   Interaction with external tools (issues trackers, scm, ci
    servers)
Build Evolution : Ant


“Apache Ant is a Java-based build tool. In theory,
it is kind of like Make, but without Make's wrinkles”
                              -Apache Ant Website
Build Evolution : Ant


Why create another tool when make, gnumake
already exist?


They all have some limitations
They are more Shell Based
Limits you to one kind of OS
Build Evolution : Ant


Ant has Java Class like extensions
Use of XML instead of Shell Scripts
Each task is taken care of by creating its object
Standardized
Platform Independent
Build Evolution : Ant


Build.xml:
●   Similar to makefile but an XML file
●   It's the default file where ant will look for what to
    build, how to build
●   Has projects, targets, tasks
Build Evolution : Ant
Simple build file
<project name=”sample” default=”hello>
 <target name=”hello”>
  <echo message=”Hello from ant”/>
 </target>
</project>
Build Evolution : Ant
Download from http://ant.apache.org/bindownload.cgi


Sample project: https://github.com/olamy/hello-world
git clone https://github.com/olamy/hello-world.git
or
https://github.com/olamy/hello-
world/archive/master.zip
Build Evolution : Ant
    ant -p: list all targets
●   ant compile
●   ant run-tests
●   ant package
Build Evolution : Ant




So you have to define everything
include jars in your source tree/scm
each ant build is a rewrite of an other one
Build Evolution: Maven

Download from
http://maven.apache.org/download.html

M2_HOME= path to maven home install
PATH=$M2_HOME/bin:$PATH
Build Evolution: Maven




pom.xml is small
Same project: mvn test, mvn package
Build Evolution : Ant
●   Ant doesn't have formal conventions like a common
      project directory structure, you have to tell Ant
      exactly where to find the source and where to put
      the output. Informal conventions have emerged
      over time, but they haven't been codified into the
      product.
●   Ant is procedural, you have to tell Ant exactly what to
      do and when to do it. You had to tell it to compile,
      then copy, then compress.
●   Ant doesn't have a lifecycle, you had to define goals
    and goal dependencies. You had to attach a sequence
    of tasks to each goal manually.
Build Evolution: Maven
Maven has conventions, it already knew where your
source code was because you followed the convention. It
put the bytecode in target/classes, and it produced a JAR
file in target.
Maven is declarative. All you had to do was create a
pom.xml file and put your source in the default directory.
Maven took care of the rest.
Maven has a lifecycle, which you invoked when you
executed mvn install. This command told Maven to
execute a series of sequence steps until it reached the
lifecycle. Maven executed a number of default plugin
goals which did things like compile and create a JAR.
Apache Maven: History
Maven, a Yiddish word meaning accumulator of
knowledge, was originally started as an attempt
to simplify the build processes in the Jakarta
projects.
There were several projects each with their own
Ant build files that were all slightly different and
JARs were checked into CVS. We wanted a
standard way to build the projects, a clear
definition of what the project consisted of, an easy
way to publish project information and a way to
share JARs across several projects.
Apache Maven: History

                   Maven 1.0


Introduced dependency mechanism and remote
repositories
Plugin mechanism
Limited to a wrapper on the top of Ant using ant
and jelly scriplet
Apache Maven: History

                   Maven 2.0


Full rewrite using plain Java and IoC container
Plexus (fork of dead Apache Avalon)
New Pom syntax: migration from maven 1.0 need
rewrite.
Apache Maven: History

                   Maven 3.0


Move to Guice IoC (with a layer to mimic Plexus
api).
More extensible
~99% backward compatible.
Apache Maven
Goals:
●
    Making the build process easy
●
    Providing a uniform build system
●
    Providing quality project information
●
    Providing guidelines for best practice
      development
●
    Allowing transparent migration to new features
Apache Maven Definition
●   Apache Maven is a software project management and
    comprehension tool.
●   Based on the concept of a project object model
    (POM), Maven can manage a project's build, binaries,
    reporting and documentation from a central piece of
    information.
●   Apache Maven is a command line tool with some IDE
    integrations.
Apache Maven Definition


Convention over Configuration !!
Apache Maven Conventions
●   1 project = 1 artifact (jar,war,ear, etc …)


Standardized :
●   directories layout
●   project descriptor (POM)
●   build lifecycle
Apache Maven POM
●   POM: Project Object Model
    –   Project Coordinates
    –   Dependencies
    –   Build settings
    –   Description
    –   Distribution mode
Apache Maven Coordinate
              groupId:artifactId:version


<groupId>org.olamy.maven.course</groupId>
<artifactId>hello-world</artifactId>
<version>1.0-SNAPSHOT</version>
Apache Maven Dependencies
<dependency>
 <groupId>junit</groupId>
 <artifactId>junit</artifactId>
 <version>3.8.1</version>
 <!--optionnals -->
 <scope>test</scope>
 <classifier>sources</sources>
</dependency>
Apache Maven Dependencies
                             Scope
Compile (by default) : Required to build and run the
application
Runtime : not required to build the application but needed at
runtime (Ex : taglibs)
Provided : required to build the application but not needed at
runtime (provided by the container) (Ex : Servlet API, Driver
SGBD, …)
Test : required to build and launch tests but not needed by the
application itself to build and run (Ex : Junit,) TestNG, DbUnit,
…
System : local library with absolute path
Apache Maven Dependencies
                        Transitiviy

●   Project A needs project B
●   Project B needs project C



    So Maven detect project A needs project C
Apache Maven Dependencies
                 Transitiviy: exclude
<dependency>
 <groupId>org.apache.cxf</groupId>
 <artifactId>cxf-bundle-jaxrs</artifactId>
 <exclusions>
  <exclusion>
   <groupId>org.eclipse.jetty</groupId>
   <artifactId>jetty-server</artifactId>
  </exclusion>
 </exclusions>
</dependency>
Apache Maven Dependencies
             Nearest version approach

●   Project A needs project B
●   Project B needs project C 1.1
●   Project A needs project C 1.0


    Maven detect project A needs project C 1.0
Apache Maven Dependencies
                   Artifact repository

●   Download by default from:
    http://repo.maven.apache.org/maven2/
●   Cached locally to ${user.home}/repository
    –   Used by maven
    –   Used by your projects
    –   Produced by your projects
Apache Maven Dependencies
                  Remote repository

●   http(s) transport
●   Url format: ${groupId}/${artifactId}/${artifactId}-$
    {version}(-${classifier}).${type}
    groupId: dot replaced by slash
Apache Maven Dependencies
             Remote repository

dependency: org.apache.maven.plugins:maven-
compiler-plugin:3.0


http://repo.maven.apache.org/maven2/org/apache/
maven/plugins/maven-compiler-plugin/3.0/maven-
compiler-plugin-3.0.jar
Apache Maven Dependencies
                  Central repository

    contains most of the open source projects
    Stats: http://search.maven.org/#stats


●   Total number of artifacts indexed (GAV): 402,355
●   Total number of unique artifacts indexed (GA): 48,632
●   Current size of repository on disk: 650,388 MB
Apache Maven Version
        Project and dependency versions
Two different version variants
SNAPSHOT version
●   The version number ends with –SNAPSHOT
●   The project is in development
●   Deliveries are changing over the time and are overridden after
    each build
●   Artifacts are deployed with a timestamp on remote repositories
RELEASE version
●   The version number doesn’t end with –SNAPSHOT
●   Binaries won’t change
Apache Maven Version
                   SNAPSHOT versions
Maven allows the configuration of an update policy. The
update policy defines the recurrence of checks if there is a
new SNAPSHOT version available on the remote repository :
●   always
●   daily (by default)
●   interval:X (a given period in minutes)
●   never
Must not be used in a released project
The release can thus also be changed
Apache Maven Version
                      RANGE versions
From ... to …
Maven automatically searches for the corresponding
version (using the update policy for released
artifacts)
To use with caution
●   Risk of non reproducibility of the build
●   Risk of side effects on your projects and projects
    depending on them.
Apache Maven Archetype

         Easy start with archetype
     More than 600 projects type template !


           mvn archetype:generate
Choose one (you can apply filtering on the name)
Start to code/enhance the generated template
Apache Maven Archetype


         Start with Tomcat Archetype
●   mvn install
●   Import in an IDE
Apache Maven Lifecycle
          Lifecycle is a sequence of plugin
              executions called phases
●   Full reference:
    http://maven.apache.org/guides/introduction/introducti
    on-to-the-lifecycle.html#Lifecycle_Reference
    –   validate
    –   …
    –   compile
    –   …
    –   Etc...
Apache Maven Lifecycle
         A project has a packaging type

●   <packaging/> default is jar (war, ear etc..)
●   With a packaging comes a lifecycle with
    plugins mapping
●   As long as you respect standard layout
    maven will pack for you respecting
    standards
Apache Maven Lifecycle
        Add a plugin execution to your lifecycle
    <plugin>
     <groupId>org.apache.tomcat.maven</groupId>
     <artifactId>tomcat7-maven-plugin</artifactId>
      <executions>
       <execution>
       <id>tomcat-run</id>
       <goals>
        <goal>run-war-only</goal>
       </goals>
       <phase>pre-integration-test</phase>
●
Multi Modules projects
             Build multiple projects
         SOC: Separation Of Concern

●   Module with an api
●   N modules with different implementation
Multi Modules projects
        Parent packaging pom

<modules>
 <module>module-api</module>
 <module>module-api-tck</module>
 <module>module-impl-a</module>
 <module>module-impl-b</module>
</module>
Multi Modules projects
              Inheritence

Define common values in parent pom → no
need to repeat common values


Dependency Management → dependencies
version defined in only one place
Multi Modules projects
                     Inheritence

    All projects inherit from super pom which
    defined some values:
●   Main sources: src/main/java
●   Test sources: src/test/java
●   Etc....
Multi Modules projects
          Dependency Management
                          parent pom
<dependencyManagement>
<dependencies>
 <dependency>
  <groupId>org.lamy</groupId>
  <artifactId>foo</artifactId>
  <version>1.0</version>
 </dependency>
</dependencies>
</dependencyManagement>
Multi Modules projects
          Dependency Management
                          child poms
<dependencies>
 <dependency>
  <groupId>org.lamy</groupId>
  <artifactId>foo</artifactId>
  <!-- version inherited from parent -->
 </dependency>
</dependencies>
Multi Modules projects
               Plugin Management
                         parent pom
<pluginManagement>
 <plugins>
  <plugin>
   <groupId>org.lamy</groupId>
   <artifactId>foo</artifactId>
   <version>
  </plugin>
 </plugins>
</pluginManagement>
Multi Modules projects
                Plugin Management
                          child poms
 Nothing version, <configuration> and <executions> will be
inherited


inheritance can be overridden.
inheritance can be removed: <inherited>true</inherited> plugins
won't be executed in child projects.
Multi Modules projects
            child poms: configuration inheritence override.


    Elements under configuration have attributes to control
    inheritance mode


●   combine.children=”append” (default is merge)
    → appen or not child content to parent content
●   combine.self=”override” (default is merge)
    → stop inheritance
Plugins
   Each plugin execution is Java class

by default each packaging comes with plugins attached to
                    lifecycle phases.


            For simple projects nothing to do


But you can attach new plugins and executions to lifecycle
Plugins
              Override default

         <pluginManagement> section


●   All used plugins must have a version
     ●   Default configuration override
          ●   Inherited in child poms
Plugins
                      Configuration

<plugin>
 <configuration>
 <foo>bar</foo>
 <directory>${project.build.directory}</directory>
 </configuration>


xml configuration
command line override with -Ddirectory=path
Plugins
                           Write your own

    A maven project with <packaging>maven-plugin</packaging>
    class extends AbstractMojo :
●   Implements method execute
●   Some services getLog() to log as Maven do
●   getPluginContext(): possible to share information between
    plugins
●   Class lifecycle: initializable method when it starts (by default it's
    a singleton class across your build)
Plugins
                                How ?

       Maven will read metadata available in annotations from your
    class: a plugin descriptor will be generated and Maven execution
                           will understand that.
    @Mojo( name = "foo", requiresDependencyResolution =
    ResolutionScope.TEST, threadSafe = true )
●   Mvn ${groupId}:${artifactId}:${version}:foo
●   Dependencies to scope test will be resolved
●
    ThreadSafe for multi thread build
Plugins
                                hack
    Generate a mojo from archetype.
●   Default with doclet
●   With annotations:
    mvn archetype:generate
    -DarchetypeGroupId=org.apache.maven.archetypes
    -DarchetypeArtifactId=maven-archetype-plugin
    -DarchetypeVersion=1.2 -DarchetypeRepository=
    https://repository.apache.org/content/repositories/maven-090/
Plugins
                        Parameters
users parameters
@Parameter( property = "tomcat.delegate", defaultValue =
"true" )
private boolean delegate = true;
<configuration>
 <delegate>false</delegate>
</configuration>
Or
-Dtomcat.delegate=false
Plugins
            Maven Parameters Injected
@Parameter( defaultValue = "${project.packaging}", required =
true, readonly = true )
private String packaging;


@Component
protected MavenProject project;


@Parameter( defaultValue = "${project.artifacts}", required =
true, readonly = true )
private Set<Artifact> dependencies;
Plugins
                  Component Injected

your own
@Component( role = MavenFileFilter.class, hint = "default" )
private MavenFileFilter mavenFileFilter;


from Maven core
@Component
protected ArtifactResolver resolver;
Plugins
                        Advanced
Invoke a plugin directly which need previous phases execution
tomcat7:run will start an embeded Tomcat but need classes to
be compiled first.


Fork lifecycle


@Execute( phase = LifecyclePhase.PROCESS_CLASSES )
will reach process-classes phase then execute your mojo.
Maven
                 Artifacts Distribution
<distributionManagement>
 <repository>
  <id>apache.releases.https</id>
  <name>Apache Release Distribution Repository</name>
  <url></url>
 </repository>
 <snapshotRepository>
  <id>apache.snapshots.https</id>
  <name>${distMgmtSnapshotsName}</name>
  <url>${distMgmtSnapshotsUrl}</url>
 </snapshotRepository>
</distributionManagement>
Maven Settings
   Your local settings in ~/.m2/settings.xml

your credentials to deploy to a remote server


  <server>
   <id>apache.snapshots.https</id>
   <username>uid</username>
   <password>password</password>
  </server>
Maven Settings
   Your local settings in ~/.m2/settings.xml

Mirrors for corporate env:


<mirror>
 <name>archiva-repository</name>
 <mirrorOf>central</mirrorOf> (or * )
 <id>archiva-asf-mirror</id>
 <url>https://archiva-
repository.apache.org/archiva/repository/public</url>
</mirror>
Maven Site
                  mvn site:site → target/site

    Build a web site with your documentations.
    Formats:
●   Apt (files in src/site/apt)
    (http://maven.apache.org/doxia/references/apt-format.html)
●   Xdoc (files in src/site/xdoc)
    (http://maven.apache.org/doxia/references/xdoc-format.html)
●   Markdown (files in src/site/markdown)
    no real specs for that :-)
Maven Site
                 Descriptor src/site/site.xml

●   menu entries
    <project name="">
     <body>
      <menu name="Menu">
       <item name="About"   href="index.html"/>
       <item name="TODO"    href="todo.html"/>
      </menu>
    </project>
Maven Site
                             customize

●   skin
     <skin>
      <groupId>org.apache.maven.skins</groupId>
      <artifactId>maven-fluido-skin</artifactId>
      <version>1.3.0</version>
     </skin>
Maven Site
                           Add reports

●   Reporting section with maven plugins
     <reporting>
      <plugins>
       <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-project-info-reports-plugin</artifactId>
        <version>2.6</version>
       </plugin>
      </plugins>
Maven Site
                   Instrumental reports

●   Findbugs
    <reporting>
     <plugins>
      <plugin>
       <groupId>org.codehaus.mojo</groupId>
       <artifactId>findbugs-maven-plugin</artifactId>
       <version>2.5.2</version>
      </plugin>
     </plugins>
Maven Site
                               Deploy

●   Protocols: ftp, scp, webdav, scm
      <site>
       <id>id for your settings.xml</id>
       <url>dav:url</url>
     </distributionManagement>
Apache Maven
Complementary tooling
Apache Maven Repository
          Deploying to share your project
●   An open source project ? So ask to deploy it to central
●   Use a repository manager to share inside your
    entity/compay
    –   Apache Archiva: http://archiva.apache.org
    –   Nexus: http://www.sonatype.org/nexus/
    –   Artifactory: http://www.jfrog.com
Apache Maven Repository
                Install Archiva locally
●   Download from
    http://archiva.apache.org/download.html
●   Archiva 1.4-M3 Standalone new UI
●   Unzip
●   cd bin
●   archiva console
Apache Maven Repository
           Proxy to external repositories
●   Some organisations doesn't allow external access
●   Artifacts will be cached not access to external
    repositories
●   Control repositories you are using
    <mirror>
     <mirrorOf>*</mirror>
    </mirror>
Continuous Integration
       Detect issues as soon as possible

●   Code will be rebuild on any scm change




●   New artifact snapshots deployed for others
Continuous Integration
●   Bamboo from Atlassian (paying product)
●   TeamCity from Jetbrains (paying product)
●   Continuum from Apache
●   CruiseControl
●   Hudson/Jenkins


    We will talk about Jenkins :-)
Continuous Integration
                             Jenkins

●   http://jenkins-ci.org
●   Easy to install/use: java -jar jenkins.war
●   No need for external tools (database etc..)
●   Configuration stored on the file system
Continuous Inspection
                            Sonar
●   Dashboard with various metrics
●   Aggregator of existing Maven reports (and more)
●   http://sonar.codehaus.org
●   Easy install
●   Daily run in Jenkins
●   Tests it
References

●   http://maven.apache.org
●   http://archiva.apache.org
●   http://jenkins-ci.org
●   http://sonar.codehaus.org
●   http://fr.slideshare.net/olamy/maven-universitycourse
Thanks/Merci

   Questions ?
olamy@apache.org

More Related Content

What's hot

Java Builds with Maven and Ant
Java Builds with Maven and AntJava Builds with Maven and Ant
Java Builds with Maven and AntDavid Noble
 
Hands On with Maven
Hands On with MavenHands On with Maven
Hands On with MavenSid Anand
 
Maven 2 features
Maven 2 featuresMaven 2 features
Maven 2 featuresAngel Ruiz
 
Using Maven 2
Using Maven 2Using Maven 2
Using Maven 2andyhot
 
All the Laravel things: up and running to making $$
All the Laravel things: up and running to making $$All the Laravel things: up and running to making $$
All the Laravel things: up and running to making $$Joe Ferguson
 
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 applicationVadym Lotar
 
Note - Apache Maven Intro
Note - Apache Maven IntroNote - Apache Maven Intro
Note - Apache Maven Introboyw165
 
maven
mavenmaven
mavenakd11
 
Triple E class DevOps with Hudson, Maven, Kokki/Multiconf and PyDev
Triple E class DevOps with Hudson, Maven, Kokki/Multiconf and PyDevTriple E class DevOps with Hudson, Maven, Kokki/Multiconf and PyDev
Triple E class DevOps with Hudson, Maven, Kokki/Multiconf and PyDevWerner Keil
 

What's hot (20)

Java Builds with Maven and Ant
Java Builds with Maven and AntJava Builds with Maven and Ant
Java Builds with Maven and Ant
 
Demystifying Maven
Demystifying MavenDemystifying Maven
Demystifying Maven
 
Maven
Maven Maven
Maven
 
Apache Maven
Apache MavenApache Maven
Apache Maven
 
Maven tutorial
Maven tutorialMaven tutorial
Maven tutorial
 
Maven 2 Introduction
Maven 2 IntroductionMaven 2 Introduction
Maven 2 Introduction
 
Hands On with Maven
Hands On with MavenHands On with Maven
Hands On with Maven
 
Maven 2 features
Maven 2 featuresMaven 2 features
Maven 2 features
 
Using Maven 2
Using Maven 2Using Maven 2
Using Maven 2
 
Apache Maven In 10 Slides
Apache Maven In 10 SlidesApache Maven In 10 Slides
Apache Maven In 10 Slides
 
All the Laravel things: up and running to making $$
All the Laravel things: up and running to making $$All the Laravel things: up and running to making $$
All the Laravel things: up and running to making $$
 
Maven tutorial for beginners
Maven tutorial for beginnersMaven tutorial for beginners
Maven tutorial for beginners
 
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
MavenMaven
Maven
 
Maven
MavenMaven
Maven
 
Apache maven 2 overview
Apache maven 2 overviewApache maven 2 overview
Apache maven 2 overview
 
Note - Apache Maven Intro
Note - Apache Maven IntroNote - Apache Maven Intro
Note - Apache Maven Intro
 
maven
mavenmaven
maven
 
Triple E class DevOps with Hudson, Maven, Kokki/Multiconf and PyDev
Triple E class DevOps with Hudson, Maven, Kokki/Multiconf and PyDevTriple E class DevOps with Hudson, Maven, Kokki/Multiconf and PyDev
Triple E class DevOps with Hudson, Maven, Kokki/Multiconf and PyDev
 

Viewers also liked

Using Maven to build Java & Android program
Using Maven to build Java & Android programUsing Maven to build Java & Android program
Using Maven to build Java & Android programMu Chun Wang
 
Java, Eclipse, Maven & JSF tutorial
Java, Eclipse, Maven & JSF tutorialJava, Eclipse, Maven & JSF tutorial
Java, Eclipse, Maven & JSF tutorialRaghavan Mohan
 
Presenter manual oracle dba (specially for summer interns)
Presenter manual oracle dba (specially for summer interns)Presenter manual oracle dba (specially for summer interns)
Presenter manual oracle dba (specially for summer interns)XPERT INFOTECH
 
Database management system chapter13
Database management system chapter13Database management system chapter13
Database management system chapter13Pranab Dasgupta
 
KeyLabsTraining - Courses
KeyLabsTraining - CoursesKeyLabsTraining - Courses
KeyLabsTraining - CoursesChinna Botla
 
Database management system chapter1
Database management system chapter1Database management system chapter1
Database management system chapter1Pranab Dasgupta
 
Database management system chapter5
Database management system chapter5Database management system chapter5
Database management system chapter5Pranab Dasgupta
 
Java9 and the impact on Maven Projects (JFall 2016)
Java9 and the impact on Maven Projects (JFall 2016)Java9 and the impact on Maven Projects (JFall 2016)
Java9 and the impact on Maven Projects (JFall 2016)Robert Scholte
 
The Evolution of Live Preview Environment Design
The Evolution of Live Preview Environment DesignThe Evolution of Live Preview Environment Design
The Evolution of Live Preview Environment DesignBrendan Sera-Shriar
 
Portfolio PlusAnimations 2009 NL
Portfolio PlusAnimations 2009 NLPortfolio PlusAnimations 2009 NL
Portfolio PlusAnimations 2009 NLrogiervanmeeuwen
 
Projectplan lerarentekort Rotterdam 2008
Projectplan lerarentekort Rotterdam 2008Projectplan lerarentekort Rotterdam 2008
Projectplan lerarentekort Rotterdam 2008Luc Sluijsmans
 
Design Studio
Design StudioDesign Studio
Design Studiomilarepa1
 
The Semantic Web - This time... its Personal
The Semantic Web - This time... its PersonalThe Semantic Web - This time... its Personal
The Semantic Web - This time... its PersonalMark Wilkinson
 
SWAT4LS 2011: SADI Knowledge Explorer Plug-in
SWAT4LS 2011: SADI Knowledge Explorer Plug-inSWAT4LS 2011: SADI Knowledge Explorer Plug-in
SWAT4LS 2011: SADI Knowledge Explorer Plug-inMark Wilkinson
 
Diseño deprogramas
Diseño deprogramasDiseño deprogramas
Diseño deprogramassenasoft
 
Juc paris olivier lamy talk
Juc paris olivier lamy talkJuc paris olivier lamy talk
Juc paris olivier lamy talkOlivier Lamy
 

Viewers also liked (20)

Using Maven to build Java & Android program
Using Maven to build Java & Android programUsing Maven to build Java & Android program
Using Maven to build Java & Android program
 
Java, Eclipse, Maven & JSF tutorial
Java, Eclipse, Maven & JSF tutorialJava, Eclipse, Maven & JSF tutorial
Java, Eclipse, Maven & JSF tutorial
 
Installing java, eclipse and maven
Installing java, eclipse and mavenInstalling java, eclipse and maven
Installing java, eclipse and maven
 
Presenter manual oracle dba (specially for summer interns)
Presenter manual oracle dba (specially for summer interns)Presenter manual oracle dba (specially for summer interns)
Presenter manual oracle dba (specially for summer interns)
 
Database management system chapter13
Database management system chapter13Database management system chapter13
Database management system chapter13
 
Oracle - Introduction
Oracle - IntroductionOracle - Introduction
Oracle - Introduction
 
KeyLabsTraining - Courses
KeyLabsTraining - CoursesKeyLabsTraining - Courses
KeyLabsTraining - Courses
 
Database management system chapter1
Database management system chapter1Database management system chapter1
Database management system chapter1
 
Database management system chapter5
Database management system chapter5Database management system chapter5
Database management system chapter5
 
Java9 and the impact on Maven Projects (JFall 2016)
Java9 and the impact on Maven Projects (JFall 2016)Java9 and the impact on Maven Projects (JFall 2016)
Java9 and the impact on Maven Projects (JFall 2016)
 
i楼市
i楼市i楼市
i楼市
 
The Evolution of Live Preview Environment Design
The Evolution of Live Preview Environment DesignThe Evolution of Live Preview Environment Design
The Evolution of Live Preview Environment Design
 
La graviola
La graviolaLa graviola
La graviola
 
Portfolio PlusAnimations 2009 NL
Portfolio PlusAnimations 2009 NLPortfolio PlusAnimations 2009 NL
Portfolio PlusAnimations 2009 NL
 
Projectplan lerarentekort Rotterdam 2008
Projectplan lerarentekort Rotterdam 2008Projectplan lerarentekort Rotterdam 2008
Projectplan lerarentekort Rotterdam 2008
 
Design Studio
Design StudioDesign Studio
Design Studio
 
The Semantic Web - This time... its Personal
The Semantic Web - This time... its PersonalThe Semantic Web - This time... its Personal
The Semantic Web - This time... its Personal
 
SWAT4LS 2011: SADI Knowledge Explorer Plug-in
SWAT4LS 2011: SADI Knowledge Explorer Plug-inSWAT4LS 2011: SADI Knowledge Explorer Plug-in
SWAT4LS 2011: SADI Knowledge Explorer Plug-in
 
Diseño deprogramas
Diseño deprogramasDiseño deprogramas
Diseño deprogramas
 
Juc paris olivier lamy talk
Juc paris olivier lamy talkJuc paris olivier lamy talk
Juc paris olivier lamy talk
 

Similar to Build Java Projects with Apache Maven

OpenStack Documentation Projects and Processes
OpenStack Documentation Projects and ProcessesOpenStack Documentation Projects and Processes
OpenStack Documentation Projects and ProcessesAnne Gentle
 
Integrate (Yourself) with the Apache Software Foundation - Open Source Day 2015
Integrate (Yourself) with the Apache Software Foundation - Open Source Day 2015Integrate (Yourself) with the Apache Software Foundation - Open Source Day 2015
Integrate (Yourself) with the Apache Software Foundation - Open Source Day 2015Krzysztof Sobkowiak
 
The Apache Way olamy
The Apache Way olamyThe Apache Way olamy
The Apache Way olamyOlivier Lamy
 
Apache Maven at GenevaJUG by Arnaud Héritier
Apache Maven at GenevaJUG by Arnaud HéritierApache Maven at GenevaJUG by Arnaud Héritier
Apache Maven at GenevaJUG by Arnaud HéritierGenevaJUG
 
Geneva Jug (30th March, 2010) - Maven
Geneva Jug (30th March, 2010) - MavenGeneva Jug (30th March, 2010) - Maven
Geneva Jug (30th March, 2010) - MavenArnaud Héritier
 
Lausanne Jug (08th April, 2010) - Maven
Lausanne Jug (08th April, 2010) - MavenLausanne Jug (08th April, 2010) - Maven
Lausanne Jug (08th April, 2010) - MavenArnaud Héritier
 
An Introduction to Maven
An Introduction to MavenAn Introduction to Maven
An Introduction to MavenVadym Lotar
 
Integrating Apache Camel with Apache Syncope
Integrating Apache Camel with Apache SyncopeIntegrating Apache Camel with Apache Syncope
Integrating Apache Camel with Apache SyncopeColm O hEigeartaigh
 
Riviera JUG (20th April, 2010) - Maven
Riviera JUG (20th April, 2010) - MavenRiviera JUG (20th April, 2010) - Maven
Riviera JUG (20th April, 2010) - MavenArnaud Héritier
 
Ci jenkins maven svn
Ci jenkins maven svnCi jenkins maven svn
Ci jenkins maven svnAnkur Goyal
 
20091112 - Mars Jug - Apache Maven
20091112 - Mars Jug - Apache Maven20091112 - Mars Jug - Apache Maven
20091112 - Mars Jug - Apache MavenArnaud Héritier
 
Getting involved with Open Source at the ASF
Getting involved with Open Source at the ASFGetting involved with Open Source at the ASF
Getting involved with Open Source at the ASFHortonworks
 
Presentation 1 open source tools in continuous integration environment v1.0
Presentation 1   open source tools in continuous integration environment v1.0Presentation 1   open source tools in continuous integration environment v1.0
Presentation 1 open source tools in continuous integration environment v1.0Jasmine Conseil
 
Openshift cheat rhce_r3v1 rhce
Openshift cheat rhce_r3v1 rhceOpenshift cheat rhce_r3v1 rhce
Openshift cheat rhce_r3v1 rhceDarnette A
 
GCE11 Apache Rave Presentation
GCE11 Apache Rave PresentationGCE11 Apache Rave Presentation
GCE11 Apache Rave Presentationmarpierc
 
Alpes Jug (29th March, 2010) - Apache Maven
Alpes Jug (29th March, 2010) - Apache MavenAlpes Jug (29th March, 2010) - Apache Maven
Alpes Jug (29th March, 2010) - Apache MavenArnaud Héritier
 

Similar to Build Java Projects with Apache Maven (20)

OpenStack Documentation Projects and Processes
OpenStack Documentation Projects and ProcessesOpenStack Documentation Projects and Processes
OpenStack Documentation Projects and Processes
 
Session 2
Session 2Session 2
Session 2
 
Session 2
Session 2Session 2
Session 2
 
Integrate (Yourself) with the Apache Software Foundation - Open Source Day 2015
Integrate (Yourself) with the Apache Software Foundation - Open Source Day 2015Integrate (Yourself) with the Apache Software Foundation - Open Source Day 2015
Integrate (Yourself) with the Apache Software Foundation - Open Source Day 2015
 
The Apache Way olamy
The Apache Way olamyThe Apache Way olamy
The Apache Way olamy
 
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
 
Lausanne Jug (08th April, 2010) - Maven
Lausanne Jug (08th April, 2010) - MavenLausanne Jug (08th April, 2010) - Maven
Lausanne Jug (08th April, 2010) - Maven
 
An Introduction to Maven
An Introduction to MavenAn Introduction to Maven
An Introduction to Maven
 
Integrating Apache Camel with Apache Syncope
Integrating Apache Camel with Apache SyncopeIntegrating Apache Camel with Apache Syncope
Integrating Apache Camel with Apache Syncope
 
Riviera JUG (20th April, 2010) - Maven
Riviera JUG (20th April, 2010) - MavenRiviera JUG (20th April, 2010) - Maven
Riviera JUG (20th April, 2010) - Maven
 
The Apache Way
The Apache WayThe Apache Way
The Apache Way
 
Ci jenkins maven svn
Ci jenkins maven svnCi jenkins maven svn
Ci jenkins maven svn
 
20091112 - Mars Jug - Apache Maven
20091112 - Mars Jug - Apache Maven20091112 - Mars Jug - Apache Maven
20091112 - Mars Jug - Apache Maven
 
Manen Ant SVN
Manen Ant SVNManen Ant SVN
Manen Ant SVN
 
Getting involved with Open Source at the ASF
Getting involved with Open Source at the ASFGetting involved with Open Source at the ASF
Getting involved with Open Source at the ASF
 
Presentation 1 open source tools in continuous integration environment v1.0
Presentation 1   open source tools in continuous integration environment v1.0Presentation 1   open source tools in continuous integration environment v1.0
Presentation 1 open source tools in continuous integration environment v1.0
 
Openshift cheat rhce_r3v1 rhce
Openshift cheat rhce_r3v1 rhceOpenshift cheat rhce_r3v1 rhce
Openshift cheat rhce_r3v1 rhce
 
GCE11 Apache Rave Presentation
GCE11 Apache Rave PresentationGCE11 Apache Rave Presentation
GCE11 Apache Rave Presentation
 
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
 

Build Java Projects with Apache Maven

  • 1. Java Build Tooling Apache Maven Olivier Lamy | @olamy VP Apache Maven, ASF Member
  • 2. Agenda ● Who am I: Introduction ● What is the Apache Software Foundation ● Java build tools evolution ● Apache Maven ● Extend Apache Maven ● Complementary Tooling
  • 3. /me ● Olivier Lamy (@olamy ) (twitter.com/olamy) ● https://www.slideshare.net/olamy / http://olamy.blogspot.fr ● Apache Software Foundation – Member – VP, Maven – PMCs: Maven, Archiva, Tomcat, Sqoop, DirectMemory, Kalumet – Commiter: Commons ● Jenkins etc.. (add bugs in various opensource projects) ● Also a OpenSource Architect at Talend
  • 4. What is The ASF ● Membership-based corporation; Non-profit US 501(c)3 Charity ● Directors, officers all unpaid volunteers ● Paid contractors: sysadmins, press officer ● Broad-based Membership of individuals ensures independence ➔ Collection of Apache project communities
  • 5. Apache Org Chart Nominate, elect Members Directors annually Organizational ~400 Oversight Technical Board of Oversight Nominate, elect 9 Directors new members Create & update upon Appoint officers PMC request Report monthly Report quarterly PMCs Officers 100++ ~10 Define organizational & legal policies Committers Nominate, elect Vote for new committers project releases ~3,000 Write project code
  • 6. Apache Mission: What ● Provide open source software to the public free of charge – “Apache aims to provide a pragmatic, non-technical framework to its projects.” - Justin Erenkrantz ● Let coders code; Foundation exists to do rest ● Community over code
  • 7. Apache License ● Apache projects use the Apache License 2.0 ● Pragmatic and permissive – Maximum freedom for users ● Includes patent grant ● Easily and frequently used by other groups
  • 8. Apache Projects ● Over 100 code-producing community driven projects – 50+ Podlings in Incubation ● “Apache Projects include millions of lines of code overseen by an all-volunteer community across six continents. Apache technologies power more than half the Internet, petabytes of data, teraflops of operations, billions of objects, and enhance the lives of countless users and developers.”
  • 9. Apache Projects ● Industry standards: – Apache HTTP Server (original project from the foundation) – Apache Tomcat (Servlet container) – Apache Hadoop – Apache Commons * – Apache Subversion – Etc http://projects.apache.org/indexes/alpha.html
  • 10. Java Build Tools Evolution
  • 11. Javac Basic command line tool Too many parameters to set for classpath, sourcepath, annotations processors etc.. Use it for hello world only
  • 12. Java Build Evolution ● We don't only build one or two classes. ● Use of external dependencies ● Complex packaging (not only jars) ● Running tests (complex tests) ● Interaction with external tools (issues trackers, scm, ci servers)
  • 13. Build Evolution : Ant “Apache Ant is a Java-based build tool. In theory, it is kind of like Make, but without Make's wrinkles” -Apache Ant Website
  • 14. Build Evolution : Ant Why create another tool when make, gnumake already exist? They all have some limitations They are more Shell Based Limits you to one kind of OS
  • 15. Build Evolution : Ant Ant has Java Class like extensions Use of XML instead of Shell Scripts Each task is taken care of by creating its object Standardized Platform Independent
  • 16. Build Evolution : Ant Build.xml: ● Similar to makefile but an XML file ● It's the default file where ant will look for what to build, how to build ● Has projects, targets, tasks
  • 17. Build Evolution : Ant Simple build file <project name=”sample” default=”hello> <target name=”hello”> <echo message=”Hello from ant”/> </target> </project>
  • 18. Build Evolution : Ant Download from http://ant.apache.org/bindownload.cgi Sample project: https://github.com/olamy/hello-world git clone https://github.com/olamy/hello-world.git or https://github.com/olamy/hello- world/archive/master.zip
  • 19. Build Evolution : Ant ant -p: list all targets ● ant compile ● ant run-tests ● ant package
  • 20. Build Evolution : Ant So you have to define everything include jars in your source tree/scm each ant build is a rewrite of an other one
  • 21. Build Evolution: Maven Download from http://maven.apache.org/download.html M2_HOME= path to maven home install PATH=$M2_HOME/bin:$PATH
  • 22. Build Evolution: Maven pom.xml is small Same project: mvn test, mvn package
  • 23. Build Evolution : Ant ● Ant doesn't have formal conventions like a common project directory structure, you have to tell Ant exactly where to find the source and where to put the output. Informal conventions have emerged over time, but they haven't been codified into the product. ● Ant is procedural, you have to tell Ant exactly what to do and when to do it. You had to tell it to compile, then copy, then compress. ● Ant doesn't have a lifecycle, you had to define goals and goal dependencies. You had to attach a sequence of tasks to each goal manually.
  • 24. Build Evolution: Maven Maven has conventions, it already knew where your source code was because you followed the convention. It put the bytecode in target/classes, and it produced a JAR file in target. Maven is declarative. All you had to do was create a pom.xml file and put your source in the default directory. Maven took care of the rest. Maven has a lifecycle, which you invoked when you executed mvn install. This command told Maven to execute a series of sequence steps until it reached the lifecycle. Maven executed a number of default plugin goals which did things like compile and create a JAR.
  • 25. Apache Maven: History Maven, a Yiddish word meaning accumulator of knowledge, was originally started as an attempt to simplify the build processes in the Jakarta projects. There were several projects each with their own Ant build files that were all slightly different and JARs were checked into CVS. We wanted a standard way to build the projects, a clear definition of what the project consisted of, an easy way to publish project information and a way to share JARs across several projects.
  • 26. Apache Maven: History Maven 1.0 Introduced dependency mechanism and remote repositories Plugin mechanism Limited to a wrapper on the top of Ant using ant and jelly scriplet
  • 27. Apache Maven: History Maven 2.0 Full rewrite using plain Java and IoC container Plexus (fork of dead Apache Avalon) New Pom syntax: migration from maven 1.0 need rewrite.
  • 28. Apache Maven: History Maven 3.0 Move to Guice IoC (with a layer to mimic Plexus api). More extensible ~99% backward compatible.
  • 29. Apache Maven Goals: ● Making the build process easy ● Providing a uniform build system ● Providing quality project information ● Providing guidelines for best practice development ● Allowing transparent migration to new features
  • 30. Apache Maven Definition ● Apache Maven is a software project management and comprehension tool. ● Based on the concept of a project object model (POM), Maven can manage a project's build, binaries, reporting and documentation from a central piece of information. ● Apache Maven is a command line tool with some IDE integrations.
  • 31. Apache Maven Definition Convention over Configuration !!
  • 32. Apache Maven Conventions ● 1 project = 1 artifact (jar,war,ear, etc …) Standardized : ● directories layout ● project descriptor (POM) ● build lifecycle
  • 33. Apache Maven POM ● POM: Project Object Model – Project Coordinates – Dependencies – Build settings – Description – Distribution mode
  • 34. Apache Maven Coordinate groupId:artifactId:version <groupId>org.olamy.maven.course</groupId> <artifactId>hello-world</artifactId> <version>1.0-SNAPSHOT</version>
  • 35. Apache Maven Dependencies <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <!--optionnals --> <scope>test</scope> <classifier>sources</sources> </dependency>
  • 36. Apache Maven Dependencies Scope Compile (by default) : Required to build and run the application Runtime : not required to build the application but needed at runtime (Ex : taglibs) Provided : required to build the application but not needed at runtime (provided by the container) (Ex : Servlet API, Driver SGBD, …) Test : required to build and launch tests but not needed by the application itself to build and run (Ex : Junit,) TestNG, DbUnit, … System : local library with absolute path
  • 37. Apache Maven Dependencies Transitiviy ● Project A needs project B ● Project B needs project C So Maven detect project A needs project C
  • 38. Apache Maven Dependencies Transitiviy: exclude <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-bundle-jaxrs</artifactId> <exclusions> <exclusion> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-server</artifactId> </exclusion> </exclusions> </dependency>
  • 39. Apache Maven Dependencies Nearest version approach ● Project A needs project B ● Project B needs project C 1.1 ● Project A needs project C 1.0 Maven detect project A needs project C 1.0
  • 40. Apache Maven Dependencies Artifact repository ● Download by default from: http://repo.maven.apache.org/maven2/ ● Cached locally to ${user.home}/repository – Used by maven – Used by your projects – Produced by your projects
  • 41. Apache Maven Dependencies Remote repository ● http(s) transport ● Url format: ${groupId}/${artifactId}/${artifactId}-$ {version}(-${classifier}).${type} groupId: dot replaced by slash
  • 42. Apache Maven Dependencies Remote repository dependency: org.apache.maven.plugins:maven- compiler-plugin:3.0 http://repo.maven.apache.org/maven2/org/apache/ maven/plugins/maven-compiler-plugin/3.0/maven- compiler-plugin-3.0.jar
  • 43. Apache Maven Dependencies Central repository contains most of the open source projects Stats: http://search.maven.org/#stats ● Total number of artifacts indexed (GAV): 402,355 ● Total number of unique artifacts indexed (GA): 48,632 ● Current size of repository on disk: 650,388 MB
  • 44. Apache Maven Version Project and dependency versions Two different version variants SNAPSHOT version ● The version number ends with –SNAPSHOT ● The project is in development ● Deliveries are changing over the time and are overridden after each build ● Artifacts are deployed with a timestamp on remote repositories RELEASE version ● The version number doesn’t end with –SNAPSHOT ● Binaries won’t change
  • 45. Apache Maven Version SNAPSHOT versions Maven allows the configuration of an update policy. The update policy defines the recurrence of checks if there is a new SNAPSHOT version available on the remote repository : ● always ● daily (by default) ● interval:X (a given period in minutes) ● never Must not be used in a released project The release can thus also be changed
  • 46. Apache Maven Version RANGE versions From ... to … Maven automatically searches for the corresponding version (using the update policy for released artifacts) To use with caution ● Risk of non reproducibility of the build ● Risk of side effects on your projects and projects depending on them.
  • 47. Apache Maven Archetype Easy start with archetype More than 600 projects type template ! mvn archetype:generate Choose one (you can apply filtering on the name) Start to code/enhance the generated template
  • 48. Apache Maven Archetype Start with Tomcat Archetype ● mvn install ● Import in an IDE
  • 49. Apache Maven Lifecycle Lifecycle is a sequence of plugin executions called phases ● Full reference: http://maven.apache.org/guides/introduction/introducti on-to-the-lifecycle.html#Lifecycle_Reference – validate – … – compile – … – Etc...
  • 50. Apache Maven Lifecycle A project has a packaging type ● <packaging/> default is jar (war, ear etc..) ● With a packaging comes a lifecycle with plugins mapping ● As long as you respect standard layout maven will pack for you respecting standards
  • 51. Apache Maven Lifecycle Add a plugin execution to your lifecycle <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <executions> <execution> <id>tomcat-run</id> <goals> <goal>run-war-only</goal> </goals> <phase>pre-integration-test</phase> ●
  • 52. Multi Modules projects Build multiple projects SOC: Separation Of Concern ● Module with an api ● N modules with different implementation
  • 53. Multi Modules projects Parent packaging pom <modules> <module>module-api</module> <module>module-api-tck</module> <module>module-impl-a</module> <module>module-impl-b</module> </module>
  • 54. Multi Modules projects Inheritence Define common values in parent pom → no need to repeat common values Dependency Management → dependencies version defined in only one place
  • 55. Multi Modules projects Inheritence All projects inherit from super pom which defined some values: ● Main sources: src/main/java ● Test sources: src/test/java ● Etc....
  • 56. Multi Modules projects Dependency Management parent pom <dependencyManagement> <dependencies> <dependency> <groupId>org.lamy</groupId> <artifactId>foo</artifactId> <version>1.0</version> </dependency> </dependencies> </dependencyManagement>
  • 57. Multi Modules projects Dependency Management child poms <dependencies> <dependency> <groupId>org.lamy</groupId> <artifactId>foo</artifactId> <!-- version inherited from parent --> </dependency> </dependencies>
  • 58. Multi Modules projects Plugin Management parent pom <pluginManagement> <plugins> <plugin> <groupId>org.lamy</groupId> <artifactId>foo</artifactId> <version> </plugin> </plugins> </pluginManagement>
  • 59. Multi Modules projects Plugin Management child poms Nothing version, <configuration> and <executions> will be inherited inheritance can be overridden. inheritance can be removed: <inherited>true</inherited> plugins won't be executed in child projects.
  • 60. Multi Modules projects child poms: configuration inheritence override. Elements under configuration have attributes to control inheritance mode ● combine.children=”append” (default is merge) → appen or not child content to parent content ● combine.self=”override” (default is merge) → stop inheritance
  • 61. Plugins Each plugin execution is Java class by default each packaging comes with plugins attached to lifecycle phases. For simple projects nothing to do But you can attach new plugins and executions to lifecycle
  • 62. Plugins Override default <pluginManagement> section ● All used plugins must have a version ● Default configuration override ● Inherited in child poms
  • 63. Plugins Configuration <plugin> <configuration> <foo>bar</foo> <directory>${project.build.directory}</directory> </configuration> xml configuration command line override with -Ddirectory=path
  • 64. Plugins Write your own A maven project with <packaging>maven-plugin</packaging> class extends AbstractMojo : ● Implements method execute ● Some services getLog() to log as Maven do ● getPluginContext(): possible to share information between plugins ● Class lifecycle: initializable method when it starts (by default it's a singleton class across your build)
  • 65. Plugins How ? Maven will read metadata available in annotations from your class: a plugin descriptor will be generated and Maven execution will understand that. @Mojo( name = "foo", requiresDependencyResolution = ResolutionScope.TEST, threadSafe = true ) ● Mvn ${groupId}:${artifactId}:${version}:foo ● Dependencies to scope test will be resolved ● ThreadSafe for multi thread build
  • 66. Plugins hack Generate a mojo from archetype. ● Default with doclet ● With annotations: mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-plugin -DarchetypeVersion=1.2 -DarchetypeRepository= https://repository.apache.org/content/repositories/maven-090/
  • 67. Plugins Parameters users parameters @Parameter( property = "tomcat.delegate", defaultValue = "true" ) private boolean delegate = true; <configuration> <delegate>false</delegate> </configuration> Or -Dtomcat.delegate=false
  • 68. Plugins Maven Parameters Injected @Parameter( defaultValue = "${project.packaging}", required = true, readonly = true ) private String packaging; @Component protected MavenProject project; @Parameter( defaultValue = "${project.artifacts}", required = true, readonly = true ) private Set<Artifact> dependencies;
  • 69. Plugins Component Injected your own @Component( role = MavenFileFilter.class, hint = "default" ) private MavenFileFilter mavenFileFilter; from Maven core @Component protected ArtifactResolver resolver;
  • 70. Plugins Advanced Invoke a plugin directly which need previous phases execution tomcat7:run will start an embeded Tomcat but need classes to be compiled first. Fork lifecycle @Execute( phase = LifecyclePhase.PROCESS_CLASSES ) will reach process-classes phase then execute your mojo.
  • 71. Maven Artifacts Distribution <distributionManagement> <repository> <id>apache.releases.https</id> <name>Apache Release Distribution Repository</name> <url></url> </repository> <snapshotRepository> <id>apache.snapshots.https</id> <name>${distMgmtSnapshotsName}</name> <url>${distMgmtSnapshotsUrl}</url> </snapshotRepository> </distributionManagement>
  • 72. Maven Settings Your local settings in ~/.m2/settings.xml your credentials to deploy to a remote server <server> <id>apache.snapshots.https</id> <username>uid</username> <password>password</password> </server>
  • 73. Maven Settings Your local settings in ~/.m2/settings.xml Mirrors for corporate env: <mirror> <name>archiva-repository</name> <mirrorOf>central</mirrorOf> (or * ) <id>archiva-asf-mirror</id> <url>https://archiva- repository.apache.org/archiva/repository/public</url> </mirror>
  • 74. Maven Site mvn site:site → target/site Build a web site with your documentations. Formats: ● Apt (files in src/site/apt) (http://maven.apache.org/doxia/references/apt-format.html) ● Xdoc (files in src/site/xdoc) (http://maven.apache.org/doxia/references/xdoc-format.html) ● Markdown (files in src/site/markdown) no real specs for that :-)
  • 75. Maven Site Descriptor src/site/site.xml ● menu entries <project name=""> <body> <menu name="Menu"> <item name="About" href="index.html"/> <item name="TODO" href="todo.html"/> </menu> </project>
  • 76. Maven Site customize ● skin <skin> <groupId>org.apache.maven.skins</groupId> <artifactId>maven-fluido-skin</artifactId> <version>1.3.0</version> </skin>
  • 77. Maven Site Add reports ● Reporting section with maven plugins <reporting> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-project-info-reports-plugin</artifactId> <version>2.6</version> </plugin> </plugins>
  • 78. Maven Site Instrumental reports ● Findbugs <reporting> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>findbugs-maven-plugin</artifactId> <version>2.5.2</version> </plugin> </plugins>
  • 79. Maven Site Deploy ● Protocols: ftp, scp, webdav, scm <site> <id>id for your settings.xml</id> <url>dav:url</url> </distributionManagement>
  • 81. Apache Maven Repository Deploying to share your project ● An open source project ? So ask to deploy it to central ● Use a repository manager to share inside your entity/compay – Apache Archiva: http://archiva.apache.org – Nexus: http://www.sonatype.org/nexus/ – Artifactory: http://www.jfrog.com
  • 82. Apache Maven Repository Install Archiva locally ● Download from http://archiva.apache.org/download.html ● Archiva 1.4-M3 Standalone new UI ● Unzip ● cd bin ● archiva console
  • 83. Apache Maven Repository Proxy to external repositories ● Some organisations doesn't allow external access ● Artifacts will be cached not access to external repositories ● Control repositories you are using <mirror> <mirrorOf>*</mirror> </mirror>
  • 84. Continuous Integration Detect issues as soon as possible ● Code will be rebuild on any scm change ● New artifact snapshots deployed for others
  • 85. Continuous Integration ● Bamboo from Atlassian (paying product) ● TeamCity from Jetbrains (paying product) ● Continuum from Apache ● CruiseControl ● Hudson/Jenkins We will talk about Jenkins :-)
  • 86. Continuous Integration Jenkins ● http://jenkins-ci.org ● Easy to install/use: java -jar jenkins.war ● No need for external tools (database etc..) ● Configuration stored on the file system
  • 87. Continuous Inspection Sonar ● Dashboard with various metrics ● Aggregator of existing Maven reports (and more) ● http://sonar.codehaus.org ● Easy install ● Daily run in Jenkins ● Tests it
  • 88. References ● http://maven.apache.org ● http://archiva.apache.org ● http://jenkins-ci.org ● http://sonar.codehaus.org ● http://fr.slideshare.net/olamy/maven-universitycourse
  • 89. Thanks/Merci Questions ? olamy@apache.org

Editor's Notes

  1. Put the item people are least familiar with, but which is really most important, first. While the Apache Projects provide all the code, it&apos;s the Foundation and the Apache Way that enable them to do that – independently, and for the long-term.
  2. Note that currently 100% of my time on Apache work is as an unpaid volunteer; my IBM job is completely unrelated (both technically and organizationally).
  3. The most important thing to realize on this slide: while the Foundation provides a home for over 100 projects, each of those projects is really an independent community of developers and users.
  4. Fundamentally, the organization is pretty simple. The Membership elects a Board of Nine Directors annually. The Board sets overall policy and provides oversight for all operations. Note especially that officers and PMCs report directly to the board. The President and VP, Infrastructure manage day-to-day operations – but only of the infrastrucutre itself, not of our projects. The most important thing to realize from this picture is (click) that everything to the left of the page only provides organizational oversight. All technical decisions are made on the right hand half – within the PMCs and projects individually.
  5. It&apos;s really that simple. The Foundation&apos;s purpose is to serve as a stable and independent home for it&apos;s projects. The Foundation should only be there to handle the stuff coders don&apos;t want to do or aren&apos;t good at handling; everything else – and especially all technical decisions – are made by the coders in PMCs and projects.
  6. All Apache software should be useable under our license. This ensures maximum freedom for users. This also ensures that software released with our license is available to the public.
  7. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  8. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  9. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  10. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  11. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  12. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  13. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  14. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  15. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  16. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  17. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  18. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  19. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  20. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  21. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  22. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  23. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  24. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  25. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  26. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  27. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  28. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  29. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  30. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  31. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  32. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  33. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  34. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  35. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  36. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  37. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  38. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  39. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  40. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  41. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  42. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  43. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  44. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  45. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  46. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  47. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  48. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  49. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  50. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  51. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  52. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  53. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  54. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  55. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  56. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  57. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  58. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  59. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  60. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  61. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  62. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  63. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  64. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  65. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  66. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  67. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  68. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  69. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  70. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  71. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  72. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  73. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  74. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  75. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  76. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  77. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  78. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  79. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  80. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  81. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  82. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  83. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  84. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  85. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  86. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  87. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)
  88. This is a great quote from today&apos;s press release by the ASF. We also have about a dozen past projects, and a number of other, non-code projects to assist with operations. Conferences committee, Community Development, and others are tasked to manage various operations like events and educating new contributors (Legal, Brand Management, Fundraising, and Marketing &amp; Publicity are all officers, not PMCs)