What is Apache Maven ?- Definition from Trenovision

What is Maven?

Maven is a software management and comprehension tool based on the concept of Project Object Model (POM) which can manage project build, reporting, and documentation from a central piece of information.

What is POM?

“As a fundamental unit of work in Maven, POM is an XML file that contains information about project and configuration details used by Maven to build the project”
History: Jakarta Turbine Project


Objectives and Characteristics of MAVEN

  • Maven is more than just Build Tool
  • It was built considering certain objectives
  • It Provides:
    • Easy Build Process
    • Uniform Build System
    • Quality Project Information
    • Guidelines for Best Practices Development
  • Achieved Characteristics:
    • Visibility
    • Reusability
    • Maintainability
    • Comprehensibility “Accumulator of Knowledge”



Comparison with ANT

  1. One level above ANT
  2. Higher level of reusability between builds
  3. Faster turn around time to set up a powerful build
  4. Project website generation
  5. Less maintenance
  6. Greater momentum
  7. Repository management
  8. Automatic downloads

Main Features of MAVEN

  • Build-Tool
  • Dependency Management Tool
  • Documentation Tool



Overview of Simple Architecture

MAVEN
Overview of Simple Architecture

Project Creation in MAVEN

mvn archetype:generate
-DgroupId = com.mycompany.app
-DartifactId = my-app
-DarchetypeArtifactId = maven-archetype-quickstart
-DinteractiveMode = false
 

Contents of the Created Project

  • POM
  • source tree for your application’s sources
  • source tree for your test sources

POM.XML

<project xmlns = “http://maven.apache.org/POM/4.0.0” xmlns:xsi = “http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation = “http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>
<modelVersion> 4.0.0 </modelVersion>
<groupId> com.mycompany.app </groupId>
<artifactId> my-app </artifactId>
<packaging> jar </packaging>
<version> 1.0-SNAPSHOT </version>
<name> Maven Quick Start Archetype </name>
<url> http://maven.apache.org </url>
<dependencies>
<dependency>
<groupId> junit </groupId>
<artifactId> junit </artifactId>
<version> 4.8.2 </version>
<scope> test </scope>
</dependency>
</dependencies>
</project>
 

BUILD.XML

<project default = “compile”>
<property name = “classesdir = ” ” value = “…”/>
<property name = “libdir” value = “…”/>
<target name = “compile”>
<mkdir dir = “${classesdir}”/>
<javac destdir = “${classesdir}”>
<src>
<pathelement location = “src/main/java”/>
</src>
<classpath>
<fileset dir = “${libdir}”>
<include name = “*.jar”/>
</fileset>
</classpath>
</javac>
</target>
</project>
 


Project Object Model (POM)

  • Metadata: Location of Directories, Developers/Contributors, Dependencies, Repositories
  • Dependencies (Transitive Dependencies), Inheritance, and Aggregation
  • Key Elements
    • Project
    • Model Version
    • Group ID
    • Packaging
    • Artifact ID
    • Version
    • Name
    • URL
    • Description

Standard Directory Layout

src/main/java Application/Library sources
src/main/resources Application/Library resources
src/main/filters Resource filter files
src/main/assembly Assembly descriptors
src/main/config Configuration files
src/main/scripts Application/Library scripts
src/main/webapp Web application sources
src/test/java Test sources
src/test/resources Test resources
src/test/filters Test resource filter files
src/site Site
LICENSE.txt Project’s license
NOTICE.txt Notices and attributions required by libraries that the project depends on
README.txt Project’s readme

 

Documentation – Building Own Site

  • mvn site
  • pom.xml

<project> …
<distributionManagement>
<site>
<id>website</id>
<url>scp://www.mycompany.com/www/docs/project/</url>
</site>
</distributionManagement> …
</project>

  • mvn site-deploy