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
>
<
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