Maven is a build and project management tool built on two ideas: convention over configuration, and a declarative project model. A pom.xml describes what a project *is* — its coordinates, its dependencies, its packaging, its parent — rather than the steps to build it. Because every Maven project uses the same directory layout and the same lifecycle, `mvn verify` means the same thing in any repository, which is precisely why Maven became the default in enterprise Java: an engineer moving between teams does not have to learn a new build.
The execution model is the lifecycle. Three built-in lifecycles — default, clean and site — are ordered sequences of phases, and plugins bind goals to those phases. Running `mvn package` runs every phase up to package, in order, executing whatever goals are bound along the way. Nothing in Maven happens outside a plugin; the core is a small engine that resolves a project model and runs bound goals against it.
Dependency management is where most of Maven's value and most of its pain live. Dependencies are identified by groupId, artifactId and version, resolved transitively from repositories, and mediated by nearest-wins when versions conflict. Scopes control what reaches the compile classpath versus the test or runtime classpath. dependencyManagement and BOM imports pin versions across a multi-module reactor build so that a sixty-module project agrees with itself. Add profiles, resource filtering, settings.xml and a repository manager such as Nexus or Artifactory, and Maven becomes the artefact contract between development and everything downstream.
Why this skill matters now
Maven is not fashionable and it is not going anywhere. The volume of enterprise Java under active development is enormous — banking, insurance, telecom, retail, government — and the overwhelming majority of it builds with Maven. Spring Boot ships Maven support first-class, and every artefact repository, security scanner and SBOM generator in the Java ecosystem speaks Maven coordinates.
The reason teams need training is not that Maven is hard to start with; it is that Maven fails quietly at scale. A build that takes forty minutes, a dependency tree with three versions of the same library on the classpath, a release that cannot be reproduced because a version range resolved differently last Tuesday, a settings.xml with a plaintext password in it — these are the problems organisations actually pay to fix, and none of them are solved by knowing what `mvn clean install` does.
Supply chain pressure has raised the stakes. Every transitive dependency is now an audit item, and reproducible builds, pinned versions, dependency provenance and vulnerability scanning are becoming procurement requirements rather than engineering preferences. The engineer who can explain exactly why a given jar is on the classpath, and change that answer safely, has become considerably more valuable than they were five years ago.