Moving property files outside jar in spring standalone application
In one of Spring standalone project, we needed to move the property files out of the jar for easy configurability.
I followed following steps:
1. Move property files out of JAR and put in a directory say “target/lib”
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<copy todir="target/lib" overwrite="true">
<fileset dir="src/main/resources/">
<include name="*.properties"/>
<include name="*.xml"/>
</fileset>
</copy>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
2. Exclude inclusion of files from the JAR. This will include only .hbm files in resource and any XML file in META-INF (I wanted to keep application-context.xml used by spring inside JAR)
<resource>
<directory>${basedir}/src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.hbm.xml</include>
<include>META-INF/*.xml</include>
</includes>
</resource>
3. Use maven-jar plugin to include class path information in MANIFEST.MF. This one is MOST important
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>
com.usat.digitalportal.service.impl.BootStrap
</mainClass>
</manifest>
<manifestEntries>
<Class-Path>. lib</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
a. Use “classpathPrefix” to specify folder name in which all properties will be placed.
b. Use “Class-Path” to specify the folder. “.” Indicate current folder, while “lib” specifies “lib” folder in same directory as JAR (I have used lib).
4. Changes in spring application-context.xml
a. Add line to look for property file in declared class path
<context:property-placeholder location="classpath*:**/settings.properties, classpath*:**/usat.properties” />
b. Add line to import resources from class path
<import resource="classpath*:**/dao-config.xml"/>
This is all which is needed. Run maven target as –X clean install and it should Generate a lib folder
Posted on June 6, 2012, in Spring and tagged property files in jar, spring. Bookmark the permalink. 1 Comment.

nice post ….