Introduction to Apache Maven | A build automation tool for Java projects

29 Jun, 2022
Maven is a powerful project management tool that is based on POM (project object model). It is used for projects build, dependency and documentation. It simplifies the build process like ANT. But it is too much advanced than ANT.In short terms we can tell maven is a tool that can be used for building and managing any Java-based project. maven make the day-to-day work of Java developers easier and generally help with the comprehension of any Java-based project.
Maven does a lot of helpful task like
We can easily build a project using maven.We can add jars and other dependencies of the project easily using the help of maven.Maven provides project information (log document, dependency list, unit test reports etc.)Maven is very helpful for a project while updating central repository of JARs and other dependencies.With the help of Maven we can build any number of projects into output types like the JAR, WAR etc without doing any scripting.Using maven we can easily integrate our project with source control system (such as Subversion or Git).
We can easily build a project using maven.
We can add jars and other dependencies of the project easily using the help of maven.
Maven provides project information (log document, dependency list, unit test reports etc.)
Maven is very helpful for a project while updating central repository of JARs and other dependencies.
With the help of Maven we can build any number of projects into output types like the JAR, WAR etc without doing any scripting.
Using maven we can easily integrate our project with source control system (such as Subversion or Git).
Core Concepts of Maven:
POM Files: Project Object Model(POM) Files are XML file that contains information related to the project and configuration information such as dependencies, source directory, plugin, goals etc. used by Maven to build the project. When you should execute a maven command you give maven a POM file to execute the commands. Maven reads pom.xml file to accomplish its configuration and operations.Dependencies and Repositories: Dependencies are external Java libraries required for Project and repositories are directories of packaged JAR files. The local repository is just a directory on your machine hard drive. If the dependencies are not found in the local Maven repository, Maven downloads them from a central Maven repository and puts them in your local repository.Build Life Cycles, Phases and Goals: A build life cycle consists of a sequence of build phases, and each build phase consists of a sequence of goals. Maven command is the name of a build lifecycle, phase or goal. If a lifecycle is requested executed by giving maven command, all build phases in that life cycle are executed also. If a build phase is requested executed, all build phases before it in the defined sequence are executed too.Build Profiles: Build profiles a set of configuration values which allows you to build your project using different configurations. For example, you may need to build your project for your local computer, for development and test. To enable different builds you can add different build profiles to your POM files using its profiles elements and are triggered in the variety of ways.Build Plugins: Build plugins are used to perform specific goal. you can add a plugin to the POM file. Maven has some standard plugins you can use, and you can also implement your own in Java.
POM Files: Project Object Model(POM) Files are XML file that contains information related to the project and configuration information such as dependencies, source directory, plugin, goals etc. used by Maven to build the project. When you should execute a maven command you give maven a POM file to execute the commands. Maven reads pom.xml file to accomplish its configuration and operations.
Dependencies and Repositories: Dependencies are external Java libraries required for Project and repositories are directories of packaged JAR files. The local repository is just a directory on your machine hard drive. If the dependencies are not found in the local Maven repository, Maven downloads them from a central Maven repository and puts them in your local repository.
Build Life Cycles, Phases and Goals: A build life cycle consists of a sequence of build phases, and each build phase consists of a sequence of goals. Maven command is the name of a build lifecycle, phase or goal. If a lifecycle is requested executed by giving maven command, all build phases in that life cycle are executed also. If a build phase is requested executed, all build phases before it in the defined sequence are executed too.
Build Profiles: Build profiles a set of configuration values which allows you to build your project using different configurations. For example, you may need to build your project for your local computer, for development and test. To enable different builds you can add different build profiles to your POM files using its profiles elements and are triggered in the variety of ways.
Build Plugins: Build plugins are used to perform specific goal. you can add a plugin to the POM file. Maven has some standard plugins you can use, and you can also implement your own in Java.
The installation of Maven includes following Steps:
Verify that your system has java installed or not. if not then install java (Link for Java Installation )Check java Environmental variable is set or not. if not then set java environmental variable.(link to install java and setting environmental variable)Download maven (Link)Unpack your maven zip at any place in your system.Add the bin directory of the created directory apache-maven-3.5.3(it depends upon your installation version) to the PATH environment variable and system variable.open cmd and run mvn -v command. If it print following lines of code then installation completed.
Apache Maven 3.5.3 (3383c37e1f9e9b3bc3df5050c29c8aff9f295297; 2018-02-25T01:19:05+05:30)
Maven home: C:\apache-maven-3.5.3\bin\..
Java version: 1.8.0_151, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_151\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"


Verify that your system has java installed or not. if not then install java (Link for Java Installation )
Check java Environmental variable is set or not. if not then set java environmental variable.(link to install java and setting environmental variable)
Download maven (Link)
Unpack your maven zip at any place in your system.
Add the bin directory of the created directory apache-maven-3.5.3(it depends upon your installation version) to the PATH environment variable and system variable.
open cmd and run mvn -v command. If it print following lines of code then installation completed.

