ant-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Scot P. Floess" <flo...@mindspring.com>
Subject Re: Programmatically create a fileset and reference
Date Fri, 02 May 2008 14:49:47 GMT
I see...

Have you considered using escape characters where the spaces are in the 
property?

So, curious, you are using build.xml's in a jar file?

Or, do you extract from the jar file and then use those files?

Jeremy Weber wrote:
> Sure does, filelist accepts a set of files delimited by a space...  So 
> when a path has a space it doesnt behave.  Have used ant-contrib 
> plenty of times in the past, buts that not an option.  The kicker is 
> this isnt a normal ant environment, but actually all the build files, 
> etc are in a jar when they are executed.  Although I havent tried 
> ant-contrib, this environment causes problems with similiar tasks 
> ant-call, ant, etc.
>
> Scot P. Floess wrote:
>> 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 @{property}"/>
>>
>>    <sequence>
>>       <mkdir dir="@{to-dir}"/>
>>
>>       <for list="${@{property}}" param="toCopy" delimiter="@{delim}">
>>          <sequential>
>>             <copy file = "@{toCopy}"  toDir="@{to-dir}"/>
>>          </sequential>
>>       </for>
>>
>>       <path id="@{id}">
>>          <fileset dir="@{to-dir}"/>
>>       </path>
>>    </sequence>
>> </macrodef>
>>
>> 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 
>> Settings\jweber\Desktop\db2_test\db2jcc_license_cu.jar"/>
>>
>> <copy-files property="jdbc.jar" id = "copied.files" to-dir = 
>> "new-directory"/>
>>
>> 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 ${@{property}}
>>
>> HTH,
>>
>> Flossy
>>
>>
>> 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="csv.file.name" id="some.id.name">
>>>>>
>>>>> 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="csv.file.name" 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: user-unsubscribe@ant.apache.org
>>>>> For additional commands, e-mail: user-help@ant.apache.org
>>>>>
>>>>>
>>>>
>>>
>>
>

-- 
Scot P. Floess
27 Lake Royale
Louisburg, NC  27549

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

Chief Architect JPlate   http://sourceforge.net/projects/jplate
Chief Architect JavaPIM  http://sourceforge.net/projects/javapim

Architect Keros          http://sourceforge.net/projects/keros


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
For additional commands, e-mail: user-help@ant.apache.org


Mime
View raw message