Runtime and build tooling

Apache Maven

Apache Maven is a build and project management tool that describes Java artifacts, dependencies, plugins, and lifecycle phases through a Project Object Model.

What is Apache Maven and what does it do?

Apache Maven is a build and project management tool used primarily in the Java ecosystem. A Project Object Model, stored in pom.xml, identifies the project and declares dependencies, plugins, build settings, and relationships to other POM files.

Maven favors convention. Familiar source directories and lifecycle phases allow different projects to communicate their basic build shape with less custom scripting. Repositories provide artifacts and metadata, while plugins perform the concrete work attached to lifecycle phases.

Coordinates give an artifact an identity

A Maven artifact is commonly identified by three values:

  • groupId describes the organization or namespace.
  • artifactId names the artifact within that group.
  • version identifies a particular release or development state.

Dependencies use the same coordinate model. Maven resolves their metadata and files from configured repositories, then builds a dependency graph. Version selection, repository trust, and update policy remain project decisions.

The lifecycle turns source into an artifact

The default lifecycle provides an ordered vocabulary that includes phases such as validate, compile, test, package, verify, install, and deploy. Running a later phase also runs the earlier phases required to reach it.

POM -> selected phase -> bound plugin goals -> tests and checks -> artifact

A phase is a position in the lifecycle, while a plugin goal is the task that performs work. Keeping that distinction clear makes build behavior easier to inspect when a plugin is added or a phase produces an unexpected result.

A minimal POM

This POM gives a small project valid coordinates and the required model version:

<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.0
                             https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>dev.myildirim</groupId>
  <artifactId>status-service</artifactId>
  <version>1.0.0</version>
</project>

Dependencies, plugins, compiler settings, and packaging can be added when the project actually needs them.

Convention reduces configuration, not decisions

Maven does not guarantee a reproducible or secure build by itself. Plugin versions, dependency versions, repositories, credentials, network access, and the Java toolchain must be controlled. Parent POMs can reduce repetition, but they can also hide inherited behavior.

The build remains understandable when effective configuration can be inspected, repository sources are trusted, and lifecycle customizations are kept explicit. Maven supplies a common vocabulary; the project still owns the policy behind it.