Apache Maven 3.5.3 (3383c37e1f9e9b3bc3df5050c29c8aff9f295297; 2018-02-25T01:19:05+05:30)
Maven home: C:\apache-maven-3.5.3\bin\..
Java version: 1.8.0_151, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_151\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"


POM means Project Object Model is key to operate Maven. Maven reads pom.xml file to accomplish its configuration and operations. It is an XML file that contains information related to the project and configuration information such as dependencies, source directory, plugin, goals etc. used by Maven to build the project.
The sample of 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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">                   <modelVersion>4.0.0</modelVersion>         <groupId> com.project.loggerapi </groupId>         <artifactId>LoggerApi</artifactId>         <version>0.0.1-SNAPSHOT</version>                  <!-- Add typical dependencies for a web application -->       <dependencies>               <dependency>                       <groupId>org.apache.logging.log4j</groupId>                       <artifactId>log4j-api</artifactId>                       <version>2.11.0</version>                 </dependency>       </dependencies>        </project>
Elements used for Creating pom.xml file
project- It is the root element of the pom.xml file.modelVersion- modelversion means what version of the POM model you are using. Use version 4.0.0 for maven 2 and maven 3.groupId- groupId means the id for the project group. It is unique and Most often you will use a group ID which is similar to the root Java package name of the project like we used the groupId com.project.loggerapi.artifactId- artifactId used to give name of the project you are building.in our example name of our project is LoggerApi.version- version element contains the version number of the project. If your project has been released in different versions then it is useful to give version of your project.
project- It is the root element of the pom.xml file.
modelVersion- modelversion means what version of the POM model you are using. Use version 4.0.0 for maven 2 and maven 3.
groupId- groupId means the id for the project group. It is unique and Most often you will use a group ID which is similar to the root Java package name of the project like we used the groupId com.project.loggerapi.
artifactId- artifactId used to give name of the project you are building.in our example name of our project is LoggerApi.
version- version element contains the version number of the project. If your project has been released in different versions then it is useful to give version of your project.
Other Elements of Pom.xml file
dependencies- dependencies element is used to defines a list of dependency of project.dependency- dependency defines a dependency and used inside dependencies tag. Each dependency is described by its groupId, artifactId and version.name- this element is used to give name to our maven project.scope- this element used to define scope for this maven project that can be compile, runtime, test, provided system etc.packaging- packaging element is used to packaging our project to output types like JAR, WAR etc.
dependencies- dependencies element is used to defines a list of dependency of project.
dependency- dependency defines a dependency and used inside dependencies tag. Each dependency is described by its groupId, artifactId and version.
name- this element is used to give name to our maven project.
scope- this element used to define scope for this maven project that can be compile, runtime, test, provided system etc.
packaging- packaging element is used to packaging our project to output types like JAR, WAR etc.
Maven repositories are directories of packaged JAR files with some metadata. The metadata are POM files related to the projects each packaged JAR file belongs to, including what external dependencies each packaged JAR has. This metadata enables Maven to download dependencies of your dependencies recursively until all dependencies are download and put into your local machine.
Maven has three types of repository :
Local repositoryCentral repositoryRemote repository
Local repository
Central repository
Remote repository
Maven searches for dependencies in this repositories. First maven searches in Local repository then Central repository then Remote repository if Remote repository specified in the POM.
Local repository- A local repository is a directory on the machine of developer. This repository contains all the dependencies Maven downloads. Maven only needs to download the dependencies once, even if multiple projects depends on them (e.g. ODBC).By default, maven local repository is user_home/m2 directory.example – C:\Users\asingh\.m2Central repository- The central Maven repository is created Maven community. Maven looks in this central repository for any dependencies needed but not found in your local repository. Maven then downloads these dependencies into your local repository. You can view central repository by this link.Remote repository- remote repository is a repository on a web server from which Maven can download dependencies.it often used for hosting projects internal to organization. Maven then downloads these dependencies into your local repository.Practical Application Of MavenWhen working on a java project and that project contains a lot of dependencies, builds, requirement, then handling all those things manually is very difficult and tiresome. Thus using some tool which can do these works is very helpful.Maven is such a build management tool which can do all the things like adding dependencies, managing the classpath to project, generating war and jar file automatically and many other things.Pros and Cons of using MavenPros:Maven can add all the dependencies required for the project automatically by reading pom file.One can easily build their project to jar, war etc. as per their requirements using Maven.Maven makes easy to start project in different environments and one doesn’t needs to handle the dependencies injection, builds, processing, etc.Adding a new dependency is very easy. One has to just write the dependency code in pom file.Cons:Maven needs the maven installation in the system for working and maven plugin for the ide.If the maven code for an existing dependency is not available, then one cannot add that dependency using maven.When should someone use Maven?One can use the Maven Build Tool in the following condition:When there are a lot of dependencies for the project. Then it is easy to handle those dependencies using maven.When dependency version update frequently. Then one has to only update version ID in pom file to update dependencies.Continuous builds, integration, and testing can be easily handled by using maven.When one needs an easy way to Generating documentation from the source code, Compiling source code, Packaging compiled code into JAR files or ZIP files.Reference- Apache Maven DocumentationMy Personal Notes
arrow_drop_upSave
Local repository- A local repository is a directory on the machine of developer. This repository contains all the dependencies Maven downloads. Maven only needs to download the dependencies once, even if multiple projects depends on them (e.g. ODBC).By default, maven local repository is user_home/m2 directory.example – C:\Users\asingh\.m2
Central repository- The central Maven repository is created Maven community. Maven looks in this central repository for any dependencies needed but not found in your local repository. Maven then downloads these dependencies into your local repository. You can view central repository by this link.
Remote repository- remote repository is a repository on a web server from which Maven can download dependencies.it often used for hosting projects internal to organization. Maven then downloads these dependencies into your local repository.
Practical Application Of MavenWhen working on a java project and that project contains a lot of dependencies, builds, requirement, then handling all those things manually is very difficult and tiresome. Thus using some tool which can do these works is very helpful.Maven is such a build management tool which can do all the things like adding dependencies, managing the classpath to project, generating war and jar file automatically and many other things.Pros and Cons of using MavenPros:Maven can add all the dependencies required for the project automatically by reading pom file.One can easily build their project to jar, war etc. as per their requirements using Maven.Maven makes easy to start project in different environments and one doesn’t needs to handle the dependencies injection, builds, processing, etc.Adding a new dependency is very easy. One has to just write the dependency code in pom file.Cons:Maven needs the maven installation in the system for working and maven plugin for the ide.If the maven code for an existing dependency is not available, then one cannot add that dependency using maven.When should someone use Maven?One can use the Maven Build Tool in the following condition:When there are a lot of dependencies for the project. Then it is easy to handle those dependencies using maven.When dependency version update frequently. Then one has to only update version ID in pom file to update dependencies.Continuous builds, integration, and testing can be easily handled by using maven.When one needs an easy way to Generating documentation from the source code, Compiling source code, Packaging compiled code into JAR files or ZIP files.Reference- Apache Maven DocumentationMy Personal Notes
arrow_drop_upSave
When working on a java project and that project contains a lot of dependencies, builds, requirement, then handling all those things manually is very difficult and tiresome. Thus using some tool which can do these works is very helpful.Maven is such a build management tool which can do all the things like adding dependencies, managing the classpath to project, generating war and jar file automatically and many other things.
Pros:
Maven can add all the dependencies required for the project automatically by reading pom file.One can easily build their project to jar, war etc. as per their requirements using Maven.Maven makes easy to start project in different environments and one doesn’t needs to handle the dependencies injection, builds, processing, etc.Adding a new dependency is very easy. One has to just write the dependency code in pom file.
Maven can add all the dependencies required for the project automatically by reading pom file.
One can easily build their project to jar, war etc. as per their requirements using Maven.
Maven makes easy to start project in different environments and one doesn’t needs to handle the dependencies injection, builds, processing, etc.
Adding a new dependency is very easy. One has to just write the dependency code in pom file.
Cons:
Maven needs the maven installation in the system for working and maven plugin for the ide.If the maven code for an existing dependency is not available, then one cannot add that dependency using maven.
Maven needs the maven installation in the system for working and maven plugin for the ide.
If the maven code for an existing dependency is not available, then one cannot add that dependency using maven.
One can use the Maven Build Tool in the following condition:
When there are a lot of dependencies for the project. Then it is easy to handle those dependencies using maven.When dependency version update frequently. Then one has to only update version ID in pom file to update dependencies.Continuous builds, integration, and testing can be easily handled by using maven.When one needs an easy way to Generating documentation from the source code, Compiling source code, Packaging compiled code into JAR files or ZIP files.
When there are a lot of dependencies for the project. Then it is easy to handle those dependencies using maven.
When dependency version update frequently. Then one has to only update version ID in pom file to update dependencies.
Continuous builds, integration, and testing can be easily handled by using maven.
When one needs an easy way to Generating documentation from the source code, Compiling source code, Packaging compiled code into JAR files or ZIP files.
Reference- Apache Maven Documentation
Akanksha_Rai
nidhi_biet
Web Technologies
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Difference between var, let and const keywords in JavaScript
How to fetch data from an API in ReactJS ?
Differences between Functional Components and Class Components in React
Remove elements from a JavaScript Array
REST API (Introduction)
Node.js fs.readFileSync() Method
How to set the default value for an HTML <select> element ?
How to create footer to stay at the bottom of a Web page?
How to set input type date in dd-mm-yyyy format using HTML ?
Difference Between PUT and PATCH Request