Maven - Maven Build Profiles - maven tutorial



maven tutorial tags : apache maven , maven repository , maven central

How to Build Profile in Maven ?

  • A Build profile is a set of configuration values which can be used to set or override default values of Maven build.
  • Using a build profile, you can customize build for different environments such as Production v/s Development environments.
  • Profiles are specified in pom.xml file using its activeProfiles / profiles elements and are triggered in variety of ways.
  • Profiles modify the POM at build time, and are used to give parameters different target environments.
  • For example, the path of the database server in the development, testing, and production environments.

Types of Build Profile:

  • Build profiles are majorly of three types:
Type Where it is defined
Per Project Defined in the project POM file, pom.xml
Per User Defined in Maven settings xml file (%USER_HOME%/.m2/settings.xml)
Global Defined in Maven global settings xml file (%M2_HOME%/conf/settings.xml)

Profile Activation:

  • A Maven Build Profile can be activated in various ways.
  • Explicitly using command console input.
  • Through maven settings.
  • Based on environment variables (User/System variables).
  • OS Settings (for example, Windows family).
  • Present/missing files.

Profile Activation Examples:

  • Let us assume following directory structure of your project:
  • Now, under src/main/resources there are three environment specific files:
File Name Description
env.properties default configuration used if no profile is mentioned.
env.test.properties test configuration when test profile is used.
env.prod.properties production configuration when prod profile is used.

Explicit Profile Activation:

  • This will allow us to echo text messages for different profiles.
  • We will be using pom.xml to define different profiles and will activate profile at command console using maven command.
  • Assume, we've created following pom.xml in C:\MVN\project folder.
 Maven Build

Learn Maven Tutorial - Maven Build - Maven Example

maven tutorial tags : apache maven , maven repository , maven central

Sample Code

<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
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.companyname.projectgroup</groupId>
   <artifactId>project</artifactId>
   <version>1.0</version>
   <profiles>
      <profile>
      <id>test</id>
      <build>
      <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.1</version>
            <executions>
               <execution>
                  <phase>test</phase>
                  <goals>
                     <goal>run</goal>
                  </goals>
                  <configuration>
                  <tasks>
                     <echo>Using env.test.properties</echo>
            <copy file="src/main/resources/env.test.properties" tofile
		    ="${project.build.outputDirectory}/env.properties"/>
                  </tasks>
                  </configuration>
               </execution>
            </executions>
         </plugin>
      </plugins>
      </build>
      </profile>
   </profiles>
   <dependencies>
      <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>3.8.1</version>
         <scope>test</scope>
      </dependency>
   </dependencies>
</project>
  • And assume, we've created following properties file in C:\MVN\project\src\resources folder.

env.properties

environment=debug

env.test.properties

environment=test

env.prod.properties

environment=prod
  • Now open command console, go to the folder containing pom.
  • xml and execute the following mvn command.
  • Pass the profile name as argument using -P option.
C:\MVN\project>mvn test -Ptest
  • Maven will start processing and show the output of test build profile.
maven tutorial tags : apache maven , maven repository , maven central

Output

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building project 1.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ project --
-
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] Copying 3 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ project ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ pr
oject ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\MVN\project\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ project
 ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ project ---
[INFO] Surefire report directory: C:\MVN\project\target\surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.companyname.bank.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.016 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO]
[INFO] --- maven-antrun-plugin:1.1:run (default) @ project ---
[INFO] Executing tasks
     [echo] Using env.test.properties
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.953 s
[INFO] Finished at: 2015-09-27T11:54:45+05:30
[INFO] Final Memory: 9M/247M
[INFO] ------------------------------------------------------------------------
  • Add another profile element to profiles element of pom.xml (copy existing profile element and paste it where profile elements ends).
  • Update id of this profile element from test to normal.
  • Update task section to echo env.properties and copy env.properties to target directory
  • Again repeat above three steps, update id to prod and task section for env.prod.properties
  • That's all. Now you've three build profiles ready (normal / test / prod).
  • Now open command console, go to the folder containing pom.xml and execute the following mvn commands. Pass the profile names as argument using -P option.
C:\MVN\project>mvn test -Pnormal
C:\MVN\project>mvn test -Pprod

Profile Activation via Maven Settings:

  • Open Maven settings.xml file available in %USER_HOME%/.m2 directory where %USER_HOME% represents user home directory.
  • If settings.xml file is not there then create a new one.
  • Add test profile as an active profile using activeProfiles node as shown below in example
maven tutorial tags : apache maven , maven repository , maven central

Sample Code

<settings 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
   http://maven.apache.org/xsd/settings-1.0.0.xsd">
   <mirrors>
      <mirror>
         <id>maven.dev.snaponglobal.com</id>
         <name>Internal Artifactory Maven repository</name>
         <url>http://repo1.maven.org/maven2/</url>
         <mirrorOf>*</mirrorOf>
      </mirror>
   </mirrors>
   <activeProfiles>
      <activeProfile>test</activeProfile>
   </activeProfiles>
</settings>
  • Now open command console, go to the folder containing pom.
  • xml and execute the following mvn command.
  • Do not pass the profile name using -P option.Maven will display result of test profile being an active profile.
C:\MVN\project>mvn test

Profile Activation via Environment Variables:

  • Now remove active profile from maven settings.
  • xml and update the test profile mentioned in pom.xml.
  • Add activation element to profile element as shown below.
  • The test profile will trigger when the system property "env" is specified with the value "test".
  • Create a environment variable "env" and set its value as "test".
<profile>
   <id>test</id>
   <activation>
      <property>
         <name>env</name>
         <value>test</value>
      </property>
   </activation>
</profile>
  • Let's open command console, go to the folder containing pom.xml and execute the following mvn command.
C:\MVN\project>mvn test

Profile Activation via Operating System

  • Activation element to include os detail as shown below. This test profile will trigger when the system is windows XP.
<profile>
   <id>test</id>
   <activation>
      <os>
         <name>Windows XP</name>
         <family>Windows</family>
         <arch>x86</arch>
         <version>5.1.2600</version>
      </os>
   </activation>
</profile>
  • Now open command console, go to the folder containing pom.xml and execute the following mvn commands.
  • Do not pass the profile name using -P option.Maven will display result of test profile being an active profile.
C:\MVN\project>mvn test
maven tutorial tags : apache maven , maven repository , maven central

Profile Activation via Present/Missing File

  • Now activation element to include os.
<profile>
   <id>test</id>
   <activation>
      <file>
         <missing>target/generated-sources/axistools/wsdl2java/
		 com/companyname/group</missing>
      </file>
   </activation>
</profile>
  • Now open command console, go to the folder containing pom.xml and execute the following mvn commands.
  • Do not pass the profile name using -P option.Maven will display result of test profile being an active profile.

Wikitechy provides an indepth knowledge on the below maven tutorial items such as maven download , maven install , maven goals , maven build , maven commands , maven plugin , maven search , maven eclipse , maven deploy , eclipse maven , maven junit , maven java , hibernate maven , maven project , java maven , maven version , maven proxy , maven 2 , maven pom , maven eclipse plugin , maven java version , maven properties , maven install windows , how to create maven project in eclipse , eclipse maven plugin , maven dependencies , what is maven in java , maven apache , maven project structure , how to install maven in eclipse

Related Searches to Maven Build Profiles