Maven Overview

Maven is primarily a build automation tool used for building mostly Java projects and is maintained by the Apache Software Foundation. Maven, a Yiddish word meaning accumulator of knowledge, was originally started in Jakarta Turbine project.

Maven’s objectives (as per maven.apache.org) are:

  1. Making the build process easy

  2. Providing a uniform build system

  3. Providing quality project information

  4. Providing guidelines for best practices development

  5. Allowing transparent migration to new features

 

Apart from building projects, maven also provides lot of additional functionality. Important functionalities of Maven are:

  1. Build automation tool

  2. Manages dependencies

  3. Has a powerful repository system

  4. Has an extensible plugin framework.

  5. Implements best practices and follows convention over configuration approach.

Maven manages a project's build, reporting and even documentation through the project object model (POM), usually defined as pom.xml. POM is the object based representation of a build and contains project metadata (including the project coordinates such as group, artefact and version), dependencies, build settings etc. POM inheritance is also supported.

With Maven dependency management, you need to declare only your primary dependencies with their scope: compile time vs. runtime. Maven will then automatically include the dependencies needed by your dependencies and their dependencies (transitive dependencies).

Dependencies are downloaded from a maven remote repository and cached in a local repository.  Maven first checks local repo and then remote repo. Default remote repository is called Maven Central Repository, but we may create private repositories. Maven repositories can be used by other tools such as Ivy and Gradle.

Maven lifecycle consists of various phases such as compile, test, package, deploy, install etc. defined by plugins (e.g. compiler plugin).  Calling a phase executes all phases before it in the lifecycle. Maven goals are the tasks we define within each phase/plugin like packaging Jar, compile etc. Plugins are also dependencies and can be used to extend Maven functionalities.

Maven uses convention over configuration approach for the build procedure. Maven’s conventions follows the industry best practices with most reasonable defaults. Maven also suggests guidelines on how to layout your project’s directory structure. Understanding the defaults will help understand any Maven project easily.

Tags: 

Quick Notes Finder Tags

Activities (1) advanced java (1) agile (3) App Servers (6) archived notes (2) Arrays (1) Best Practices (12) Best Practices (Design) (3) Best Practices (Java) (7) Best Practices (Java EE) (1) BigData (3) Chars & Encodings (6) coding problems (2) Collections (15) contests (3) Core Java (All) (55) course plan (2) Database (12) Design patterns (8) dev tools (3) downloads (2) eclipse (9) Essentials (1) examples (14) Exception (1) Exceptions (4) Exercise (1) exercises (6) Getting Started (18) Groovy (2) hadoop (4) hibernate (77) hibernate interview questions (6) History (1) Hot book (5) http monitoring (2) Inheritance (4) intellij (1) java 8 notes (4) Java 9 (1) Java Concepts (7) Java Core (9) java ee exercises (1) java ee interview questions (2) Java Elements (16) Java Environment (1) Java Features (4) java interview points (4) java interview questions (4) javajee initiatives (1) javajee thoughts (3) Java Performance (6) Java Programmer 1 (11) Java Programmer 2 (7) Javascript Frameworks (1) Java SE Professional (1) JPA 1 - Module (6) JPA 1 - Modules (1) JSP (1) Legacy Java (1) linked list (3) maven (1) Multithreading (16) NFR (1) No SQL (1) Object Oriented (9) OCPJP (4) OCPWCD (1) OOAD (3) Operators (4) Overloading (2) Overriding (2) Overviews (1) policies (1) programming (1) Quartz Scheduler (1) Quizzes (17) RabbitMQ (1) references (2) restful web service (3) Searching (1) security (10) Servlets (8) Servlets and JSP (31) Site Usage Guidelines (1) Sorting (1) source code management (1) spring (4) spring boot (3) Spring Examples (1) Spring Features (1) spring jpa (1) Stack (1) Streams & IO (3) Strings (11) SW Developer Tools (2) testing (1) troubleshooting (1) user interface (1) vxml (8) web services (1) Web Technologies (1) Web Technology Books (1) youtube (1)