ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Costin Manolache <cmanola...@yahoo.com>
Subject RE: polymorphism (was Re: antlib)
Date Fri, 25 Apr 2003 21:12:25 GMT
Wannheden, Knut wrote:

>> <project>
>>    <.. init properies .../>
>>    <use xmlns:antcontrib="antlib:${ant-contrib.jar}"
>>             xmlns:antelope="antlib:${antelope.jar}">
>> 
>> <target name="test">
>>            <antelope:if>
>>                  ....
>>            </antelope:if>
>>            <antcontrib:foreach ...>
>>         </target>
>>     </use>
>> 
>> </project>


Or even:
  <antelope:if xmlns:antelope="antlib:${ant-contrib.jar}" />


In any case - if ComponentHelper is used, it'll get
"antlib:/path/to/ant-contrib.jar" as first param and if as the second param
- and any helper in the chain can create the task.

I don't like passing the .jar very much - but that's probably the only 
way if we want to use META-INF/antlib.xml.

The alternative would be to use /net/sf/antcontrib/antlib.xml (i.e.
descriptor in a package ), and use "antlib:net.sf.antcontrib" as namespace.
Then getResource() can be used, and we don't have to worry about 
multiple jars providing META-INF/antlib.xml - which forces us to use the 
.jar file directly.


Costin



>> 
> 
> That is almost the same thing as I had in mind.  Although I've been
> thinking about some slight variations to this, where no top-level element
> like <use/>
> would be necessary.  The Jelly style would be:
> 
> <project xmlns:antcontrib="antlib:${ant-contrib.jar}"
>          xmlns:antelope="antlib:${antelope.jar}">
>    <.. init properies .../>
> 
>    <target name="test">
>         <antelope:if>
>               ....
>         </antelope:if>
>         <antcontrib:foreach ...>
>    </target>
> 
> </project>
> 
> Here <target/> is still toplevel and the antlibs are loaded on project
> initialization (or on demand).  But I'm not sure I like this automagical
> loading.  Something inbetween would be this:
> 
> <project>
>    <.. init properies .../>
>    <use resource="${ant-contrib.jar}" ns="antlib:ant-contrib"/>
>    <use resource="${antelope.jar}" ns="antlib:antelope"/>
> 
>    <target name="test" xmlns:antcontrib="antlib:ant-contrib"
>                        xmlns:antelope="antlib:antelope">
>       <antelope:if>
>           ....
>       </antelope:if>
>       <antcontrib:foreach ...>
>    </target>
> 
> </project>
> 
> which is slightly more verbose, but cleaner IMO.  Especially since the
> antlib loading is explicit.
> 
> --
> knut



Mime
View raw message