Maven Exposing properties files appassembler

1.4k views Asked by At

To load environment specific values, in my src/main/resources folder, I have some properties files in different subfolders i.e.

  • com/app/ws/webservices-dev.properties
  • com/app/ws/webservices-test.properties
  • com/app/jms/jms-dev.properties
  • com/app/jms/jms-test.properties

I am loading these properties through spring

<bean id="placeholderProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>              
            <value>classpath:/com/app/jms/jms-${ENVIRONMENT:dev}.properties</value>
            <value>classpath:/com/app/ws/webservices-${ENVIRONMENT:dev}.properties</value>
        </list>
    </property>
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
    <property name="ignoreResourceNotFound" value="true" />
    <property name="ignoreUnresolvablePlaceholders" value="true" />
    <property name="order" value="0" />
</bean>

ENVIRONMENT is environment variable.

I am using appassembler-maven-plugin to generate the executable .sh file.

       <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>appassembler-maven-plugin</artifactId>
            <version>1.2.2</version>
            <configuration>
                <binFileExtensions>
                    <unix>.sh</unix>
                </binFileExtensions>
                <programs>
                    <program>
                        <mainClass>com.app.MainApp</mainClass>
                        <name>MainApp</name>
                    </program>
                </programs>
            </configuration>
        </plugin>

As a result of this all my properties files become part of my generated jar file. I want to expose some of the properties to set their values at deployment time. I have tried following configuration

       <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>appassembler-maven-plugin</artifactId>
            <version>1.2.2</version>
            <configuration>
                <configurationSourceDirectory>src/main/resources/com/app/bootstrap</configurationSourceDirectory>
                <configurationDirectory>conf</configurationDirectory>
                <copyConfigurationDirectory>true</copyConfigurationDirectory>
                <includeConfigurationDirectoryInClasspath>true</includeConfigurationDirectoryInClasspath> 
                <binFileExtensions>
                    <unix>.sh</unix>
                </binFileExtensions>
                <programs>
                    <program>
                        <mainClass>com.app.MainApp</mainClass>
                        <name>MainApp</name>
                    </program>
                </programs>
            </configuration>
        </plugin>           

But Spring does not load the properties; maybe due to the given path in spring config (see above).

What maven configuration should I use to move my properties files in appassembler\conf folder during package time and have spring load them from the classpath. I am after the configuration that works for both development(in eclipse, unit tests as maven builds) and in deployment.

0

There are 0 answers