So you deploy different code to different environments?

T

-----Original Message-----
From: Ben Anderson [mailto:[EMAIL PROTECTED] 
Sent: Friday, November 19, 2004 11:29 AM
To: Maven Users List
Subject: Re: do something before *.properties files load


Neither of those will work, because I want to dynamically change these:
  <build>
    <sourceDirectory>${basepath}/src/java</sourceDirectory>
<unitTestSourceDirectory>${basepath}/src/test</unitTestSourceDirectory>
...
The properties file that specifices ${basepath} must be set before the maven.xml
is parsed.



On Fri, 19 Nov 2004 11:02:55 -0500, Poppe, Troy <[EMAIL PROTECTED]> wrote:
> 
> I am coming to a similar problem as you, Ben.  I can see two possible 
> solutions, I've yet to decide which fits our setup the best.
> 
> The first solution is to use Ant's property replacement task.  For 
> example, let's say your environment specific properties are in your 
> web.xml file.  You'd create a generic web_template.xml file with all 
> the environment specific information written in the form of: 
> ${env.specific.property}.  Then, you'll create a .properties file for 
> each of your environments, (dev.properties) which will contain your 
> environment specific properties for development.  Then create a 
> preGoal for war:war (maybe something else), and use the ant properties 
> replacement task (<replace> I believe) to get those values into the 
> newly generated web.xml.  Then use this new web.xml will be used in 
> the newly generated war file.  You'll have to create some switch that 
> can be used on the command line, or maybe even some project level 
> goals in your maven.xml files that will generate what you need (think 
> of something like "build-dev" to create in your top most maven.xml 
> file).
> 
> Another solution would be to create a separate web.xml for each 
> environment, web_dev.xml for example.  Then in your preGoal for 
> war:war, you could switch on a property specified on the command line, 
> and copy the selected xml file to web.xml.  Then the newly generated 
> war file will contain the right web.xml.
> 
> Personally, I like the first solution a bit better.  In a way, it 
> makes you declare what the environment specific properties are, and 
> you must provide a value for them to work.  It also allows you to 
> replace properties into different types of files, like source code.
> 
> I've used this approach for some of my Xdoclet code.  I'll set some 
> Xdoclet values to be like "${env.property}", let Xdoclet generate 
> other files, then run my properties file through, replacing what needs 
> to be replaced.  It seems to work pretty well, I find that many of my 
> properties are really quite common, and as a result, I only have to 
> change the property in one place to affect a change in my whole build.
> 
> Obviously, it makes yet another step to get from code to build, and 
> maybe it's a bit difficult to explain to another developer.  But you 
> document your build process perfectly anyway, right? ;)
> 
> Hope that helps.
> 
> Troy
> 
> 
> 
> 
> -----Original Message-----
> From: Ben Anderson [mailto:[EMAIL PROTECTED]
> Sent: Friday, November 19, 2004 10:44 AM
> To: Maven Users List
> Subject: Re: do something before *.properties files load
> 
> yes, I understand that.  But what if I don't want to swap 
> build.properties files for each environment?  I want to the same user, 
> w/out making them manually change build.properties, to be able to 
> build for various environments from the same machine.
> 
> On Fri, 19 Nov 2004 16:11:13 +0100, [EMAIL PROTECTED] 
> <[EMAIL PROTECTED]>
> wrote:
> > I think that environment specifical things can be set in the 
> > build.properties file. I am using one build.properties file for each 
> > environment. For instance, for Windows I have one build.properties 
> > in my home, for unix a slightly different one in my unix home. For 
> > nightly build we have a different unix user, which has a special 
> > build.properties file in home. If I work with several environment on 
> > the same machine, I simply switch the build.properties file in my 
> > home. I hope this helps.
> >
> > Greetings
> > Pierre
> >
> >
> >
> > -----Original Message-----
> > From: Ben Anderson [mailto:[EMAIL PROTECTED]
> > Sent: Freitag, 19. November 2004 15:52
> > To: Maven Users List
> > Subject: Re: do something before *.properties files load
> >
> > Yeah, you're probably right.  We should just use maven's inheritance 
> > to sort this stuff out.  But this is still throwing me a little.  I 
> > want to be able to create artifacts for various environments w/out 
> > changing any files, whether it's renaming or whatever.  Does this 
> > mean I would have to create a subdirectory for each different 
> > environment? It would be nice if maven allowed inheritance (which is 
> > one of the many things that makes maven cool) using some other 
> > techniqure than the file structure.  For instance, I've already 
> > created 2 sub directories (war and ear) for the same project.  To 
> > create the ear, I first cd to the war directory and do a 
> > war:install.  Then I have to cd to the ear directory and create my 
> > ear.  The only reason the ear directory exists is so that I can 
> > specify a dependency on my war artifact (creating a new project.xml 
> > which inherits from the upper project.xml).  I know I can use the 
> > reactor here, which would eliminate some of the "cd"'ing.  Back from 
> > my tangent... so, in order to do different environmetns, I'd specify 
> > separate sub directories for each and override accordingly?  Does 
> > that make more sense?  It's a little different than what I think you 
> > suggested, but like I said, I don't want to have to change files 
> > (project.xml, build.properties,
> > etc.) for each different environment.
> > Thanks,
> > Ben
> >
> > On Sat, 20 Nov 2004 00:43:31 +1100, Brett Porter 
> > <[EMAIL PROTECTED]> wrote:
> > > Can I suggest that you just use project.xml from your local copy 
> > > or the VSS shadow directory respectively? Does this pose some 
> > > particular limitation?
> > >
> > > I do something similar in some cases - having a clean CVS checkout 
> > > and an in progress checkout.
> > >
> > > - Brett
> > >
> > > On Fri, 19 Nov 2004 08:37:55 -0500, Ben Anderson
> > >
> > >
> > > <[EMAIL PROTECTED]> wrote:
> > > > I want to be able to build the source using either my local 
> > > > working directory which I have modified, or vss's shadow 
> > > > directory which contains only checked in files.  Same goes for 
> > > > unit tests.
> > > >
> > > >
> > > >
> > > >
> > > > On Sat, 20 Nov 2004 00:26:28 +1100, Brett Porter
> > <[EMAIL PROTECTED]> wrote:
> > > > > Hi Ben,
> > > > >
> > > > > Yes, you can expect that behaviour to remain the same.
> > > > >
> > > > > maven.src.dir is not what you think it is. You would need to
> > modify
> > > > > pom.build.sourceDirectory, but this is not recommended.
> > > > >
> > > > > Why are you changing sources in different environments? 
> > > > > Perhaps
> > you
> > > > > want <sourceModification>s?
> > > > >
> > > > > - Brett
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > On Fri, 19 Nov 2004 08:15:27 -0500, Ben Anderson 
> > > > > <[EMAIL PROTECTED]> wrote:
> > > > > > Thanks Brett.  I ran some tests specifying expressions in 
> > > > > > the project.properties file.  It's pretty neat how the 
> > > > > > properties
> > retain a
> > > > > > reference of some kind instead of resolving at the initial
> > assignment.
> > > > > >  For instance:
> > > > > >
> > > > > > qb.name=Tommy Maddox
> > > > > > best.qb.ever=${qb.name}
> > > > > > qb.name=Ben Roethlisberger
> > > > > >
> > > > > > now best.qb.ever is "Ben Roethlisberger".  I see this works 
> > > > > > now
> > - is
> > > > > > this indended (I'm assuming is must be)?  Am I safe in 
> > > > > > relying
> > on
> > > > > > maven to stay this way?
> > > > > >
> > > > > > One more general question.  The reason I'm asking is because 
> > > > > > I'd
> > like
> > > > > > to do the following.  Maybe this is way off base and there's 
> > > > > > a
> > better
> > > > > > way:
> > > > > >
> > > > > > command
> > > > > > --------------
> > > > > > maven -Denv=qa jar:jar
> > > > > >
> > > > > > maven.xml
> > > > > > ----------------
> > > > > >   <preGoal name="build:start"> <!-- I think this is always
> > called first -->
> > > > > >     <j:choose>
> > > > > >       <j:when test="${env == 'qa'}">
> > > > > >         <j:set var="basepath" value="~/myproject"/>
> > > > > >          ...
> > > > > >
> > > > > > project.properties
> > > > > > ------------------------- maven.src.dir=${basepath}/src/java
> > > > > >
> > > > > > project.xml
> > > > > > -----------------
> > > > > > ...
> > > > > >   <build>
> > > > > >     <sourceDirectory>
> > > > > >       this is bogus and will never be used
> > > > > >     </sourceDirectory>
> > > > > >
> > > > > > Does this make sense?  I think this is the best way to be 
> > > > > > able
> > to flip
> > > > > > things like maven.src.dir by specifying an environment on 
> > > > > > the
> > command
> > > > > > line.
> > > > > >
> > > > > > One more.. I can't find the property that equates to this 
> > > > > > tag <unitTestSourceDirectory/>.  I checked here: 
> > > > > > http://maven.apache.org/reference/plugins/test/properties.ht
> > > > > > ml
> > > > > > and here:
> > > > > >
> > http://maven.apache.org/reference/user-guide.html#Behavioural_Proper
> > ti
> > es
> > > > > > am I just blind or is it not listed?
> > > > > >
> > > > > > Thanks,
> > > > > > Ben
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > > On Fri, 19 Nov 2004 09:01:48 +1100, Brett Porter
> > <[EMAIL PROTECTED]> wrote:
> > > > > > > > 1)  Can I embed jelly in my build.properties files?
> > > > > > >
> > > > > > > The answer to the question you were trying to ask is yes, 
> > > > > > > but
> > to this
> > > > > > > specific one, no. Jelly is the XML scripting, JEXL is the
> > expression
> > > > > > > language used in Jelly. You can use an expression in
> > build.properties,
> > > > > > > but not embed Jelly - just in case you wanted to start 
> > > > > > > doing conditionals :)
> > > > > > >
> > > > > > > eg,
> > > > > > > somedir=${basedir}/src otherdir=${maven.build.dir}/other
> > > > > > >
> > > > > > > > 2)  Is there a goal that occurs before maven loads the
> > properties
> > > > > > > > file.  So I could write a <preGoal name="something"> 
> > > > > > > > <j:if>... ... some.arbitrary.property=qaValue
> > > > > > > > ...
> > > > > > > > some.arbitrary.property=prodValue
> > > > > > >
> > > > > > > No, but the first is nicer and works.
> > > > > > >
> > > > > > > - Brett
> > > > > > >
> > > > > > > >
> > > > > > > > Thanks,
> > > > > > > > Ben
> > > > > > > >
> > > > > > > >
> > --------------------------------------------------------------------
> > -
> > > > > > > > To unsubscribe, e-mail: 
> > > > > > > > [EMAIL PROTECTED]
> > > > > > > > For additional commands, e-mail:
> > > > > > > > [EMAIL PROTECTED]
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > --------------------------------------------------------------------
> > -
> > > > > >
> > > > > >
> > > > > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > > > > For additional commands, e-mail: [EMAIL PROTECTED]
> > > > > >
> > > > > >
> > > > >
> > > >
> > > >
> > --------------------------------------------------------------------
> > -
> > > >
> > > >
> > > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > > For additional commands, e-mail: [EMAIL PROTECTED]
> > > >
> > > >
> > >
> >
> > --------------------------------------------------------------------
> > -
> >
> >
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> > --------------------------------------------------------------------
> > -
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
> 
> ---------------------------------------------------------------------
> 
> 
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to