Image via Wikipedia
Maven profiles enable your pom to build your project with different build options .
Here I tried to overwrite some default configuration files with profile specific configuration
how to use it
mvn package -Ddevelopment
copy src/main/conf/development/mysql.properties to target/classes/META-INF/mysql.properties
mvn package -Dproduction
copy src/main/conf/development/mysql.properties to target/classes/META-INF/mysql.properties
<profiles>
<profile>
<id>development</id>
<activation>
<property>
<name>development</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>process-resources</id>
<phase>process-resources</phase>
<configuration>
<tasks>
<taskdef name="native2ascii"
classname="org.apache.tools.ant.taskdefs.optional.Native2Ascii"
classpathref="maven.dependency.classpath">
<classpath>
<pathelement path="maven.dependency.classpath"/>
</classpath>
</taskdef>
<delete dir="${basedir}/target/classes"
includes="**/*.properties"/>
<native2ascii src="${basedir}/src/main/resources"
dest="${basedir}/target/classes"
includes="**/*.properties"
encoding="ISO-8859-9"/>
<copy file="${basedir}/src/main/conf/development/mysql.properties"
tofile="${basedir}/target/classes/META-INF/mysql.properties"
overwrite="true"/>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>production</id>
<activation>
<property>
<name>production</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>process-resources</id>
<phase>process-resources</phase>
<configuration>
<tasks>
<taskdef name="native2ascii"
classname="org.apache.tools.ant.taskdefs.optional.Native2Ascii"
classpathref="maven.dependency.classpath">
<classpath>
<pathelement path="maven.dependency.classpath"/>
</classpath>
</taskdef>
<delete dir="${basedir}/target/classes"
includes="**/*.properties"/>
<native2ascii src="${basedir}/src/main/resources"
dest="${basedir}/target/classes"
includes="**/*.properties"
encoding="ISO-8859-9"/>
<copy file="${basedir}/src/main/conf/production/mysql.properties"
tofile="${basedir}/target/classes/META-INF/mysql.properties"
overwrite="true"/>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
Related posts:
David said on Wednesday, December 9, 2009, 14:57
Hi, thank you for this simple overview, sometimes an example makes it all clear.
Isn’t there a way to share the common configuration and define it just once? (And only define the environment specific tasks)
ps small (copy/paste) typo found last sentence before sample:
copy src/main/conf/development/mysql.properties to target/classes/META-INF/mysql.properties
development must be production