Nicola Ken Barozzi wrote:

> ...
>> The proposal <antlib> provides a task <antlib> which can be used to
>> load libraries manually. Al the same time there are hooks on the code
>> for an autoloading mechanism to be supported. In escence, it would
>> allow ANT's main() to do something like:
>> 
>> - get all antlib.xml from the classpath ( using getResources);
>> - process each one of the antlib.xml resources found so that
>> all definitions get registered.
>> 
>> All the processing is provided by a static method of the Antlib task.
>> 
>> In principle this was designed just for loading the core at load time,
>> we could expand it to allow loading all jars (antlibs) in the classpath,
>> which means all antlibs in the ANT/lib directory.
> 
> This I really liked but Costin IIRC put it down in favor of compulsory
> explicit loading.

<loader> ( which is a wrapper around AntClassLoader ) allows adding to
 the core loader, to solve junit-like problems, but can also allow 
operations on arbitrary classloaders.

I think the class loading - even if it is a very difficult problem - 
shouldn't  be the major concern. There are systems with far more complex 
needs ( jboss, tomcat, etc ).


>> The main issue is how to enforce ordering to deal with dependencies
>> between the antlibs.
> 
> Or simply do not deal with dependencies, ie antlibs must not (yet)
> depend on on the other, except for the core ones.

Using an unified class loader ( at least as default ) - like jboss is doing,
or like JMX loading policy  - has a lot of benefits.  It also has some cases
that are not well covered - so we'll probably need to deal with both
"unified loader" and "loader hierarchy" cases.


My concerns with getResources() as oposed to 
getResource( PACKAGE/antlib.xml): 

1. startup time. In order to load one library you need to process all 
of them. It can be resolved with caching the result and looking at .jar
modifications. Most likley we'll have dozens of antlibs - and that'll only 
grow in time. The processing of (all) TLDs at startup ( for tomcat ) adds a
very visible overhead on startup, and at least tomcat is a long-running
process.

2. Placing multiple antlibs in a single jar may be trickier.

3. It may place too much emphasis on the .jars and filesystem layout.

4. A bit harder to control ( as we know from c-logging and JAXP ), 

5. Explicit control over what antlibs are to be used - versus loading
everything. Well - I like "magic" loading, but a lot of things in ant
are done explicitely. 

I have no problem accepting a getResources() solution ( just like I'm 
ok with using XML - but not any XML :-), but those issues should be
considered.

A lot of the "mess" in ant is the result of doing some things without
considering all implications or just as side effect of how code happened
to work. That's why I'm so strongly for breaking things down to individual
problems instead of a bundle solution. 


Costin

Reply via email to