On Wednesday 14 May 2003 10:49, Jose Alberto Fernandez wrote: > > From: Antoine Levy-Lambert [mailto:[EMAIL PROTECTED] > > > > I am having a look at > > http://nagoya.apache.org/bugzilla/show_bug.cgi?id=19897 > > > > This proposal seems to address most of the points discussed > > in this mailing list concerning the antlib thread of discussion. > > > > I was thinking maybe we do not need to look further and we > > could commit this contribution ? > > > > > > I would be glad to hear your comments concerning : > > 1) the functionality provided by the contribution > > 2) the implementation > > Well I have not given the fight on the need for roles and separate > symbol-tables for different Types.
Roles/separate symbol-tables could be dealt with later. >I would like for someone to explain > how <ejbjar>, <jspc>, <serverdeploy> can have vendor dependent > <weblogic>, <jboss>, etc. within this model. > > > I am quoting Peter Reilly here : > > > > This patch adds 4 new features (the code is interrelated, > > but may be split). > > * adapter attribute added to typedef > > * add(Type) method added to introspection rules > > * typedef can read an xml defintion file > > * namespace support for xml defintions (antlib:) > > So one can do > > <project xmlns:acme="org.acme.anttasks"> > > <acme:hello> > > <path path="build.xml"/> > > </acme:hello> > > </project> > > where the class path contains the org/acme/anttasks/antlib.xml > > and the antlib.xml file contains: > > <antlib> > > <typedef name="hello" classname="org.acme.anttasks.Hello"/> > > </antlib> > > As I have mentioned before, I have problems with this. It means that > users are forced to use name spaces even if there are no collisions > on the names of the components in the antlib, just because there is no > way to find the antlib.xml otherwise. > > I do not see an <antlib> task specified in the project, does that > means that I need to put all the jars in the classpath of ANT? > I hope that is not a requirement. I think users need to be > able to specify the classpath they want to use for their > libraries just like they do for <taskdef>. My description was not very detailed. I have extended "typedef"/"taskdef" to process an xml definition file (an antlib xml file) in the same way as properties are dealt with at the moment. for example: <typedef resource="org/acme/mydefinitions.xml" classpath="classes"/> to allow loading of tasks/types from different 3rd party with some tasks haveing the same name, I have added a "prefix" attribute. <taskdef resource="net/sf/antcontrib/antcontrib.properties" prefix="antcontrib."/> <taskdef resource=".../antelope.properties" prefix="antelope"/> To use XML name space, I have placed in code to deal the ns uri starting with "antlib:". This can be used with the "uri" attribute to typedef. <target name="antc"> <taskdef resource="net/sf/antcontrib/antcontrib.properties" uri="antlib:net/antcontrib"/> <antcontrib:shellscript shell="bash" xmlns:antcontrib="antlib:net/antcontrib"> echo Hello world </antcontrib:shellscript> </target> To be a little bit more userfriendly, (and to support the notation discussed in the e-mail discussion) the code treats the ns uri antlib:<package> as follows: when it is first encountered the code converted the '.' to '/' and adds /antlib.xml. The code when checks if the resource of that name is present and if so loads it up. This logic is partially implemented by the "antlib" attribute to typedef. <typedef antlib="antlib:net.sf.antcontrib" classpath="classes"/> this will check if the resource net/sf/antcontrib/antlib.xml exists and if so it loads the definitions into the antlib:net.sf.antcontrib ns uri. If net/sf/antcontrib/antlib.xml is in the class path, (for example in a jar in ${ant.home}/lib or placed in the class path by <classloader/>), one can specify the ns at the <project/> element <project xmlns:antcontrib="antlib:net.sf.antcontrib"> <antcontrib:if> <available.../> </...> </..> I realise that the "prefix", "uri" and "antlib" attributes may not get acceptance, so in the html page of "typedef", I have labeled them as "Experimental". > > > ToDo: add in support for ant-type polymorphism and > > addConfigured(Type). > > also more error checking and unit tests. > > ant-type polymorphism is not a priority for me, but > addConfigured support is. Given the fact that the > objects being passed are opaque for all purposes of > the parent element, it makes little sense to pass an > uninitialized object to the parent (which is what add(Type) does) > instead of passing an initialized object (what addConfigured(Type) > should do). I do not agree that it does not make sense to pass the uninitialized object. Normally one saves the object in a container in the add method, and uses the (now configured) object in the #execute() method of a task. However, I have updated my code to implement "addConfigured(Type)" as well as add(Type) and will update the patch later. Peter.