Maven profiles - over-riding build attributes

The convenience that can be achieved is
  • There are text or XML property files which are used at deployment to set start-up or run-time properties.
  • Use Maven build profiles to affect to values of these properties.
  • Spring context values can then use these property names as variables, as post-compilation means to define bean properties. 

In the pom.xml, is the profile section declaring the
<profiles>
  <profile>
    <id>dev</id>
    <properties>
      <durian.maxUsers>5</durian.maxUsers>
    </properties>
  </profile>
</profiles>
when a profile is specified in a maven build, the base declaration of the property is over-ridden with the one from the profile.
<properties>
  <durian.maxUsers>8</durian.maxUsers>
</properties>
Compare this result by looking back at the previous page on variable substitution. In the file
/durian/appbase/properties/a.properties
the variable ${durian.maxUsers}
maxUsers = ${durian.maxUsers}
will result in
maxUsers = 5
in the file
/durian/target/durian/WEB-INF/classes/properties/a.properties
due to the over-ride.

In Maven 3.0, profiles can be specified in three places.
  • Per Project
    Defined in the POM itself (pom.xml), as exemplified above.
  • Per User
    Defined in the Maven-settings(%USER_HOME%/.m2/settings.xml
  • Shared
    Defined in the global Maven-settings (%M2_HOME%/conf/settings.xml)

As documented in
http://books.sonatype.com/mvnref-book/reference/profiles-sect-maven-profiles.html
the following are elements that can be included in a pom build profile. Id is mandatory, needless to say.
<project>
  .....
  <profiles>
    .....
    <profile>
      <id>...</id>
      <build>
        <defaultGoal>...</defaultGoal>
        <finalName>...</finalName>
        <resources>...</resources>
        <testResources>...</testResources>
        <plugins>...</plugins>
      </build>
      <reporting>...</reporting>
      <modules>...</modules>
      <dependencies>...</dependencies>
      <dependencyManagement>...</dependencyManagement>
      <distributionManagement>...</distributionManagement>
      <repositories>...</repositories>
      <pluginRepositories>...</pluginRepositories>
      <properties>...</properties>
    </profile>
    .....
  </profiles>
  .....
</project>

When a profile is defined in a settings rather than a pom file, the following are elements that can be included in a pom build profile.  Id is mandatory.
<settings>
  .....
  <profiles>
    <profile>
      <id>...</id>
      <repositories>...</repositories>
      <pluginRepositories>...</pluginRepositories>
      <properties>...</properties>
    </profile>
  </profiles>
  ......
</settings>

No comments:

Post a Comment