You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@maven.apache.org by Brad O'Hearne <br...@neurofire.com> on 2007/02/20 18:29:00 UTC

Handling platform-specific config file values in builds

Hello,

What is the generally accepted convention for handling builds where 
there are configuration files whose values are different depending upon 
the target platform being built for? For example, I may have a 
configuration file with JDBC URLs in it, and these values may be 
different depending upon whether I am building for a development 
environment, or a testing or production environment. Or, another example 
would be variations in web.xml files depending upon whether the WAR file 
will be deployed to a dev, test, or production environment. .

Advice is greatly appreciated.

Thanks,

Brad

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
For additional commands, e-mail: users-help@maven.apache.org


Re: Handling platform-specific config file values in builds

Posted by Brad O'Hearne <br...@neurofire.com>.
Graham,

That's great advice, and one that I've been pondering in several 
environments that I've configured over the years. One interesting thing 
about this scenario is that it actually requires discipline beyond that 
actual build process / system, but in application design as well. For 
instance, the servlet API specifies parameters to be passed to servlets 
on init, which complicates this very thing if the parameter value is 
environment-specfiic. So it really demands some forethought in 
application design to ensure that resource files and/or init values are 
late bound, rather than statically bound by config files like web.xml 
which by definition a servlet container is going to process.

This is probably why in various places in the Java SDK the use of System 
properties (which I personally really don't like, as it dominates the 
entire VM instance rather than the object instance) is the means of 
setting such variables, as it externalizes these values from the app in 
question.

Thanks for the reply Graham -- perhaps I'll blog an example of this soon.

Brad

Graham Leggett wrote:
> Brad O'Hearne wrote:
>
>> What is the generally accepted convention for handling builds where 
>> there are configuration files whose values are different depending 
>> upon the target platform being built for? For example, I may have a 
>> configuration file with JDBC URLs in it, and these values may be 
>> different depending upon whether I am building for a development 
>> environment, or a testing or production environment. Or, another 
>> example would be variations in web.xml files depending upon whether 
>> the WAR file will be deployed to a dev, test, or production 
>> environment. .
>
> I generally try to avoid this scenario, because it's inevitable at 
> some point that someone is going to put the test build into production 
> by mistake, and your test database will become live, or vice versa.
>
> Ideally installation specific config should go in an environment of 
> some kind external to your build, possibly stored in a separate 
> repository, or pointed to by environment variables.
>
> In other words, it should be as hard as possible for the wrong config 
> to go in the wrong place.
>
> Regards,
> Graham
> -- 


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
For additional commands, e-mail: users-help@maven.apache.org


Re: Handling platform-specific config file values in builds

Posted by Graham Leggett <mi...@sharp.fm>.
Brad O'Hearne wrote:

> What is the generally accepted convention for handling builds where 
> there are configuration files whose values are different depending upon 
> the target platform being built for? For example, I may have a 
> configuration file with JDBC URLs in it, and these values may be 
> different depending upon whether I am building for a development 
> environment, or a testing or production environment. Or, another example 
> would be variations in web.xml files depending upon whether the WAR file 
> will be deployed to a dev, test, or production environment. .

I generally try to avoid this scenario, because it's inevitable at some 
point that someone is going to put the test build into production by 
mistake, and your test database will become live, or vice versa.

Ideally installation specific config should go in an environment of some 
kind external to your build, possibly stored in a separate repository, 
or pointed to by environment variables.

In other words, it should be as hard as possible for the wrong config to 
go in the wrong place.

Regards,
Graham
--