Hello Peter. Thank you for the advice! This should work indeed! I have not tried yet, but from reading the code I'm quite sure it will. It's a bit less nice (there are two properties instead of just one), but it will work.
Though I'm still not quite satisfied that a script works differently depending on how its properties have been set by the caller. IMO the result of a script should not depend on that. It's like if a Java function taking an int parameter would work differently depending on whether you passed it as "5" or "3+2". Why are there so called user properties at all? Thank you once again for the proposal. Al > Gesendet: Donnerstag, 31. Juli 2014 um 15:06 Uhr > Von: "Peter West" <li...@pbw.id.au> > An: "Ant Users List" <user@ant.apache.org> > Betreff: Re: How to override a property that was set in the command line via > "-D..." > > Peter West > > "...the kingdom of heaven is like a merchant in search of fine pearls, who, > finding one pearl of great value, sold all that he had and bought it." > > Just define "well-known" properties which can be used from the command line, > or set from within a master file, and define another "actual" property which > will take precedence. Add logic to called.xml and siblings to assign the > "public" value to the "actual" outfile variable. If the actual variable was > set at a higher level, that setting will take precedence. Otherwise, the > value from the "public" well-known property will become the value of the > "actual" variable. > > Just make sure to document it within the file, so that someone trying to work > out why the command line option didn't "take" will be able to find it. > > <project name="Main" default="run"> > > <target name="run"> > <property name="outFileName" value="START"/> > <echo>Main: outFileName: ${outFileName}</echo> > > <ant antfile="called.xml" target="run"> > <property name="realFileName" value="OTHER VALUE"/> > </ant> > </target> > > </project> > > <project name="called" default="run"> > > <property name="realFileName" value="${outFileName}"/> > > <target name="run"> > <echo>called: outFileName: ${realFileName}</echo> > </target> > > </project> > > Peter West > > "...the kingdom of heaven is like a merchant in search of fine pearls, who, > finding one pearl of great value, sold all that he had and bought it." > > > On 31 Jul 2014, at 10:02 pm, Al Le <al...@gmx.de> wrote: > > > Hello. > > > > Thank you for the quick reply. > > > > I know that properties are immutable and should not be redefined. But my > > situation is, > > that the caller (be it command line or an ant script) sets the property for > > the called > > script. > > > > If the property is defined not in the command line but in the script itself > > (using the > > 'property' task) then the property is substituted in the called script. Bit > > if it's set > > from the commnd line, it's not. > > > > I looked into the ant source code. The reason seems to be that the > > properties that are > > defined in the command line are set as *user* properties. Those properties > > can't be > > redefined even through direct calls to project.setProperty(). > > > > How would you implement my goal (I hope it's clear what it is)? > > > > If the main script is like this: > > > > <project name="Main" default="run"> > > > > <target name="run"> > > <property name="outFileName" value="START"/> > > <echo>Main: outFileName: ${outFileName}</echo> > > > > <ant antfile="called.xml" target="run"> > > <property name="outFileName" value="OTHER VALUE"/> > > </ant> > > </target> > > > > </project> > > > > and I call it as "ant -f main.xml" (no "-D...") then the called script gets > > the value > > "OTHER VALUE". > > > > So why do the properties set from the command line get set as user > > properties whereas > > properties set by the "property" task are set as usual properties? > > > > I think they should be set in the same way. > > > > Cheers > > Al > > > > > > > >> Gesendet: Donnerstag, 31. Juli 2014 um 12:15 Uhr > >> Von: "Knuplesch, Jürgen" <juergen.knuple...@icongmbh.de> > >> An: "Ant Users List" <user@ant.apache.org> > >> Betreff: AW: How to override a property that was set in the command line > >> via "-D..." > >> > >> Hello, > >> > >> because of the immutability of properties you have to redesign your > >> scripts. > >> The first time you set a property is it. You are usually not able t change > >> it later. > >> This is very important, because this is the only way to set properties > >> from outside. > >> > >> Why does your command line call then use "-D-DoutFileName=START", when you > >> don’t want it? > >> > >> Never do this, when you want to change the prop in your build. > >> If "START" is your default, then set it in the called target / Ant file, > >> in your case "called.xml" > >> > >> Its very important to understand why immutability is a feature and not a > >> bug... (-; > >> > >> Juergen > >> > >> > >> > >> > >> > >> -----Ursprüngliche Nachricht----- > >> Von: Al Le [mailto:al...@gmx.de] > >> Gesendet: Donnerstag, 31. Juli 2014 11:10 > >> An: user@ant.apache.org > >> Betreff: How to override a property that was set in the command line via > >> "-D..." > >> > >> user@ant.apache.org > >> > >> How to override a property that was set in the command line via "-D..." > >> > >> Hello. > >> > >> Could someone please help me with the following situation? > >> > >> I have some ant scripts that are used in two ways: > >> > >> 1. Standalone build, i.e. the script is executed directly from the command > >> line 2. As a part of a larger build -- then the script is called via 'ant' > >> from another > >> script (here we have a main and a called scripts). > >> > >> Each script uses a property 'outFileName' that specifies where to write > >> some output to. > >> Both the main and the called script use this property. The script gets the > >> value of the property passed from the caller. > >> > >> The root script (i.e. the one called from the command line) gets passed > >> the value of 'outFileName' via the "-DoutFileName=..." option. > >> > >> When the main script calls a called script, it may specify another value > >> for the property 'outFileName' (using the nested 'property' element). The > >> called script should notice no difference how it was called (i.e. whether > >> it is called from the command line or as a called script from another > >> script). > >> > >> Now the propblem: It turns out that the properties specified via "-D=..." > >> are set as *user* properties. Hence it's not possible to redefine them via > >> the nested elements. Ant not even using a script task with a call > >> 'project.setProperty()'. > >> > >> How would you solve this situation? I would not like introduce properties > >> with a different name, since my goal is to have scripts that can be > >> 'customized' by specifying a property with a well known name > >> ('outFileName') -- be it on the command line or trough a nested element of > >> an ant task. Thik of it as of script interface. > >> > >> The only possible solution I can think of is to specify a custom property > >> helper, but that's too much IMO and makes scripts not 'portable'. > >> > >> Here's an example that I hope would explain the problem (I use ant 1.8.4 > >> but I think the same problem would also occur with ant 1.9.x): > >> > >> > >> -- Main build file 'main.xml' -- > >> > >> <project name="Main" default="run"> > >> > >> <target name="run"> > >> <echo>Main: outFileName: ${outFileName}</echo> > >> > >> <ant antfile="called.xml" target="run"> > >> <property name="outFileName" value="OTHER VALUE"/> > >> </ant> > >> </target> > >> > >> </project> > >> > >> > >> -- Called build file 'called.xml' -- > >> <project name="Called" default="run"> > >> > >> <target name="run"> > >> <echo>Called: outFileName: ${outFileName}</echo> > >> </target> > >> > >> </project> > >> > >> > >> -- Command line -- > >> ant -f main.xml -DoutFileName=START > >> > >> > >> -- Actual output -- > >> run: > >> [echo] Main: outFileName: START > >> run: > >> [echo] Called: outFileName: START > >> > >> > >> -- Expected (desired) output -- > >> run: > >> [echo] Main: outFileName: START > >> run: > >> [echo] Called: outFileName: OTHER VALUE > >> > >> > >> Any help will be much appreciated. > >> > >> Al > >> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: user-unsubscr...@ant.apache.org For additional > >> commands, e-mail: user-h...@ant.apache.org > >> > >> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: user-unsubscr...@ant.apache.org > >> For additional commands, e-mail: user-h...@ant.apache.org > >> > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: user-unsubscr...@ant.apache.org > > For additional commands, e-mail: user-h...@ant.apache.org > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: user-unsubscr...@ant.apache.org > For additional commands, e-mail: user-h...@ant.apache.org > > --------------------------------------------------------------------- To unsubscribe, e-mail: user-unsubscr...@ant.apache.org For additional commands, e-mail: user-h...@ant.apache.org