Build Lifecycle Management
About
Build Lifecycle Management Plugins control the different phases of the Maven build lifecycle—such as compilation, testing, packaging, deployment, and installation. These plugins ensure that Maven can consistently build, test, and distribute projects by handling specific tasks at different lifecycle stages.
Maven defines three default lifecycles:
Clean – Removes previous build artifacts.
Default – Handles compilation, testing, packaging, and deployment.
Site – Generates project documentation.
Each lifecycle consists of phases, and various plugins execute specific goals within these phases.
How Plugins Fit into the Maven Build Lifecycle?
Each plugin executes specific goals, and these goals are bound to phases in the Maven build lifecycle.
For example:
compile
→ maven-compiler-plugin (compile
)test
→ maven-surefire-plugin (test
)package
→ maven-jar-plugin (jar
)verify
→ maven-failsafe-plugin (integration-test
)install
→ maven-install-plugin (install
)deploy
→ maven-deploy-plugin (deploy
)
1. Compilation & Code Processing Plugins
maven-compiler-plugin
maven-compiler-plugin
The maven-compiler-plugin
is responsible for compiling Java source files. It ensures that your project's source code is compiled using the correct Java version and compiler settings.
Syntax
This configuration compiles Java code using Java 17.
Configuration Options
source
Specifies the Java source version
1.6
target
Specifies the Java target bytecode version
1.6
compilerArgs
Additional compiler arguments
None
debug
Enables debug symbols
true
failOnError
Stops the build if compilation fails
true
verbose
Prints detailed compiler output
false
skip
Skips compilation phase
None
Compiler Arguments -Xlint:unchecked
enable warnings for unchecked operations.
None
Compiler Arguments -Xlint:deprecation
enable warnings for deprecated operations.
None
maven-resources-plugin
maven-resources-plugin
The maven-resources-plugin
is responsible for copying project resources (such as .properties
, .xml
, and .json
files) into the appropriate build directories.
Syntax
This plugin executes in the process-resources
phase to copy files from src/main/resources
to target/classes
.
Configuration Options
resources
Specifies the directories for resource files
src/main/resources
includes
Specifies which files to include
**/*
excludes
Specifies which files to exclude
None
filtering
Allows variables in resources (${}
placeholders)
false
maven-enforcer-plugin
maven-enforcer-plugin
The maven-enforcer-plugin
ensures that projects adhere to rules, such as enforcing Java versions, dependency versions, and best practices.
Syntax
Configuration Options
requireJavaVersion
Ensures a minimum Java version
requireMavenVersion
Ensures a minimum Maven version
requireOS
Restricts build execution to specific OS
bannedDependencies
Blocks unwanted dependencies
bannedPlugins
Blocks unwanted plugins
2. Testing Plugins
maven-surefire-plugin
maven-surefire-plugin
The maven-surefire-plugin
runs unit tests during the test
phase of the Maven lifecycle. It executes JUnit, TestNG, and other testing frameworks.
Syntax
By default, it runs tests from src/test/java
.
Configuration Options
includes
Specify which test classes to run
**/Test*.java
excludes
Specify which tests to exclude
None
test
Runs a specific test class
None
forkCount
Number of JVMs to run tests in parallel
1
parallel
Enables parallel execution (methods
, classes
, both
)
None
skipTests
Skips all tests
false
failIfNoTests
Fails the build if no tests are found
true
maven-failsafe-plugin
maven-failsafe-plugin
The maven-failsafe-plugin
is designed for integration tests (ITs) and runs tests after the application is built and deployed.
Syntax
Failsafe ensures that even if an integration test fails, Maven doesn't stop the build immediately but allows post-build cleanup.
Configuration Options
includes
Specify test classes to run
**/IT*.java
excludes
Specify test classes to exclude
None
errorFailingTests
Set to false
to allow failures without stopping the build
true
skipITs
Skip integration tests
false
parallel
Run tests in parallel
None
maven-verifier-plugin
maven-verifier-plugin
The maven-verifier-plugin
is useful for functional testing of Maven projects. It verifies that the output of a Maven build meets the expected criteria.
Syntax
3. Packaging Plugins
maven-jar-plugin
maven-jar-plugin
The maven-jar-plugin
is used to package Java applications into a JAR (Java ARchive) file. It includes compiled .class
files, META-INF
, and resource files.
Syntax
Configuration Options
finalName
Name of the generated JAR file
project.artifactId-version.jar
classifier
Adds a suffix (e.g., -sources
)
None
excludes
Files to exclude
None
includes
Files to include
None
maven-war-plugin
maven-war-plugin
The maven-war-plugin
is used to package web applications into a WAR (Web Application Archive) for deployment on Java web servers.
Syntax
Configuration Options
failOnMissingWebXml
Whether to fail if web.xml
is missing
true
warName
Name of the WAR file
project.artifactId-version.war
outputDirectory
Where to place the WAR file
target/
maven-ear-plugin
maven-ear-plugin
The maven-ear-plugin
is used to create EAR (Enterprise Archive) files, which bundle multiple Java EE components (JARs and WARs).
Syntax
Configuration Options
defaultJavaBundleDir
Directory for JAR modules
lib/
failOnMissingApplicationXml
Fail if application.xml
is missing
true
generateApplicationXml
Generate application.xml
automatically
true
maven-assembly-plugin
maven-assembly-plugin
The maven-assembly-plugin
allows custom packaging formats such as ZIP, TAR, TAR.GZ, and self-contained archives.
Syntax
Configuration Options
descriptorRef
Predefined package types (jar-with-dependencies
, etc.)
None
finalName
Name of the output archive
project.artifactId-version
formats
Output formats (zip
, tar.gz
, etc.)
zip
maven-shade-plugin
maven-shade-plugin
The maven-shade-plugin
is used to create a fat JAR (Uber JAR) that includes all dependencies.
Syntax
Configuration Options
finalName
Name of the output JAR
project.artifactId-version.jar
shadedArtifactAttached
Attach shaded JAR to build
false
4. Deployment & Installation Plugins
maven-install-plugin
maven-install-plugin
The maven-install-plugin
is used to install project artifacts (JAR, WAR, EAR, etc.) into the local repository (~/.m2/repository
). This allows other projects on the same system to reference them.
Syntax
Configuration Options
skip
Skip the installation step
false
repositoryLayout
Define repository structure
default
maven-deploy-plugin
maven-deploy-plugin
The maven-deploy-plugin
is used to deploy project artifacts to a remote repository (e.g., Nexus, Artifactory, or Maven Central) for sharing across teams or organizations.
Syntax
Configuration Options
url
The repository URL for deployment
None
(Must be provided)
repositoryId
The ID of the target repository
None
altDeploymentRepository
Alternative repository specification
None
wagon-maven-plugin
wagon-maven-plugin
The wagon-maven-plugin
provides FTP, SCP, HTTP, or custom transport mechanisms for deploying artifacts.
Syntax
Configuration Options
url
Remote location URL
Required
fromFile
Local file to upload
Required
toFile
Remote destination file
Required
maven-scm-plugin
maven-scm-plugin
The maven-scm-plugin
provides integration with Git, SVN, Mercurial, CVS, and other SCM tools for tagging and releasing.
Syntax
Configuration Options
connectionUrl
SCM repository URL
Required
developerConnectionUrl
SCM developer URL
Required
tagBase
Base tag URL
Optional
maven-release-plugin
maven-release-plugin
The maven-release-plugin
automates the release process, including versioning, tagging, and deployment.
Syntax
Configuration Options
tagNameFormat
Format for tags
project.artifactId-version
releaseProfiles
Additional Maven profiles to use
None
5. Clean & Site Plugins
maven-clean-plugin
The maven-clean-plugin
is responsible for removing the target/
directory created during the build. This ensures that stale or obsolete files don’t affect the next build process.
Deletes all files generated by the previous build in the
target/
directory.
Syntax
Configuration Options
filesets
Allows you to specify additional files/folders to delete
None
excludeDefaultDirectories
If true
, does not delete the default target/
dir
false
maven-site-plugin
maven-site-plugin
The maven-site-plugin
is used to generate a complete website for your project using metadata from the pom.xml
and additional documentation resources (Markdown, APT, etc.).
Generates HTML pages for project reports, Javadoc, changelogs, dependency reports, etc.
Use
This creates the site in target/site/index.html
.
Syntax
Configuration Options
reportPlugins
Specifies which reporting plugins to include
Default reports
outputDirectory
Directory where site files will be generated
target/site
inputEncoding
File encoding
UTF-8
Last updated
Was this helpful?