| <html> |
| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> |
| <title>Ant Functional Requirements Document</title> |
| </head> |
| <body> |
| <h2>Ant Functional Requirements</h2> |
| <h3>Roles</h3> |
| <p><b>User: </b>runs Ant with a complete build specification and/or |
| writes Ant build specifications.</p> |
| <p><b>Task Developer: </b>writes/modifies Ant tasks.</p> |
| <p><b>Extensions Developer: </b>develops extensions like a GUI, IDE plugin, |
| (scripting extension?)</p> |
| <p><b>Core Developer: </b>works on the Ant core</p> |
| <h3>Requirements from the Ant User perspective</h3> |
| <p>It should be easy to write a build file for small Java programs. It should |
| be possible to write a build file set for large Java systems. Maintenance |
| of such a set should be easy (e.g. no duplication of information).</p> |
| <p>Every build process contains dependencies (e.g. item A needs B to be available |
| before its own build can start). It should be possible to specify these |
| dependencies in a declarative way.</p> |
| <p>Suppose a working build specification for system A is available. It should |
| be possible for system B to declare dependencies to <i>(modules of?)</i> system |
| A without touching the build specification of A. Ant should be able to handle |
| dependencies between modules which form a DAG.</p> |
| <p>It should be possible to modify details of the actual build (e.g. classpath, |
| used compiler) without the need to change the build specification. This |
| feature is needed when starting Ant (e.g. configuration with command line |
| parameters) and for a subproject build driven by the build of a dependent |
| project.</p> |
| <p>Often similar items have to be built. Therefore it should be possible |
| to provide general <i>(template?)</i> build specifications, and to declare for |
| a concrete item that it should be built according to such a general specification.</p> |
| <p>One result of the build process should be a log which shows what has been done.</p> |
| <h3>Requirements from the task developer perspective</h3> |
| <p>A task should not need to know the structure of a build specification. |
| It would have to provide an interface (not necessarily in the Java language |
| sense) for the Ant core to input the necessary configuration attributes |
| and to execute the task). There should be a standard functionality to allow |
| a task doing log output.</p> |
| <p>An interface (again not necessarily in the Java language sense) should |
| be provided which allows a task to get <i>(and set?)</i> information about it's |
| context in the build process.</p> |
| <h3>Requirements from the extensions developer perspective</h3> |
| <p>The Ant core should be independent from a specific representation of the |
| build specification. It should be possible to create a specification programmatically |
| (thereby allowing the introduction of new representations). The core should |
| do no in- or output itself. Build errors should always lead to throwing |
| an Exception.</p> |
| <p>Access to the current state of a build should be available, and its modification |
| possible.</p> |
| </body> |
| </html> |
| |