In Maven, a Build Profile is a way to customize the build process for different environments, configurations, or deployment targets. Profiles allow you to specify certain build settings (like dependencies, plugins, properties, and goals) that should be used only in specific conditions — for example, development, testing, or production environments.
Why Use Build Profiles?
You might want to:
Use different databases for dev and prod
Deploy to different servers based on environment
Include/exclude certain modules
Set environment-specific properties (example: API keys, credentials, etc.)
Where Are Profiles Defined?
- In
pom.xmlfile — most common place - In
~/.m2/settings.xml— for user-specific configuration - From command line — when triggering a build
pom.xml
<project> ... <profiles> <profile> <id>dev</id> <properties> <env.name>Development Environment</env.name> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>prod</id> <properties> <env.name>Production Environment</env.name> </properties> </profile> </profiles> </project>
${env.name} anywhere in your pom.xml.Activating Profiles
- From Command Line:
mvn clean install -Pdev mvn clean install -Pprod
<activation> <property> <name>env</name> <value>prod</value> </property> </activation>
- You can also activate profiles based on:
Operating System
JDK version
Presence of a file or environment variable
<profiles> <profile> <id>qa</id> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </profile> </profiles>
mvn clean install -Pqa