Hello. No, i did not try it, though I think that it would solve the problem with this particular property. But I can't use the inheritall=false option because I want to pass quite a few properties from the main to the called script. Just one property should be re-defined.
> Gesendet: Donnerstag, 31. Juli 2014 um 14:27 Uhr > Von: "Knuplesch, Jürgen" <juergen.knuple...@icongmbh.de> > An: "Ant Users List" <user@ant.apache.org> > Betreff: AW: AW: How to override a property that was set in the command line > via "-D..." > > Did you try inheritall=false option? > > -----Ursprüngliche Nachricht----- > Von: Al Le [mailto:al...@gmx.de] > Gesendet: Donnerstag, 31. Juli 2014 14:03 > An: Ant Users List > Betreff: Aw: AW: How to override a property that was set in the command line > via "-D..." > > 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