ant-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Dick, Brian E." <Brian.D...@FMR.COM>
Subject RE: Subant - selecting projects to build
Date Thu, 16 Jun 2005 15:06:52 GMT
Thanks Jan.

I have another requirement for checking two property values. My solution doesn't work well
for this requirement. The scriptselector solution below can easily be extended to check two
or more properties.

-----Original Message-----
From: [] 
Sent: Thursday, June 16, 2005 1:07 AM
Subject: AW: Subant - selecting projects to build

Using a selector would be the finest, as you said.
The problem is that all selectors check the given file.
But your selector has to inspect a different one:
- you want to select the module build.xml
- you have to check the content of the module

Therefore you have to write your own selector. With 1.7 this is much more
easier because you could script that. So the code would something like

<subant ..>
    <fileset ...>
        <include name="*/build.xml"/>
        <scriptselector language="javascript">
            dir = file.getParent();
            nameWithoutSuffix = filename.substring(0, filename.lastIndexOf('.'));
            propName = nameWithoutSuffix + ".properties";
            propFile = new, propName);

            propHasHost = ...


For the check for the text content you could reuse the contains selector, as you already
had. Instantiate and check 

    selector = new ContainsSelector();
    selector.setText("deployhost=" + project.getProperty("host") );
    propHasHost = selector.isSelected(dir, propName, propFile);

Just my ideas as pseudo code ...

If you┬┤ll get it to work, let us know.


>-----Urspr├╝ngliche Nachricht-----
>Von: Dick, Brian E. [] 
>Gesendet: Mittwoch, 15. Juni 2005 18:03
>An: Ant Users List
>Betreff: Subant - selecting projects to build
>I have my project directory structured similar to the last example in
>the subant doc. I have a root directory with a common build file and
>module directories with a simple build file that imports the common
>build file. Currently, my project consists of 50+ modules.
>I deploy these modules across 10+ host machines. Each module resides on
>only one host, but a host has many modules. I have a "deployhost"
>property in the module file that specifies 
>the host for
>deployment. When I want to deploy a particular module to its designated
>host, I simply run "ant deploy" from the module directory and 
>the module
>"knows" where to go.
>I implemented project-wide targets in the root build.xml file by
>following the subant example. Each project-wide target iterates through
>module directories and runs the appropriate target. I can deploy all
>modules to their respective hosts by running "ant deploy" from the root
>Now, I want to do something a bit more complicated. I want to 
>deploy all
>modules for a particular host. I have tried several combinations of
>subant, fileset and selectors but I can't get what I want. I had to
>resort to the <for> task from ant-contrib. Can anyone come up a better
>solution than the following?
>   <target name="deploy_by_host" description="Deploy projects by host">
>      <for param="module">
>         <fileset dir="modules">
>            <include name="**/"/>
>            <contains text="deployhost=${host}"/>
>         </fileset>
>         <sequential>
>            <property name="module.antfile"
>            <ant antfile="${module.dir}" target="deploy"
>            <var name="module.antfile" unset="true"/>
>         </sequential>
>      </for>
>   </target>

To unsubscribe, e-mail:
For additional commands, e-mail:

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message