# Apache Maven — Convention-Based Build System for Java Projects > A build automation and project management tool for Java and JVM languages, using a declarative POM model to manage dependencies, compilation, testing, and packaging. ## Install Save in your project root: # Apache Maven — Convention-Based Build System for Java Projects ## Quick Use ```bash # Install sudo apt install maven # Debian/Ubuntu brew install maven # macOS # Create a new project from archetype mvn archetype:generate -DgroupId=com.example -DartifactId=myapp -DarchetypeArtifactId=maven-archetype-quickstart # Build and test cd myapp && mvn clean package ``` ## Introduction Apache Maven is a build automation tool centered on the concept of a Project Object Model (POM). It provides a standardized project structure, declarative dependency management, and a plugin-based lifecycle that handles compilation, testing, packaging, and deployment for Java and other JVM languages. ## What Apache Maven Does - Manages project dependencies by resolving and downloading artifacts from Maven Central - Provides a standard build lifecycle: validate, compile, test, package, verify, install, deploy - Enforces convention-over-configuration with a default project directory layout - Generates project documentation, reports, and site pages - Supports multi-module projects with parent POM inheritance ## Architecture Overview Maven reads a pom.xml file that declares the project coordinates (groupId, artifactId, version), dependencies, and plugin configuration. The build lifecycle consists of phases, each bound to plugin goals. The dependency resolver fetches transitive dependencies from remote repositories (Maven Central by default) and caches them in ~/.m2/repository. Plugins extend every phase from compilation to deployment. ## Self-Hosting & Configuration - Install via package manager or download the binary from maven.apache.org - Configure global settings in ~/.m2/settings.xml for repository mirrors and credentials - Define project structure in pom.xml with dependencies, plugins, and profiles - Use profiles to vary builds per environment (dev, staging, production) - Host a private repository with Nexus or Artifactory for internal artifact management ## Key Features - Transitive dependency resolution with automatic conflict mediation - Convention-over-configuration reduces boilerplate in project setup - Rich plugin ecosystem: compiler, surefire (testing), shade (fat JARs), and hundreds more - Multi-module reactor builds compile related projects in dependency order - Reproducible builds with dependency locking and verified checksums ## Comparison with Similar Tools - **Gradle** — Groovy/Kotlin DSL, faster incremental builds; steeper learning curve - **Bazel** — Google build system for polyglot monorepos; more complex setup - **sbt** — Scala-centric build tool; less mainstream outside the Scala ecosystem - **Ant** — procedural XML builds; no dependency management or conventions built in ## FAQ **Q: Is Maven only for Java?** A: Maven primarily targets Java, but plugins exist for Kotlin, Scala, Groovy, and other JVM languages. **Q: How does Maven Central work?** A: Maven Central is a public repository hosting millions of artifacts. Maven downloads declared dependencies and their transitive dependencies from it automatically. **Q: Can Maven build Docker images?** A: Yes, via plugins like jib-maven-plugin or dockerfile-maven-plugin that integrate container image builds into the lifecycle. **Q: How do I speed up Maven builds?** A: Use `mvn -T 1C` for parallel module builds, enable the Maven daemon (mvnd), and skip tests during development with `-DskipTests`. ## Sources - https://github.com/apache/maven - https://maven.apache.org/guides/ --- Source: https://tokrepo.com/en/workflows/asset-74d33aec Author: AI Open Source