Conor MacNeill wrote: > On Thu, 8 May 2003 12:30 am, Costin Manolache wrote: >> >> The URI however should be chosen by the antlib author ( maybe based on >> some rules specific to ant ), and should serve as an ID of the library. >> >> My proposal is to use the (main) package name. There are other options - >> but I don't think every end user using it's own name for an antlib is a >> good one. >> > > +1 > > I believe the URI should be defined by the antlib builder, not the user. > It should be opaque - no semantic structure, at least from Ant's > processing. An antlib should just declare to what namespace URI it belongs > and then that antlib's defs would be accessible through that namespace in > the build file.
Can you explain why you don't want a semantic structure ? I don't understand why using a java package name - i.e. the base package of the library - as ns is worse than using an arbitrary string. And I don't unserstand why not using the URI in a meaningfull way - to locate the descriptor. If we use an arbitrary string - we'll still have to use a declaration to associate it with a resource. Of course - using the URI as a file is bad, using it as a HTTP is not very good either. But a java package name has all the characteristics that a namespace name needs, and it's intuitive for java developers. > This would allow multiple antlibs to belong to a single namespace, which > might be useful for extension purposes. So, something like this What would be the benefit ? IMO it would be more confusing. Even if we don't care about tools - having a namespace associated with a clear set of elements and tags is good for clarity. > <antlib uri="blah"> > <taskdef> > <typdef> > </antlib> > > Antlibs could potentially declare themselves to belong to the default > namespace. This would handle Ant's existing optional tasks. This facility > might be restricted to antlibs found in a particular location. +1 - the default namespace is a special case. My problem is with spaghetti-namespaces ( that change names or can be combined ). <project xmlsns:antcontrib="ant:net.sf.antcontrib" > <antcontrib:if ... > would become: <project> <antlib uri="ant:net.sf.antcontrib"> <if> In the first case - <if>'s namespace can be used to locate/load the lib. In the second - an explicit load into the default namespace. > A classloader could probably be associated with the URI, picking up all > antlibs declaring the URI. For advanced uses - ok. For common use - I think using the main class loader and adding the antlibs ( and their dependencies ) to the main loader is far better. By advanced use I mean the case where you want to use multiple versions of an antlib at the same time, or antlibs that have conflicting deps, etc. Costin > > Just some thoughts > Conor