Maven Tutorial for Beginners

What is MAVEN?

MAVEN is a software management tool based on the concept of Project Object Model (POM) which can manage project building, reporting and documentation, releasing and distribution.

POM is an XML file that contains the project and configuration details like the version numbers, directory/folder path of various code and config files etc. MAVEN refers to this POM files for instruction to execute the task

MAVEN helps in

  • Generating source code
  • Generating documentation for source code
  • Compiling and testing the code
  • Packaging the compiled codes in to jar, war or ear files
  • Installing the packages in to local or central repository or servers


  • It is used in downloading dependencies to libraries or jar files. It is used for java-based projects.
  • It helped in getting right JAR files from a number of different packages with different versions.
  • All dependencies can be downloaded from mavenrepository website, no need to visit multiple sites.
  • It helps to build and deploy the project

Before MAVEN, there was ANT build tool, in ANT you had to manually write code or scripts to do each of these activities

MAVEN Architecture:

  • Local Repository
  • Remote Repository
  • Build System having MAVEN
  • Site

Build system connects to local repository and remote repository and also to the site

MAVEN Lifecycle:

  1. Clean Life Cycle
  2. Default Life Cycle
  3. Site Life Cycle
Clean Life Cycle
Pre Clean
Post Clean
Default Life cycle
Validate & Initialize
Generate Sources & Resources
Process Sources & Resources
Generate & Process Test Sources
Generate & Process Test Resources
Test Compile and Prepare Packages
Pre Integration Test
Integration Test
Post Integration Test
Verify, Install and Deploy
Site Life Cycle
Pre Site
Post Site
Site Deploy

Each MAVEN PHASE consists of a number of GOALS which are executed in an order to finally produce a jar file which gets used by others.

MAVEN Archetype can be used to generate web application. Application that use Spring and Struts

Creating a spring framework spring.jar

  1. Convert, compile it and create New_App.class
  2. Compile and create an NewAppTest.class
  3. Run unit test in NewAppTest.class
  4. If unit test fails fix the code, compile and do unit test again
  5. Combine all these class files to a jar file
  6. Earlier ANT script was doing step 1 to 5
  7. The bigger and complex is the code base, more the lines of code required in ANT and it can go up to hundreds of lines of code.

MAVEN defines Defaults with some convention.

The Defaults are:

  1. Create source folder /src
  2. Source files should be in /src/main/java
  3. Test files should be in /src/test/java
  4. Examples: /src/main/java/New_App.class, /src/test/java/NewAppTest.class
  5.  Pom.xml is in root folder /pom.xml

When we compile the code in maven with command: $mvn compile

It will create a new folder /target which will have sub folders:



To do test compile

$mvn test-compile It will create a new folder /target/test-classes/NewAppTest.class