ant-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Scot P. Floess" <>
Subject Re: Programmatically create a fileset and reference
Date Fri, 02 May 2008 13:46:53 GMT
OK I think I see the problem.  It breaks down due to the space?

Have you looked at Ant Contrib?

They have a <for> task that may help you.  It uses delimiters - in this 
case you can define the delimiter as a comma.  You might also want to 
define in a macrodef (sorry I am a huge huge fan of macrodefs)...

<macrodef name="copy-files" description = "Will copy files contained in 
@{property} to dir @{to-dir} storing all the files in ref id @{id}">
    <attribute name="property"  description="Property that contains all 
files to copy"/>
    <attribute name="id" description="Path id reference once files copied"/>
    <attribute name="to-dir" description="Directory to copy files"/>
    <attribute name="delim" default="," description = "Delimiter used in 

       <mkdir dir="@{to-dir}"/>

       <for list="${@{property}}" param="toCopy" delimiter="@{delim}">
             <copy file = "@{toCopy}"  toDir="@{to-dir}"/>

       <path id="@{id}">
          <fileset dir="@{to-dir}"/>

Keep in mind, I just whipped this out ;)

To use:

<property name="jdbc.jar" value="C:\Documents and 
Settings\jweber\Desktop\db2_test\db2jcc.jar,C:\Documents and 

<copy-files property="jdbc.jar" id = "copied.files" to-dir = 

Note that property attribute simply lists the property name...not using 
the dollar notation as that is taken care of in the <for> task via 



Jeremy Weber wrote:
> Not sure that accomplishes what I need to do.  The problem I wish to 
> solve is this:
> I have a property that equates to this:
> <property name="jdbc.jar" value="C:\Documents and 
> Settings\jweber\Desktop\db2_test\db2jcc.jar,C:\Documents and 
> Settings\jweber\Desktop\db2_test\db2jcc_license_cu.jar"/>
> The value of this property is variable.
> I then have a couple of tasks that perform the following:
>     <!-- use filelist to copy the files to a temp dir so we can build 
> a fileset -->
>      <copy toDir=".tmp_cp" overwrite="true"  failonerror="false">
>         <filelist files="${jdbc.jar}" />
>         <flattenmapper/>
>      </copy>
>    <!-- create a referencable path object to be used in sql task -->
>      <path id="sql.cp">
>         <fileset dir=".tmp_cp"/>
>      </path>*
> *
> This all works great (although not so straight forward), until there 
> is a space in one of the paths in jdbc.jar property.  If you have 
> another approach I'd be willing to try but I dont think your suggest 
> will work for this.
> *
> *
> Scot P. Floess wrote:
>> Have you considered using a macrodef and elements?
>> Maybe something like:
>> <macrodef name="my-macro">
>>   <attribute name="id"/>
>>    <element name="includes"/>
>>      <sequential>
>>       <path id="@{id}">
>>          <includes/>
>>       </path>
>>    </sequential>
>> </macrodef>
>> Then you can supply whatever you want in <includes> as long as it 
>> adheres to <path> allowances....
>> Jeremy Weber wrote:
>>> Hi All,
>>> I have created dozen of custom tasks before, but find myself 
>>> struggling with this one. I wish to create a task that does the 
>>> following:
>>> 1.  Accepts a file attribute to represent the absolute path of a 
>>> file contains comma separated absolute paths.
>>>    a.  this file name will be read in, parsed and each file found 
>>> will be added to a fileset object, which in term is added to a 
>>> resources object.
>>> 2.  Accepts a id property
>>>    a.  this id will be the id of the resource created in step 1a.
>>> So essentially I want...
>>>    <csvtofileset file="" id="">
>>> I am unclear on how to add the fileset i create in my code to the 
>>> project.  Additionally I am unsure of how to assign this an 'id' 
>>> that I can reference elsewhere.  Basically what I want to be able to 
>>> do is create a collection of files on the fly which I can reference 
>>> on the fly.   Essentially in the following snippet, the resources 
>>> element would be replaced by my new task element
>>> <project name="test" basedir="." default="test">
>>>   <!-- old -->
>>>    <resources id="fsd">
>>>         <fileset file="c:\temp\db2_test\db2jcc.jar" />           
>>> <fileset file="c:\temp\db2_test\db2jcc_license_cu.jar" />       
>>> </resources>
>>>    <!-- old -->
>>>    <!-- new -->
>>>           <csvtofileset file="" id="fsd">
>>>    <!-- new -->
>>>   <target name="test">
>>>          <copy toDir="c:\temp\ failonerror="true">
>>>             <resources refid="fsd"/>
>>>          </copy>
>>>   </target>
>>> </project>
>>> Any help at all would be appreciated.
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail:
>>> For additional commands, e-mail:

Scot P. Floess
27 Lake Royale
Louisburg, NC  27549

252-478-8087 (Home)
919-754-4592 (Work)

Chief Architect JPlate
Chief Architect JavaPIM

Architect Keros

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

View raw message