On 14/05/2010 3:56 PM, Antoine Levy-Lambert wrote:
Jesse Glick wrote:
In relation to
<https://issues.apache.org/bugzilla/show_bug.cgi?id=49287>:

Ironically enough, I find the Ant build script to be a poor example of
an Ant script. The system of compiling certain classes and not others
according to classpath availability, and then packing classes to
different JARs, is difficult to understand and debug, and it is too
easy to accidentally put a class in the wrong JAR.

Would be much easier to manage (and possibly more friendly to IDEs) if
classes were split into several physical source roots.

Multiple source trees are easy with modern IDEs but make things trickier moving between directories with a text editor. This model of breaking up source code into modules is successful because the modules have something in common, and if you are working in one module there will be (ideally) minimal dependencies on other modules so you don't have to jump around much. That isn't true in this case. The JARs are divided based on a couple of non-module reasons. When we want modules, we use antlibs.

Antoine has already identified one reason we break the jars up: dependencies on other libraries that we don't ship. Then there is the core/optional divide.

Stefan can correct me if I'm wrong, but I think the original thinking was that way back when, people were commonly embedding bits and pieces of ant in their programs to get a limited form of dependency injection. This was before Spring popularized the concept. Avalon had it (PicoContainer?), but you had to program your whole system to Avalon whereas embedding Ant was more lightweight, particularly if all those optional tasks that contain half a dozen VCS tasks (among other thiings) were left out in an optional tasks jar file. So separating out ant core to get the XML interpretation for connecting the pieces of your application and getting a bunch of handy utility tasks at the same time seemed like a good way to go.

I think now, if people embed Ant they treat it as more of a script-engine black box, rather than picking and choosing among the pieces. We've pulled the little used optional tasks out into antlibs, so they are already modules. To me, the need for a split between core and optional has gone away.

I'm not sure how this related to bootstrap-ant, I haven't looked at that for a long time.

Anyway, my point is that if we go for one big jar and include fetch.xml behaviour in the standard build, then we don't need to break the source directories apart.


there is a problem with some libraries such as NetRexx or jai which have
non BSD licenses. I think nearly all other dependencies can be
downloaded using ant -f fetch.xml.

I think we should have a vote on moving any tasks into their own antlibs if we can't download the dependencies. A criteria for shipping ant should be that all the tasks we ship with ant itself should be usable just based on simple instructions for getting ant up and running. In other words, instructions like:

        1. download ant.1x.y.zip from here
        2. uncompress into ANT_HOME directory
        3. cd to ANT_HOME
        4. run bin/ant -f fetch.xml -Ddest=optional
        5. add ANT_HOME/bin to your PATH

should result in a fully functional version of ant running all the tasks we claim to ship with. Of course, some additional dependencies may be necessary (different scripting languages for example, jython is not included by default right now) but all the tasks should be usable for something.

So my feeling is that the netrexx and image tasks should move to their own antlibs unless IBM or Oracle are willing to redistribute freely. I think netrexx probably should be an antlib anyway, but image is probably more widely used so it is too bad users of it would need an extra download step. Then again they already need to do some extra work thanks to the JAI dependency.

BTW, it seems a terrible oversite that fetch.xml is only mentioned on the Install page as a file that is part of the ant distribution, and is not outlined as one of the steps you are likely to want to perform when installing ant. I'll fix this.


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org
For additional commands, e-mail: dev-h...@ant.apache.org

Reply via email to