The broad goal is to grow Myrmidon from a prototype task engine into a fully fledged build system, that can serve as the basis for Ant 2. The following sections describe some of the many things which still need to be done to achieve that goal. This list is currently under construction.
Most tasks are grouped into some sort of task container. The task containers can be things like workspaces, projects, targets or other tasks. Each of these containers usually has a name. Thus we could refer to tasks via a path such as "/avalon/compile/javac" would refer to the task "javac" in the target "compile" in the project "avalon". In the past it has been requested that a task get access to this path programatically - other people have also asked for access to things like the currently running target. We need to assess this and decide whether we wish to support it.
Another point to think about is that we could use XPath-like string to designate to other tasks to execute. ie antcall would refer to a path rather than a target name
Assigned To: Peter
Write a HOWTO describing how to embed Myrmidon into other applications.
Assigned To: Peter
Extend Myrmidons library management facilities so that optional dependencies may be declared for a library. ie The library will still operate in absence of such libraries but can provide further features if these libraries are present. Most likely this will be done via a new manifest entry "Optional-Extension-List:" that behaves similar to "Extension-List:" except that the extensions are optional.
Currently we have a few tasks that have multiple implementations. For instance Javac task can actually call jikes, jvc, classic javac or modern javac. Similar things will be seen with the jspc task and the cc task (if it ever gets written). We have a base class that is meant to facilitate this sort of task and make it easy to develope. See AbstractFacadeTask. However we need to write up a HOWTO so people can use it.
Convert the ant1.x Mail tasks to myrmidon.
Add the ability to run java programs that call System.exit() by adding a security manager. Should look something like:
Myrmidon must be able to build itself. Currently, it is built using Ant 1.x. Ultimately, Myrmidon should be able to build itself from exactly the same build file. To start with, however, there is no need for Myrmidon to be able to do this. Myrmidon should also be able to be bootstrapped (that is, be able to be built from scratch, without using Ant 1.x at all).
Consider calling validate() on task prior to execute(). This would allow us to have a "make -k" mode that actually did basic validation and would also encourage task writers to do validation properly.
Consider allowing the user to configure the ant system by setting the following path types.
The default search path will probably include a per-user path element, a workspace path element and a system path elemtn that are searched in that order. Some possible defaults;
The Ant1 Compatibility layer is still in early stages of development.
<antcall> working.<path> or <fileset>)
as Ant1 types.
The VFS needs plenty of work:
The file data-types, such as
<fileset> and
<path>, are some of the most widely used parts of Ant 1.x.
Unfortunately, they aren't particularly extensible.
FileObject, rather than
java.io.File.
This process has started, in the
antlib.vfile package.
AbstractNameFileSelector to use Ant 1 style patterns
matches, rather than Globs patterns.
DefaultFileSet. Also add a
file selector implementation that matches everything except the default
excludes.
ClassLoaderManager to evaluate to the classpath of any
'library' (e.g. system classpath, ant runtime, tools.jar,
an antlib, an installed extension, or the system classes of another JVM
for cross-compiling).
<move>,
<delete>,
<touch> and
<mkdir> tasks on top
of the VFS and the new file data-types. Might be some scope for generalising
'touch' and 'mkdir' into a single task.
One of the goals of Ant 2 is to allow the user to easily customise and extend Ant. The command-line and local configuration files, are two places where this would be done. Currently, Myrmidon some customisation from the command-line, but does not support configuration files.
lib and
ext directories.
Add the ability to extend Ant using languages other than Java:
Everyone loves writing documentation, and so a goal for Ant 2 is to generate a lot of reference documentation for tasks and other types directly from the source. Unfortunately, there's still plenty of tutorial material to write. In particular we need these:
A completely unordered list of items, big and small:
ant-services.xml descriptor.
<http> and
<socket>
conditions to an antlib. Need to resolve how these will be passed a logger.
<uptodate> task a condition, and move to
an antlib.
<is-set> condition into is-set and is-true conditions.
<if> task to take any condition implementation.
<if> task.
<available> condition into separate conditions
that test for the availability of a class, or a resource.
crimson.jar to
bin/lib in the distribution,
and make available to other jars via the extension mechanism.
DefaultPropertyResolver to ignore '$${'.--type command-line option, to allow
the project builder to be manually selected.