|
|
@@ -0,0 +1,867 @@ |
|
|
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
|
|
|
|
|
|
|
<!-- Content Stylesheet for Site --> |
|
|
|
|
|
|
|
|
|
|
|
<!-- start the processing --> |
|
|
|
<html> |
|
|
|
<head> |
|
|
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> |
|
|
|
|
|
|
|
<meta name="author" value="Conor MacNeill"> |
|
|
|
<meta name="email" value=""> |
|
|
|
|
|
|
|
<title>Mutant Proposal - Mutant Goals</title> |
|
|
|
</head> |
|
|
|
|
|
|
|
<body bgcolor="#ffffff" text="#000000" link="#525D76"> |
|
|
|
<table border="0" width="100%" cellspacing="0"> |
|
|
|
<!-- TOP IMAGE --> |
|
|
|
<tr> |
|
|
|
<td colspan="2"> |
|
|
|
<a href="http://jakarta.apache.org"><img src="http://jakarta.apache.org/images/jakarta-logo.gif" align="left" border="0"/></a> |
|
|
|
</td> |
|
|
|
</tr> |
|
|
|
</table> |
|
|
|
<table border="0" width="100%" cellspacing="4"> |
|
|
|
<tr><td colspan="2"> |
|
|
|
<hr noshade="" size="1"/> |
|
|
|
</td></tr> |
|
|
|
|
|
|
|
<tr> |
|
|
|
<!-- LEFT SIDE NAVIGATION --> |
|
|
|
<td valign="top" nowrap="true"> |
|
|
|
<p><strong>Mutant Proposal</strong></p> |
|
|
|
<ul> |
|
|
|
<li> <a href="./index.html">Introduction</a> |
|
|
|
</li> |
|
|
|
<li> <a href="./goals.html">Design Goals</a> |
|
|
|
</li> |
|
|
|
<li> <a href="./features.html">User Features</a> |
|
|
|
</li> |
|
|
|
<li> <a href="./developers.html">Task Developers</a> |
|
|
|
</li> |
|
|
|
<li> <a href="./design.html">Design Description</a> |
|
|
|
</li> |
|
|
|
</ul> |
|
|
|
</td> |
|
|
|
<td align="left" valign="top"> |
|
|
|
<table border="0" cellspacing="0" cellpadding="2" width="100%"> |
|
|
|
<tr><td bgcolor="#525D76"> |
|
|
|
<font color="#ffffff" face="arial,helvetica,sanserif"> |
|
|
|
<a name="Goals"><strong>Goals</strong></a> |
|
|
|
</font> |
|
|
|
</td></tr> |
|
|
|
<tr><td> |
|
|
|
<blockquote> |
|
|
|
<p> |
|
|
|
This page describes the key goals that have shaped the development of |
|
|
|
Mutant. |
|
|
|
</p> |
|
|
|
<p> |
|
|
|
The first section identifies a set of issues with Ant1 that have cropped up as |
|
|
|
Ant1 has evolved. The design implications of each issue are then summarized as a |
|
|
|
Mutant requirement. I do not want to suggest that these problems are unsolvable |
|
|
|
within the Ant1 design. Already I believe we have seen the Ant2 proposals |
|
|
|
influencing people trying to extend Ant1. These issues may be solvable, although at |
|
|
|
the risk of backward compatability impacts or further complication of the Ant1 |
|
|
|
codebase. |
|
|
|
</p> |
|
|
|
<p> |
|
|
|
The second section covers a set of additional requirements that have emerged as |
|
|
|
the whole concept of Ant2 has developed. Many of these came from the discussions |
|
|
|
on the Ant-Dev mailing list. |
|
|
|
</p> |
|
|
|
<p> |
|
|
|
The realisation of these requirements as they impact a user is on the |
|
|
|
<a href="features.html">next page</a>. Th implications for task developers and |
|
|
|
Ant developers are discussed in the following sections. |
|
|
|
</p> |
|
|
|
</blockquote> |
|
|
|
</td></tr> |
|
|
|
</table> |
|
|
|
<table border="0" cellspacing="0" cellpadding="2" width="100%"> |
|
|
|
<tr><td bgcolor="#525D76"> |
|
|
|
<font color="#ffffff" face="arial,helvetica,sanserif"> |
|
|
|
<a name="Ant1 Issues"><strong>Ant1 Issues</strong></a> |
|
|
|
</font> |
|
|
|
</td></tr> |
|
|
|
<tr><td> |
|
|
|
<blockquote> |
|
|
|
<table border="0" cellspacing="0" cellpadding="2" width="100%"> |
|
|
|
<tr><td bgcolor="#828DA6"> |
|
|
|
<font color="#ffffff" face="arial,helvetica,sanserif"> |
|
|
|
<a name="Unrestricted core access"><strong>Unrestricted core access</strong></a> |
|
|
|
</font> |
|
|
|
</td></tr> |
|
|
|
<tr><td> |
|
|
|
<blockquote> |
|
|
|
<p> |
|
|
|
The interface between the Ant core and tasks is not controlled. It |
|
|
|
allows tasks almost complete access to the internal data structures of the |
|
|
|
core. This is poor encapsulation. Whilst most tasks do not need and do not |
|
|
|
use this access, its existence nonetheless prevents changes being made to |
|
|
|
the core without raising concerns about impacting backward compatability. |
|
|
|
</p> |
|
|
|
<p> |
|
|
|
The uncontrolled nature of the task-core interface also makes it difficult |
|
|
|
to reuse tasks and types in a different context without almost completely |
|
|
|
duplicating the Ant core |
|
|
|
</p> |
|
|
|
<div align="left"> |
|
|
|
<table cellspacing="4" cellpadding="0" border="0"> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#ffffff"> |
|
|
|
|
|
|
|
<p> |
|
|
|
A tightly defined interface between the core and the components (tasks and |
|
|
|
types) will allow the core implementation to be changed without the risk |
|
|
|
of impacting tasks. It will also allow components to be reused in other |
|
|
|
contexts. |
|
|
|
</p> |
|
|
|
|
|
|
|
</td> |
|
|
|
<td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
</table> |
|
|
|
</div> |
|
|
|
</blockquote> |
|
|
|
</td></tr> |
|
|
|
</table> |
|
|
|
<table border="0" cellspacing="0" cellpadding="2" width="100%"> |
|
|
|
<tr><td bgcolor="#828DA6"> |
|
|
|
<font color="#ffffff" face="arial,helvetica,sanserif"> |
|
|
|
<a name="Lack of embedding support"><strong>Lack of embedding support</strong></a> |
|
|
|
</font> |
|
|
|
</td></tr> |
|
|
|
<tr><td> |
|
|
|
<blockquote> |
|
|
|
<p> |
|
|
|
Ant1 does not provide strong support for embedding Ant in other systems, |
|
|
|
particularly a GUI or IDE. The development of Antidote highlighted this |
|
|
|
difficultly. Antidote was forced to perform its own XML parsing so it could |
|
|
|
build its own model of the build. There is no communication medium for a GUI to |
|
|
|
communicate with the core. Without this capability any GUI will be limited to |
|
|
|
simply editing the XML representation of the build. |
|
|
|
</p> |
|
|
|
<div align="left"> |
|
|
|
<table cellspacing="4" cellpadding="0" border="0"> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#ffffff"> |
|
|
|
|
|
|
|
<p> |
|
|
|
The definition of a project model, a Java-based object-model of a build |
|
|
|
description would decouple Ant from the XML representation. This allows |
|
|
|
other representations to be used. Such an object model also forms the basis |
|
|
|
for communications between systems which want to embed Ant. An IDE could |
|
|
|
manipulate this project object model directly and pass to the core for |
|
|
|
processing without needing to convert to and from an external |
|
|
|
representations such as XML. |
|
|
|
</p> |
|
|
|
|
|
|
|
</td> |
|
|
|
<td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
</table> |
|
|
|
</div> |
|
|
|
</blockquote> |
|
|
|
</td></tr> |
|
|
|
</table> |
|
|
|
<table border="0" cellspacing="0" cellpadding="2" width="100%"> |
|
|
|
<tr><td bgcolor="#828DA6"> |
|
|
|
<font color="#ffffff" face="arial,helvetica,sanserif"> |
|
|
|
<a name="Configuration done at Parse-Time"><strong>Configuration done at Parse-Time</strong></a> |
|
|
|
</font> |
|
|
|
</td></tr> |
|
|
|
<tr><td> |
|
|
|
<blockquote> |
|
|
|
<p> |
|
|
|
The original implementation of Ant1 performed all task configuration at the |
|
|
|
time the XML description of the build was parsed (parse-time). This approach |
|
|
|
could not handle dynamically created tasks very well since in some |
|
|
|
instances the type of the task to be configured was not known at parse-time. |
|
|
|
This limitation was overcome with the introduction of the UnknownElement and |
|
|
|
RuntimeConfigurable classes. While these work well, they are confusing and at |
|
|
|
times surprising to most Ant developers. Also some operations still occur at |
|
|
|
parse-time, notably creation of nested elements of known types. This could be |
|
|
|
overcome by going to a fully dynamic model but the fear of backward |
|
|
|
incompatability constrains this change from occuring. |
|
|
|
</p> |
|
|
|
<div align="left"> |
|
|
|
<table cellspacing="4" cellpadding="0" border="0"> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#ffffff"> |
|
|
|
|
|
|
|
<p> |
|
|
|
Execution-time configuration of tasks allows for the latest information to be |
|
|
|
used for configuration. It is also necessary to support the concept of the |
|
|
|
project model. The project model cannot contain execution-time information as it |
|
|
|
does in Ant1 |
|
|
|
</p> |
|
|
|
|
|
|
|
<p> |
|
|
|
The decoupling of the parsing and exection phases, communicating through the |
|
|
|
medium of the project model will allow the core to be modularized. The parsing |
|
|
|
and execution phases can be separated and one replaced without impacting the |
|
|
|
other. |
|
|
|
</p> |
|
|
|
|
|
|
|
</td> |
|
|
|
<td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
</table> |
|
|
|
</div> |
|
|
|
</blockquote> |
|
|
|
</td></tr> |
|
|
|
</table> |
|
|
|
<table border="0" cellspacing="0" cellpadding="2" width="100%"> |
|
|
|
<tr><td bgcolor="#828DA6"> |
|
|
|
<font color="#ffffff" face="arial,helvetica,sanserif"> |
|
|
|
<a name="Multiple execution"><strong>Multiple execution</strong></a> |
|
|
|
</font> |
|
|
|
</td></tr> |
|
|
|
<tr><td> |
|
|
|
<blockquote> |
|
|
|
<p> |
|
|
|
In Ant1, a task, once configured, may be used more than once - i.e. its |
|
|
|
execute method may be called more than once. This occurs when the Ant |
|
|
|
command line specifies the evaluation of two targets. If those targets have |
|
|
|
overlapping dependencies, the tasks in those overlapping dependencies will |
|
|
|
be executed twice. This arrangement requires task writers to preserve the |
|
|
|
state configured by Ant during the execution of the task so that the next |
|
|
|
execution has the correct configuration. |
|
|
|
</p> |
|
|
|
<p> |
|
|
|
Many task writers are not aware of this requirement. Frequently the task's |
|
|
|
state is changed during the execution method, which can lead to mysterious |
|
|
|
falures during subsequent executions. This need to preserve the configuration |
|
|
|
state makes writing tasks much harder. |
|
|
|
</p> |
|
|
|
<div align="left"> |
|
|
|
<table cellspacing="4" cellpadding="0" border="0"> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#ffffff"> |
|
|
|
|
|
|
|
<p> |
|
|
|
Once a task is configured, it should be executed once. If the execution of |
|
|
|
multiple targets is required, a new task instance should be created and |
|
|
|
configured from the same project model. If reuse of task instances is desired |
|
|
|
each instance must be reinitialized and reconfigured before use. |
|
|
|
</p> |
|
|
|
|
|
|
|
</td> |
|
|
|
<td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
</table> |
|
|
|
</div> |
|
|
|
</blockquote> |
|
|
|
</td></tr> |
|
|
|
</table> |
|
|
|
<table border="0" cellspacing="0" cellpadding="2" width="100%"> |
|
|
|
<tr><td bgcolor="#828DA6"> |
|
|
|
<font color="#ffffff" face="arial,helvetica,sanserif"> |
|
|
|
<a name="No automatic deployment of tasks"><strong>No automatic deployment of tasks</strong></a> |
|
|
|
</font> |
|
|
|
</td></tr> |
|
|
|
<tr><td> |
|
|
|
<blockquote> |
|
|
|
<p> |
|
|
|
Ant1 has a set of well-known tasks (and types). A well-known task is one |
|
|
|
for which a mapping between the taskname and its implementing class is |
|
|
|
predefined in Ant. This mapping is provided by the two defaults.properties |
|
|
|
files in Ant's code. These well-known tasks do not need to be taskdef'd to |
|
|
|
make them available in a build file. Conversely tasks which are not in this |
|
|
|
list need to be explicitly taskdef'd. |
|
|
|
</p> |
|
|
|
<p> |
|
|
|
Note that this distinction is not the same as the core/optional |
|
|
|
distinction found in Ant1. An Ant1 core task is notionally supported by Ant |
|
|
|
without requiring any additional external libraries - it just requires the |
|
|
|
classes available in the 1.1 JDK, in Ant and in the libraries Ant uses such |
|
|
|
as the XML parser. An optional task is a task which requires JDK 1.2+ |
|
|
|
features or the support of an external library, such as jakarta-regexp. |
|
|
|
</p> |
|
|
|
<p> |
|
|
|
The problem with this system is that there is no namespace management. If a |
|
|
|
new task is added to Ant, it may invalidate buildfiles which are already |
|
|
|
using that taskname via a taskdef. Actually the taskdef may continue to work or |
|
|
|
it may not - it will depend on the nested elements that the task definitions |
|
|
|
support (see above discussion of regarding cofiguration at parse-time) |
|
|
|
</p> |
|
|
|
<div align="left"> |
|
|
|
<table cellspacing="4" cellpadding="0" border="0"> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#ffffff"> |
|
|
|
|
|
|
|
<p> |
|
|
|
Tasks need to be deployed in libraries by either placing them in well known |
|
|
|
directories of an Ant install or by telling Ant where to look for them. Removing |
|
|
|
the central management of defined task names allows tasks libraries to be |
|
|
|
developed and maintained independently of Ant much more easily. |
|
|
|
</p> |
|
|
|
|
|
|
|
<p> |
|
|
|
Once centralised management of the task namespace is removed, there is, |
|
|
|
however, the possibility of name collision. A mechanism is required to allow a |
|
|
|
build file writer to select which particular tasks are assigned to which |
|
|
|
tasknames. |
|
|
|
</p> |
|
|
|
|
|
|
|
</td> |
|
|
|
<td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
</table> |
|
|
|
</div> |
|
|
|
</blockquote> |
|
|
|
</td></tr> |
|
|
|
</table> |
|
|
|
<table border="0" cellspacing="0" cellpadding="2" width="100%"> |
|
|
|
<tr><td bgcolor="#828DA6"> |
|
|
|
<font color="#ffffff" face="arial,helvetica,sanserif"> |
|
|
|
<a name="Top level tasks"><strong>Top level tasks</strong></a> |
|
|
|
</font> |
|
|
|
</td></tr> |
|
|
|
<tr><td> |
|
|
|
<blockquote> |
|
|
|
<p> |
|
|
|
In Ant1 certain tasks may appear outside of any target. This is implemented as a |
|
|
|
set of hardcoded conditions in the XML parsing phase. The execution and |
|
|
|
configuration of these tasks does not involve the use of RuntimeConfigurable and |
|
|
|
UnknownElement. |
|
|
|
</p> |
|
|
|
<p> |
|
|
|
This hardcoding is not very inituitive. It is confusing to users who do not |
|
|
|
know why only some tasks may be run outside of a target. Also as the list of |
|
|
|
tasks that may be useful as a top-level task grows, further special cases must |
|
|
|
be added to the code making the code harder to maintain. |
|
|
|
</p> |
|
|
|
<div align="left"> |
|
|
|
<table cellspacing="4" cellpadding="0" border="0"> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#ffffff"> |
|
|
|
|
|
|
|
<p> |
|
|
|
The number of special names should be kept to a minimum. Special cases should |
|
|
|
be avoided as they are not inituitive. |
|
|
|
</p> |
|
|
|
|
|
|
|
</td> |
|
|
|
<td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
</table> |
|
|
|
</div> |
|
|
|
</blockquote> |
|
|
|
</td></tr> |
|
|
|
</table> |
|
|
|
<table border="0" cellspacing="0" cellpadding="2" width="100%"> |
|
|
|
<tr><td bgcolor="#828DA6"> |
|
|
|
<font color="#ffffff" face="arial,helvetica,sanserif"> |
|
|
|
<a name="Build file inclusion is cumbersome"><strong>Build file inclusion is cumbersome</strong></a> |
|
|
|
</font> |
|
|
|
</td></tr> |
|
|
|
<tr><td> |
|
|
|
<blockquote> |
|
|
|
<p> |
|
|
|
In Ant1, the inclusion of a set of build file definitions or targets is achieved |
|
|
|
through the use of XML entities. This is just cumbersome. |
|
|
|
</p> |
|
|
|
<div align="left"> |
|
|
|
<table cellspacing="4" cellpadding="0" border="0"> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#ffffff"> |
|
|
|
|
|
|
|
<p> |
|
|
|
A simplified include mechanism is required to replace the entity based |
|
|
|
inclusion of Ant1. |
|
|
|
</p> |
|
|
|
|
|
|
|
</td> |
|
|
|
<td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
</table> |
|
|
|
</div> |
|
|
|
</blockquote> |
|
|
|
</td></tr> |
|
|
|
</table> |
|
|
|
<table border="0" cellspacing="0" cellpadding="2" width="100%"> |
|
|
|
<tr><td bgcolor="#828DA6"> |
|
|
|
<font color="#ffffff" face="arial,helvetica,sanserif"> |
|
|
|
<a name="Classpath management"><strong>Classpath management</strong></a> |
|
|
|
</font> |
|
|
|
</td></tr> |
|
|
|
<tr><td> |
|
|
|
<blockquote> |
|
|
|
<p> |
|
|
|
Probably the greatest issue facing Ant1 today involves the management of the |
|
|
|
classpath and the associated visibility of classes. Most optional tasks in Ant1 |
|
|
|
require the supporting classes for the task to be available on the system |
|
|
|
classpath. For example, the JUnit task is only usable if the JUnit jar is on |
|
|
|
the classpath. If it is not, Ant will complain about being unable to create the |
|
|
|
junit task. |
|
|
|
</p> |
|
|
|
<p> |
|
|
|
The usual solution when a user runs into this problem is to put the required jar |
|
|
|
into the ANT_HOME/lib directory. This just adds the required jar to the system |
|
|
|
classpath prior to starting Ant albeit without requiring the user to explicitly |
|
|
|
set the classpath. |
|
|
|
</p> |
|
|
|
<p> |
|
|
|
There are a number of issues with this approach. The classes on the |
|
|
|
classpath share the same classloader as Ant's classes and Ant's support |
|
|
|
libraries - particularly the XML parser. If a task wishes to use a specific XML |
|
|
|
parser, it may conflict with Ant's own parser. If two tasks require different |
|
|
|
versions of a supporting jar, these will conflict. |
|
|
|
</p> |
|
|
|
<p> |
|
|
|
Many tasks make use of factory objects (dynamic class instantiation, dynamic |
|
|
|
resource loading, etc). When the factory is in the system classpath it will not |
|
|
|
be able to load resources available in a taskdef'd task's custom classpath due |
|
|
|
to the delegating nature of classloaders. Such errors can be very confusing to |
|
|
|
users. More recent code is likely to attempt use of a context classloader but |
|
|
|
this is not set by Ant1 currently. |
|
|
|
</p> |
|
|
|
<div align="left"> |
|
|
|
<table cellspacing="4" cellpadding="0" border="0"> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#ffffff"> |
|
|
|
|
|
|
|
<p> |
|
|
|
Do not require jars to be added to ANT_HOME/lib to enable tasks. Allow users to |
|
|
|
specify the location of support jars on a per-library basis. |
|
|
|
</p> |
|
|
|
|
|
|
|
</td> |
|
|
|
<td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
</table> |
|
|
|
</div> |
|
|
|
</blockquote> |
|
|
|
</td></tr> |
|
|
|
</table> |
|
|
|
<table border="0" cellspacing="0" cellpadding="2" width="100%"> |
|
|
|
<tr><td bgcolor="#828DA6"> |
|
|
|
<font color="#ffffff" face="arial,helvetica,sanserif"> |
|
|
|
<a name="Extensibility"><strong>Extensibility</strong></a> |
|
|
|
</font> |
|
|
|
</td></tr> |
|
|
|
<tr><td> |
|
|
|
<blockquote> |
|
|
|
<p> |
|
|
|
The earliest versions Ant1 did not explicitly support any datatypes. The only |
|
|
|
datatype, property, was actually created as a side-effect of running the |
|
|
|
<code><property></code> task. If it were to be implemented today, property |
|
|
|
would probably be known as a string datatype, perhaps associated with a |
|
|
|
<code><load-properties></code> task. This is also the reason property |
|
|
|
is one of those tasks which is allowed to exist outside of a target. |
|
|
|
</p> |
|
|
|
<p> As Ant1 evolved new types such as <code><path></code> and |
|
|
|
<code><fileset></code> were added. The concept of datatypes has continued |
|
|
|
to evolve to the point where users can now define new datatypes. It would be |
|
|
|
expected that in addition to new types there will be many sub-types created, |
|
|
|
such as new types of fileset. Ant1, however, does not strongly support such type |
|
|
|
extensibility. When a subtype is created by extending an existing type, Ant1 |
|
|
|
requires it to be either used by reference or all tasks which accept the base |
|
|
|
type need to be modified to support the new type. Use by reference is not always |
|
|
|
possible. It will depend on whether the base type has been coded to support |
|
|
|
references. </p> |
|
|
|
<div align="left"> |
|
|
|
<table cellspacing="4" cellpadding="0" border="0"> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#ffffff"> |
|
|
|
|
|
|
|
<p> |
|
|
|
Support polymorphic behaviour, allowing a build file to pass a subtype to a |
|
|
|
task which is defined to accept the base type. Allow task interfaces to be |
|
|
|
defined in terms of interfaces. |
|
|
|
</p> |
|
|
|
|
|
|
|
<p> |
|
|
|
Move reference processing to the core to make it more regular removing the |
|
|
|
burden of type developers to explicitly support references. |
|
|
|
</p> |
|
|
|
|
|
|
|
</td> |
|
|
|
<td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
</table> |
|
|
|
</div> |
|
|
|
</blockquote> |
|
|
|
</td></tr> |
|
|
|
</table> |
|
|
|
<table border="0" cellspacing="0" cellpadding="2" width="100%"> |
|
|
|
<tr><td bgcolor="#828DA6"> |
|
|
|
<font color="#ffffff" face="arial,helvetica,sanserif"> |
|
|
|
<a name="Project object does too much"><strong>Project object does too much</strong></a> |
|
|
|
</font> |
|
|
|
</td></tr> |
|
|
|
<tr><td> |
|
|
|
<blockquote> |
|
|
|
<p> |
|
|
|
In Ant1 the Project object takes on too many roles including all of the |
|
|
|
following: |
|
|
|
</p> |
|
|
|
<ul> |
|
|
|
<li>Holds the project model built when parsing the build file</li> |
|
|
|
<li>Holds the run-time state of the build through the properties and current |
|
|
|
task definitions</li> |
|
|
|
<li>Provides context for task execution. All tasks have a reference to their |
|
|
|
project instance and use it to access core functions</li> |
|
|
|
<li>Provides the implementation of common task operations</li> |
|
|
|
<li>Build event management</li> |
|
|
|
<li>Message logging</li> |
|
|
|
<li>Global filter definitions</li> |
|
|
|
<li>Java Version</li> |
|
|
|
<li>Property replacement</li> |
|
|
|
<li>Message Levels</li> |
|
|
|
<li>Utility functions such as boolean conversion and path translation</li> |
|
|
|
<li>Integration point for embedding Ant</li> |
|
|
|
</ul> |
|
|
|
<p> As a class, Project is not cohesive. Reuse of the Ant core functionality is |
|
|
|
difficulty as all of these concerns bring in many other support classes. |
|
|
|
</p> |
|
|
|
<div align="left"> |
|
|
|
<table cellspacing="4" cellpadding="0" border="0"> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#ffffff"> |
|
|
|
|
|
|
|
<p> |
|
|
|
Separate the various roles of Project into more cohesive classes. |
|
|
|
</p> |
|
|
|
|
|
|
|
</td> |
|
|
|
<td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
</table> |
|
|
|
</div> |
|
|
|
</blockquote> |
|
|
|
</td></tr> |
|
|
|
</table> |
|
|
|
</blockquote> |
|
|
|
</td></tr> |
|
|
|
</table> |
|
|
|
<table border="0" cellspacing="0" cellpadding="2" width="100%"> |
|
|
|
<tr><td bgcolor="#525D76"> |
|
|
|
<font color="#ffffff" face="arial,helvetica,sanserif"> |
|
|
|
<a name="Other Goals"><strong>Other Goals</strong></a> |
|
|
|
</font> |
|
|
|
</td></tr> |
|
|
|
<tr><td> |
|
|
|
<blockquote> |
|
|
|
<p> |
|
|
|
In addition to the issues which arise from Ant1 limitations, there are a number |
|
|
|
of requirements which have emerged in the mailing list discussions about Ant2. |
|
|
|
This isn't a complete list - just the ones I picked up for Mutant. |
|
|
|
</p> |
|
|
|
<table border="0" cellspacing="0" cellpadding="2" width="100%"> |
|
|
|
<tr><td bgcolor="#828DA6"> |
|
|
|
<font color="#ffffff" face="arial,helvetica,sanserif"> |
|
|
|
<a name="Limited project reuse"><strong>Limited project reuse</strong></a> |
|
|
|
</font> |
|
|
|
</td></tr> |
|
|
|
<tr><td> |
|
|
|
<blockquote> |
|
|
|
<p> In Ant1 the only way to reuse build file definitions is to use the |
|
|
|
<code><ant></code> task. While useful, it is relatively coarse-grained. It |
|
|
|
can also be tedious if you are trying to extend an existing project definition - |
|
|
|
that is, adding new targets while retaining a user's ability to access the |
|
|
|
existing targets. </p> |
|
|
|
<p> |
|
|
|
In addition to the extension of projects, it should be possible to compose |
|
|
|
projects creating dependencies between the targets of the different projects, |
|
|
|
and to access the data and definitions of one project by a controlling project |
|
|
|
</p> |
|
|
|
<div align="left"> |
|
|
|
<table cellspacing="4" cellpadding="0" border="0"> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#ffffff"> |
|
|
|
|
|
|
|
<p> |
|
|
|
Allow a project to extend and control other projects |
|
|
|
</p> |
|
|
|
|
|
|
|
</td> |
|
|
|
<td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
</table> |
|
|
|
</div> |
|
|
|
</blockquote> |
|
|
|
</td></tr> |
|
|
|
</table> |
|
|
|
<table border="0" cellspacing="0" cellpadding="2" width="100%"> |
|
|
|
<tr><td bgcolor="#828DA6"> |
|
|
|
<font color="#ffffff" face="arial,helvetica,sanserif"> |
|
|
|
<a name="Ant1 Compatibility - Zero Friction"><strong>Ant1 Compatibility - Zero Friction</strong></a> |
|
|
|
</font> |
|
|
|
</td></tr> |
|
|
|
<tr><td> |
|
|
|
<blockquote> |
|
|
|
<p> |
|
|
|
While it has always been accepted that there will be come backward compatibility |
|
|
|
breaks in moving from Ant1 to Ant2, these should be minimized. If the changeover |
|
|
|
from Ant1 to Ant2 is difficult, it may never happen. On the other hand, the |
|
|
|
openness of the Ant1 interface means that some tasks will not work as expected - |
|
|
|
the most difficult being the <code><script></code> task. |
|
|
|
</p> |
|
|
|
<div align="left"> |
|
|
|
<table cellspacing="4" cellpadding="0" border="0"> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#ffffff"> |
|
|
|
|
|
|
|
<p> |
|
|
|
Achieve a practical level of compatability without degrading the integrity of |
|
|
|
the core's interfaces. A practical level of compatability is intentionally a |
|
|
|
vague measure but it would require the majority of projects in Gump to be built |
|
|
|
without noticeable differences from Ant1 |
|
|
|
</p> |
|
|
|
|
|
|
|
</td> |
|
|
|
<td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
</table> |
|
|
|
</div> |
|
|
|
</blockquote> |
|
|
|
</td></tr> |
|
|
|
</table> |
|
|
|
<table border="0" cellspacing="0" cellpadding="2" width="100%"> |
|
|
|
<tr><td bgcolor="#828DA6"> |
|
|
|
<font color="#ffffff" face="arial,helvetica,sanserif"> |
|
|
|
<a name="XML Configuration"><strong>XML Configuration</strong></a> |
|
|
|
</font> |
|
|
|
</td></tr> |
|
|
|
<tr><td> |
|
|
|
<blockquote> |
|
|
|
<p> |
|
|
|
In Ant1 configuration of Ant is achieved either through the execution of OS |
|
|
|
dependent scripts by the launcher scripts or though properties files which have |
|
|
|
the limited capability to set properties. |
|
|
|
</p> |
|
|
|
<div align="left"> |
|
|
|
<table cellspacing="4" cellpadding="0" border="0"> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#ffffff"> |
|
|
|
|
|
|
|
<p> |
|
|
|
Provide an XML based configuration system with rich capabilities to configure |
|
|
|
the operation of Ant. |
|
|
|
</p> |
|
|
|
|
|
|
|
</td> |
|
|
|
<td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
</table> |
|
|
|
</div> |
|
|
|
</blockquote> |
|
|
|
</td></tr> |
|
|
|
</table> |
|
|
|
<table border="0" cellspacing="0" cellpadding="2" width="100%"> |
|
|
|
<tr><td bgcolor="#828DA6"> |
|
|
|
<font color="#ffffff" face="arial,helvetica,sanserif"> |
|
|
|
<a name="Aspects"><strong>Aspects</strong></a> |
|
|
|
</font> |
|
|
|
</td></tr> |
|
|
|
<tr><td> |
|
|
|
<blockquote> |
|
|
|
<p> |
|
|
|
In Ant1 there are many things which are common to a group of tasks but adding |
|
|
|
the capability to each task is repetitive and tedious. An example would be the |
|
|
|
failonerror attribute which controls whether a task will cause the build to stop |
|
|
|
when it fails. This started on just one task but has since been added to many |
|
|
|
other tasks as users want more fine control over when their builds stop. Aspects |
|
|
|
have been discussed as a mechanism for providing a single implementation of a |
|
|
|
concept or control that can then be applied to tasks independently. |
|
|
|
</p> |
|
|
|
<div align="left"> |
|
|
|
<table cellspacing="4" cellpadding="0" border="0"> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#ffffff"> |
|
|
|
|
|
|
|
<p> |
|
|
|
Investigate the use of an Aspect approach to provide common functionality |
|
|
|
across tasks with a single implementation |
|
|
|
</p> |
|
|
|
|
|
|
|
</td> |
|
|
|
<td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
<tr> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
<td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> |
|
|
|
</tr> |
|
|
|
</table> |
|
|
|
</div> |
|
|
|
</blockquote> |
|
|
|
</td></tr> |
|
|
|
</table> |
|
|
|
</blockquote> |
|
|
|
</td></tr> |
|
|
|
</table> |
|
|
|
</td> |
|
|
|
</tr> |
|
|
|
|
|
|
|
<!-- FOOTER --> |
|
|
|
<tr><td colspan="2"> |
|
|
|
<hr noshade="" size="1"/> |
|
|
|
</td></tr> |
|
|
|
<tr><td colspan="2"> |
|
|
|
<div align="center"><font color="#525D76" size="-1"><em> |
|
|
|
Copyright © 2002, Apache Software Foundation |
|
|
|
</em></font></div> |
|
|
|
</td></tr> |
|
|
|
</table> |
|
|
|
</body> |
|
|
|
</html> |
|
|
|
<!-- end the processing --> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|