source: release-kits/lirk3/resources/gs3-release-maker/ant/docs/ant2/features.html@ 14982

Last change on this file since 14982 was 14982, checked in by oranfry, 16 years ago

initial import of LiRK3

File size: 14.9 KB
Line 
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<html>
3 <head>
4 <meta http-equiv="Content-Language" content="en-us">
5 <title>Ant2 feature list</title>
6
7 <style type="text/css">
8 .comment {
9 COLOR: #900000;
10 BACKGROUND: #ffa;
11 }
12 </style>
13
14 </head>
15
16 <body bgcolor="#FFFFFF">
17
18 <p class="comment">If something looks like this, this is either a
19 request for input or a &quot;REVISIT&quot; marker or similar.</p>
20
21 <h1>Ant2 Goals</h1>
22
23 <p>Even though Ant2 is expected to be incompatible with the
24 current Ant1 series, it still has the same goals. Ant is a Java
25 based build tool and this remains the main focus of it. The
26 original goals of simplicity, understandability and extensibility
27 still stand and Ant2 will try to achieve them even better than
28 Ant1 does.</p>
29
30 <h2>Simplicity and Understandability</h2>
31
32 <p>These two goals are closely related. Ant build files shall be
33 easy to read and understand - at the same time it should be easy
34 to write a custom Ant task and to use the utility classes that
35 Ant2 provides.</p>
36
37 <p>Ant2 shall be more consistent than Ant1 is - this means:</p>
38
39 <ul>
40
41 <li>core tasks will use the same attribute names for common
42 functionality</li>
43
44 <li>similar tasks will be unified to use similar forms.</li>
45
46 <li>different implementations for the same functionality will be
47 hidden behind facade tasks.</li>
48
49 <li>properties and data types will be unified so that they share
50 the same namespace and inheritance rules. <i
51 class="comment">Need to talk about how ${} expansion works for
52 filesets and so on.</i></li>
53
54 </ul>
55
56 <p>Furthermore some things will have to become more explicit:</p>
57
58 <ul>
59
60 <li>remove all magic properties</li>
61
62 <li>make build file writers explicitly state which
63 filters/filtersets a copy task will use</li>
64
65 <li>add scoping rules for properties so that not all of them
66 will be inherited by sub-builds, only those that have been
67 specified explicitly. <i class="comment">Fill in details once
68 they've been sorted out.</i></li>
69
70 </ul>
71
72 <p>The front-ends for Ant2 shall be smart enough to automatically
73 detect the required libraries (like <code>tools.jar</code>), the
74 use of native scripts shall be kept to a minimum.</p>
75
76 <p>Build file writers can attach a message to targets that will be
77 presented to the user if that target is going to be skipped (based
78 on the if/unless attribute of the target).</p>
79
80 <p>Even though Ant installation already is quite simple in Ant1
81 (extract the archive and set two environment variables),
82 alternative ways to install Ant like using
83 <a href="http://java.sun.com/products/javawebstart/">Webstart</a> or
84 a "self-extracting" JAR file will be explored.</p>
85
86 <h2>Extensibility</h2>
87
88 <p>Ant2 like Ant1 uses build files written in XML as its main
89 input, but it will not be restricted to it. The core of Ant2 will
90 work on an object model of Project/Target/Task that is independent
91 of any external representation.</p>
92
93 <p>As an extension of the current <code>&lt;taskdef&gt;</code>
94 concept, tasks can be bundled into task libraries (together with
95 data types and other utility classes). These task libraries are
96 special JAR archives that somehow describe the contained tasks to
97 Ant. Ant will automatically know all tasks contained in task
98 libraries that have been placed into a special directory - in
99 addition task libraries can be referenced and used in a build file
100 explicitly. <i class="comment">Fill in details once they've been
101 sorted out.</i></p>
102
103 <p>It has become apparent, that several &quot;aspects&quot; of
104 tasks are so common that task writers find themselves duplicating
105 code all over again - things like classpath handling or &quot;do
106 we stop the build if this task fails?&quot; functionality for
107 example. Ant2 will provide a way to let the user attach an
108 &quot;aspect handler&quot; to a project - all attributes that live
109 in a certain namespace are going to be passed to this handler. <i
110 class="comment">Need to talk about TaskContext here.</i></p>
111
112 <p>Ant2 will farm out common functionality from tasks into utility
113 classes so that task writers can benefit from a tested and stable
114 framework - they shouldn't need to deal with existing tasks
115 directly (like some tasks &quot;abuse&quot; the
116 <code>&lt;touch&gt;</code> task in Ant1).</p>
117
118 <p>Ant2 will provide a way to define tasks that itself can have
119 tasks as child elements without knowing all defined tasks at
120 compile time. Discussions on ant-dev usually talk about
121 &quot;container tasks&quot; in this context.</p>
122
123 <p>The only way to &quot;include&quot; common XML snippets so far
124 has been the usage of external SYSTEM entities, a mechanism that
125 is tied to DTDs and doesn't mix well with alternative
126 approaches like XML Schema. Ant2 will provide a built-in include
127 mechanism.</p>
128
129 <h1>New/Modified Features</h1>
130
131 <p>Ant2 will run the build process fully dynamically, which means
132 that task won't be instantiated before they are actually being run
133 and <code>${}</code> expansion will see the very latest value of a
134 property. It will be possible to reassign values of properties via
135 a built-in task.</p>
136
137 <h2>Compatibility with Ant1</h2>
138
139 <p>Ant2 is going to break Ant1 in several ways:</p>
140
141 <ul>
142
143 <li>Tasks written for Ant1 won't work in Ant2 as the API of
144 Ant's core and the names of utility classes are going to
145 change. There will probably be adaptors and utility classes to
146 ease the transition for task writers.</li>
147
148 <li>Build files written for Ant1 will probably not be valid in
149 Ant2 or at least not yield the same results. It is expected that
150 Ant2 will come with a tool to translate Ant1 build files into
151 equivalent Ant2 versions</li>
152
153 <li>magic properties like <code>build.compiler</code> may
154 disappear and be replaced by a different customization
155 concept.</li>
156
157 <li>Ant2 is going to require a JDK version 1.2 or above and a
158 JAXP compliant parser version 1.1 or above.</li>
159
160 <li>If you specify more than one target in another target's
161 depends attribute, Ant1 will execute these targets from left to
162 right (as long as the dependency tree permits it) - Ant2 will
163 not guarantee this behavior but will allow build file writers to
164 specify the order explicitly.</li>
165
166 <li>Dereferencing a non existent property a via ${a} will result
167 in a build failure.</li>
168
169 </ul>
170
171 <h2>Support Integration of Ant Into Other Tools</h2>
172
173 <p>Ant2 will have a clear separation between the front-end that is
174 responsible for user interactions, the object model that
175 represents the project to build and the part of Ant that runs the
176 build process itself <i class="comment">Name that TaskEngine,
177 ProjectEngine, ExecutionEngine or what?</i>. This separation is
178 expected to ease the integration of Ant (or parts of it) into
179 other products.</p>
180
181 <p>Ant2 itself will include a command line front-end and Antidote
182 will become the GUI front-end to it. Other front-ends like a
183 servlet front-end are expected <i class="comment">outside of
184 Ant's core</i> as well.</p>
185
186 <p>In addition to this separation, the following features should
187 help people who want to integrate Ant into their products:</p>
188
189 <ul>
190
191 <li>It will be possible to cancel a running build process.</li>
192
193 <li>Ant will detach from <code>System.err/.out/.in</code>
194 completely and communicate with the front-end via a well defined
195 API. The front-end will have to handle user input for tasks
196 that need it (tasks that ask for a password for example).</li>
197
198 <li>Tasks will provide some way to identify their attributes
199 from the outside. <i class="default">fill in details</i></li>
200
201 </ul>
202
203 <h2>More Control for Users and Build File Writers</h2>
204
205 <p>Ant2 will use a <code>BuildListener</code> concept similar to
206 the one of Ant1 but may provide a richer set of events. It will be
207 possible to attach and detach listeners to a build process from
208 within the build file and to modify the behavior of attached
209 listeners.</p>
210
211 <p>In Ant1 users have little control over how things work. There
212 are a couple of magic properties to make Ant chose a preferred
213 compiler or modify the CLASSPATH, but they are barely documented.
214 If users want to set these properties for every build process,
215 they have to learn the undocumented tricks of the
216 <code>ANT_OPTS</code> environment variable or the
217 <code>~/.antrc</code> file.</p>
218
219 <p>Ant2 will have a well defined system to specify user
220 preferences. This system will not only let user chose their
221 compiler but also give them a chance to provide default values for
222 attributes (say you always want the <code>debug</code> attribute
223 of the <code>javac</code> task to be true - unless it has been
224 disabled explicitly). <i class="comment">Need to give details once
225 they've been sorted out.</i></p>
226
227 <h2>Documentation System</h2>
228
229 <p>All tasks will be documented in XML files using a common DTD <i
230 class="comment">Still need to define it</i> - task libraries are
231 expected to include the documentation using this DTD inside the
232 library itself.</p>
233
234 <h2>Better Subbuild Handling</h2>
235
236 <p class="comment">Is there something beyond &quot;should become
237 better&quot; right now?</p>
238
239 <h2>Data Types</h2>
240
241 <p>Ant1 supports a limited set of data types (fileset, patternset
242 and path) and at least up to Ant 1.3 it is not possible to
243 register custom data types without writing a task that does this.
244 Ant2 will provide a built-in mechanism to define new data
245 types.</p>
246
247 <p>Existing data-types will be improved, the files in a fileset
248 can be chosen based on more than just pattern matching for example
249 (modification time or permissions for example). Ant2 will have
250 built-in tasks for set operations.</p>
251
252 <p>Data types and properties will share the same name space and
253 follow the same scoping and precedence rules.
254 <i class="comment">${} again.</i></p>
255
256 <h2>Multi-Threading of Tasks Within a Target</h2>
257
258 <p>It will be possible to run several tasks in parallel - these
259 tasks will belong to the same target and all tasks will be joined
260 at the end of the target.</p>
261
262 <h2>Internationalization</h2>
263
264 <p>Ant2 itself will provide internationalized (error) messages and
265 provide utility classes to help task writers to do the same.
266 <i class="comment">These utility classes may very well come from a
267 different (Jakarta) project</i>.</p>
268
269 <p>Ant's primary language and the language of the build file
270 will continue to be English.</p>
271
272 <h1>Rejected Features</h1>
273
274 <p>This is list is not complete, it just highlights some of the
275 rejected features and tries to explain why they've been
276 rejected. Two very common reasons to reject something were, that
277 the request has been too vague or the same functionality could
278 already be provided by some other accepted new feature.</p>
279
280 <p>For a complete listing of all requested features, see <a
281 href="requested-features.html">requested-features.html</a>. The
282 discussion on all topics can be followed in the <a
283 href="http://marc.theaimsgroup.com/?l=ant-dev&r=1&w=2">archives
284 for ant-dev</a> in threads starting from 2001-03-21 - the subject
285 lines contained either <code>[VOTE]</code> or
286 <code>[DISC]</code>.</p>
287
288 <h2>Simple Flow-Control</h2>
289
290 <p>People asking for these kind of things have often heard the
291 standard "Ant shall not become yet another scripting language, Ant
292 shall not fall into the same traps make/Perl did ..." response
293 from the committers and some long-term ant-dev people.</p>
294
295 <p>The long version of that answer is:</p>
296
297 <ul>
298 <li>There are lots of open source scripting languages, there is
299 no need to define a new one.</li>
300
301 <li>Ant has been created to be a build tool. While you can use
302 it for a whole lot of other things, this is not Ant's primary
303 focus (and it shouldn't be). Most use-cases that ask for
304 flow-control are out of Ant's scope.</li>
305
306 <li>Ant already provides the requested functionality for many
307 common situations. The execon and apply tasks can be used to
308 iterate over a set of files as the (planed for Ant2) javaon and
309 anton tasks will do.</li>
310
311 <li>Providing flow-control inside Ant's core would increase the
312 complexity of this core. This would make it difficult for new
313 contributors to understand how Ant works and increase the
314 maintenance cost for Ant at the same time. The goal of the Ant
315 developers is to push as much complexity and functionality out
316 of Ant's core into the tasks as possible.</li>
317 </ul>
318
319 <p>That being said, Ant2 will make it easy to write iteration or
320 conditional tasks via the new container task concept. We expect
321 foreach, switch and if tasks to be written, but they will probably
322 not become core parts of the Ant distribution.</p>
323
324 <h2>Advanced Conditionals for if/unless Attributes</h2>
325
326 <p>The argument here is the same as for flow-control. We are
327 talking about complexity that can be pushed from the core to tasks
328 - and that is what will be done. Instead of additional power for
329 the if/unless attributes, Ant2 will have a new task that can set
330 properties based on the values of other properties or logical
331 combinations of other conditions, something like (making up
332 syntax):</p>
333
334<pre>
335&lt;condition name=&quot;javamail-complete&quot;&gt;
336 &lt;and&gt;
337 &lt;available class=&quot;javax.mail.Transport&quot;/&gt;
338 &lt;available class=&quot;javax.activation.DataHandler&quot;/&gt;
339 &lt;/and&gt;
340&lt;/condition&gt;
341</pre>
342
343 <p>will become possible</p>
344
345 <h2>Multi-Threaded Execution of Targets</h2>
346
347 <p>The general feeling was, that the combination of target
348 dependencies and multi-threading would soon become too complex,
349 especially since Ant2 will allow people to explicitly enforce the
350 order in which (independent) targets will be executed.</p>
351
352 <p>This issue will be explored again later, it has not been
353 rejected for all time being, but it is out of scope for
354 Ant&nbsp;2.0</p>
355
356 <h1>Ideas for New Tasks and Tools</h1>
357
358 <p>Please refer to <a
359 href="requested-features.html">requested-features.html</a> in the
360 section &quot;I. Things that don't affect the core but are
361 requests for new tasks or enhancements to existing tasks.&quot;
362 for this.</p>
363
364 <hr>
365 <p align="center">$Id: features.html,v 1.6 2001/10/31 07:59:07 bodewig Exp $</p>
366 <p align="center">Copyright &copy; 2001 Apache Software
367 Foundation. All rights Reserved.</p>
368 </body>
369</html>
Note: See TracBrowser for help on using the repository browser.