Table of Contents
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
- One level above ANT
- Higher level of reusability between builds
- Faster turn around time to set up a powerful build
- Project website generation
- Less maintenance
- Greater momentum
- Repository management
- Automatic downloads
Main Features of MAVEN
- Build-Tool
- Dependency Management Tool
- Documentation Tool
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