You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

todo.html 45 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <!-- Content Stylesheet for Site -->
  3. <!-- start the processing -->
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
  7. <meta name="author" value="Adam Murdoch">
  8. <meta name="email" value="adammurdoch@apache.org">
  9. <meta name="author" value="Peter Donald">
  10. <meta name="email" value="peter@apache.org">
  11. <title>Apache Myrmidon - Get Involved</title>
  12. </head>
  13. <body bgcolor="#ffffff" text="#000000" link="#525D76">
  14. <table border="0" width="100%" cellspacing="0">
  15. <!-- TOP IMAGE -->
  16. <tr>
  17. <td> <td colspan="2">
  18. <a href="http://jakarta.apache.org"><img src="http://jakarta.apache.org/images/jakarta-logo.gif" align="left" border="0"/></a>
  19. </td>
  20. </td>
  21. <td valign="bottom"><div align="right"><b><font size="+3" color="#525D76">Apache Myrmidon</font></b></div></td>
  22. </tr>
  23. </table>
  24. <table border="0" width="100%" cellspacing="4">
  25. <tr><td colspan="2">
  26. <hr noshade="" size="1"/>
  27. </td></tr>
  28. <tr>
  29. <!-- LEFT SIDE NAVIGATION -->
  30. <td valign="top" nowrap="true">
  31. <p><strong>Myrmidon</strong></p>
  32. <ul>
  33. <li> <a href="./index.html">Introduction</a>
  34. </li>
  35. <li> <a href="./getinvolved.html">Get Involved</a>
  36. </li>
  37. <li> <a href="./user.html">Building Myrmidon</a>
  38. </li>
  39. <li> <a href="./todo.html">Todo List</a>
  40. </li>
  41. </ul>
  42. <p><strong>User Guide</strong></p>
  43. <ul>
  44. <li> <a href="./buildfile.html">Build file</a>
  45. </li>
  46. <li> <a href="./vfs.html">Virtual File System</a>
  47. </li>
  48. <li> <a href="./ant1compat.html">Ant1 Compatibility Layer</a>
  49. </li>
  50. <li> <a href="./differences.html">Differences to Ant1</a>
  51. </li>
  52. <li> <a href="./task.html">My First Task</a>
  53. </li>
  54. </ul>
  55. <p><strong>Extending Ant</strong></p>
  56. <ul>
  57. <li> <a href="./configuring.html">Configuration HOWTO</a>
  58. </li>
  59. <li> <a href="./converter.html">Converter HOWTO</a>
  60. </li>
  61. <li> <a href="./type.html">Type HOWTO</a>
  62. </li>
  63. <li> <a href="./classloader.html">ClassLoader HOWTO</a>
  64. </li>
  65. <li> <a href="./librarys.html">Library HOWTO</a>
  66. </li>
  67. </ul>
  68. <p><strong>Container Design</strong></p>
  69. <ul>
  70. </ul>
  71. </td>
  72. <td align="left" valign="top">
  73. <table border="0" cellspacing="0" cellpadding="2" width="100%">
  74. <tr><td bgcolor="#525D76">
  75. <font color="#ffffff" face="arial,helvetica,sanserif">
  76. <a name="Todo List"><strong>Todo List</strong></a>
  77. </font>
  78. </td></tr>
  79. <tr><td>
  80. <blockquote>
  81. <p>The broad goal is to grow Myrmidon from a prototype task engine into a fully
  82. fledged build system, that can serve as the basis for Ant 2. The following
  83. sections describe some of the many things which still need to be done to
  84. achieve that goal. This list is currently under construction.</p>
  85. <table border="0" cellspacing="0" cellpadding="2" width="100%">
  86. <tr><td bgcolor="#828DA6">
  87. <font color="#ffffff" face="arial,helvetica,sanserif">
  88. <a name="Integrate XDocs proposal"><strong>Integrate XDocs proposal</strong></a>
  89. </font>
  90. </td></tr>
  91. <tr><td>
  92. <blockquote>
  93. <p>Integrate with the XDocs proposal that generates XML documentation for
  94. tasks. Rework that proposal so that it knows about the myrmidon specific
  95. patterns and features. Also rework it so that it can support reading
  96. documentation and examples from side-by-side the task.</p>
  97. </blockquote>
  98. </td></tr>
  99. </table>
  100. <table border="0" cellspacing="0" cellpadding="2" width="100%">
  101. <tr><td bgcolor="#828DA6">
  102. <font color="#ffffff" face="arial,helvetica,sanserif">
  103. <a name="TaskInfo"><strong>TaskInfo</strong></a>
  104. </font>
  105. </td></tr>
  106. <tr><td>
  107. <blockquote>
  108. <p>Consider allowing task writers to write their own TaskInfo objects
  109. (or at least have them generated from XDoclet directives). This would
  110. encompass both documentation and perhaps introspection of the types.</p>
  111. </blockquote>
  112. </td></tr>
  113. </table>
  114. <table border="0" cellspacing="0" cellpadding="2" width="100%">
  115. <tr><td bgcolor="#828DA6">
  116. <font color="#ffffff" face="arial,helvetica,sanserif">
  117. <a name="XML Catalog to load XML Fragments"><strong>XML Catalog to load XML Fragments</strong></a>
  118. </font>
  119. </td></tr>
  120. <tr><td>
  121. <blockquote>
  122. <p>
  123. When including fragments of XML we are currently forced to use relative paths.
  124. However this is sometimes undesirable when a single fragment needs to be used
  125. across several projects in several different locations. Instead we could use
  126. a Catalog to name the fragment and then each developer would only need to install
  127. the fragment once and it would be accessible from all the projects.
  128. </p>
  129. </blockquote>
  130. </td></tr>
  131. </table>
  132. <table border="0" cellspacing="0" cellpadding="2" width="100%">
  133. <tr><td bgcolor="#828DA6">
  134. <font color="#ffffff" face="arial,helvetica,sanserif">
  135. <a name="Refactor Java Infrastructure into a Service"><strong>Refactor Java Infrastructure into a Service</strong></a>
  136. </font>
  137. </td></tr>
  138. <tr><td>
  139. <blockquote>
  140. <p>Much like Exec should be decoupled from Ant runtime, so should classes
  141. to implement java task for the same benefits.</p>
  142. </blockquote>
  143. </td></tr>
  144. </table>
  145. <table border="0" cellspacing="0" cellpadding="2" width="100%">
  146. <tr><td bgcolor="#828DA6">
  147. <font color="#ffffff" face="arial,helvetica,sanserif">
  148. <a name="Structural Dependency Utils"><strong>Structural Dependency Utils</strong></a>
  149. </font>
  150. </td></tr>
  151. <tr><td>
  152. <blockquote>
  153. <p>
  154. In the present ant, it is required that each task manage dependency separately.
  155. This makes it a lot of work to implement even simple dependency checking. To this
  156. day many of the core tasks do not implement it correctly. I am specifically
  157. talking about "structural" dependency information. The main reason is that it is
  158. painful to implement.
  159. </p>
  160. <p>
  161. Some tasks do no dependency checking and will recompile/transform/etc everytime.
  162. Others may perform a simple dependency checking (ie if source file is newer than
  163. destination file then recompile). Ideally a dependency system would actually
  164. calculate the dependencies correctly. So we need to have some mechanism to determine
  165. that <code>foo.c</code> actually depends upon <code>foo.h</code>, <code>bar.h</code>
  166. and <code>baz.h</code>. As this information is particular to each different task
  167. we need to allow tasks to implement this behaviour. Possibly by supplying an interface
  168. of the form;
  169. </p>
  170. <div align="left">
  171. <table cellspacing="4" cellpadding="0" border="0">
  172. <tr>
  173. <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
  174. <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
  175. <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
  176. </tr>
  177. <tr>
  178. <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
  179. <td bgcolor="#ffffff"><pre>
  180. public interface DependencyGenerator
  181. {
  182. File[] generateDependencies( File file );
  183. }
  184. </pre></td>
  185. <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
  186. </tr>
  187. <tr>
  188. <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
  189. <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
  190. <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
  191. </tr>
  192. </table>
  193. </div>
  194. <p>
  195. Generating the dependency information is a costly operation and thus we do not want to
  196. be doing it everytime you run ant. We want to generate it on the initial build and then
  197. persist somewhere. Everytime a file is out of date, it's dependency information would
  198. be regenerated and stored in the dependency cache. Ideally this cache would also store the
  199. above mentioned coloring information. So the entry for <code>foo.c</code> may declare that
  200. it is dependent upon <code>foo.h</code>, <code>bar.h</code> and <code>baz.h</code>, aswell
  201. as being compiled with -O2 flag. If any of the dependencies have changed or are out of date
  202. then foo.c would need to be recompiled.
  203. </p>
  204. <p>
  205. A possible API would be
  206. </p>
  207. <div align="left">
  208. <table cellspacing="4" cellpadding="0" border="0">
  209. <tr>
  210. <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
  211. <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
  212. <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
  213. </tr>
  214. <tr>
  215. <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
  216. <td bgcolor="#ffffff"><pre>
  217. DependencyManager dm = ...;
  218. dm.setFileSet( myFileSet );
  219. dm.setDependencyCache( myDependencyCacheFile );
  220. File[] files = cm.getOutOfDate();
  221. </pre></td>
  222. <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
  223. </tr>
  224. <tr>
  225. <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
  226. <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
  227. <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
  228. </tr>
  229. </table>
  230. </div>
  231. </blockquote>
  232. </td></tr>
  233. </table>
  234. <table border="0" cellspacing="0" cellpadding="2" width="100%">
  235. <tr><td bgcolor="#828DA6">
  236. <font color="#ffffff" face="arial,helvetica,sanserif">
  237. <a name="Antlibs storing templates"><strong>Antlibs storing templates</strong></a>
  238. </font>
  239. </td></tr>
  240. <tr><td>
  241. <blockquote>
  242. <p>After a templating system is formalized it would useful to define
  243. a mechanism via which you can store templates in an antlib. These
  244. templates could then be loaded and used by build files through a
  245. "standard" mechanism. This may need to be merged with the XML catalog
  246. system.</p>
  247. </blockquote>
  248. </td></tr>
  249. </table>
  250. <table border="0" cellspacing="0" cellpadding="2" width="100%">
  251. <tr><td bgcolor="#828DA6">
  252. <font color="#ffffff" face="arial,helvetica,sanserif">
  253. <a name="Antlibs Storing General Resources"><strong>Antlibs Storing General Resources</strong></a>
  254. </font>
  255. </td></tr>
  256. <tr><td>
  257. <blockquote>
  258. <p>Add a system via which ant libs can store general resources for
  259. consumption by build users. This could be used to store the XML fragments
  260. for the XML catalog, the template fragments for templates, images for
  261. documentation system and so forth.</p>
  262. </blockquote>
  263. </td></tr>
  264. </table>
  265. <table border="0" cellspacing="0" cellpadding="2" width="100%">
  266. <tr><td bgcolor="#828DA6">
  267. <font color="#ffffff" face="arial,helvetica,sanserif">
  268. <a name="Coloring API"><strong>Coloring API</strong></a>
  269. </font>
  270. </td></tr>
  271. <tr><td>
  272. <blockquote>
  273. <p>
  274. When you execute a task such as "javac" there is two types of dependency information
  275. that is important to analyze before we determine if we need to recompile a file. Say
  276. we are compiling <code>Foo.java</code>, it may depend on the <code>Bar.java</code>
  277. file. We call this "structural" dependency information - the structure of the source file
  278. determines what other files it depend upon. However there is also "environmental"
  279. dependency information. For instance if the <code>Foo.java</code> file was compiled with
  280. <code>debug="true"</code> last run and this time needs to be compiled with
  281. <code>debug="false"</code> then it is out of date and needs to be recompiled. We call this
  282. "environmental" dependency information "coloring".
  283. </p>
  284. <p>
  285. So we need to create an infrastructure that allows tasks to manage "coloring". So a task
  286. should be able to add coloring information for each resource processed. When the task
  287. comes to process the resource again it will detect if the coloring has changed and if it
  288. has will force a recompile.
  289. </p>
  290. <p>
  291. An API for such a bean has yet to be established but an example API would be.
  292. </p>
  293. <div align="left">
  294. <table cellspacing="4" cellpadding="0" border="0">
  295. <tr>
  296. <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
  297. <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
  298. <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
  299. </tr>
  300. <tr>
  301. <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
  302. <td bgcolor="#ffffff"><pre>
  303. ColoringManager cm = ...;
  304. cm.addColor( &quot;debug&quot;, &quot;true&quot; );
  305. cm.addColor( &quot;optimize&quot;, &quot;false&quot; );
  306. cm.setFileSet( myFileSet );
  307. File[] files = cm.getOutOfDate();
  308. </pre></td>
  309. <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
  310. </tr>
  311. <tr>
  312. <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
  313. <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
  314. <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
  315. </tr>
  316. </table>
  317. </div>
  318. </blockquote>
  319. </td></tr>
  320. </table>
  321. <table border="0" cellspacing="0" cellpadding="2" width="100%">
  322. <tr><td bgcolor="#828DA6">
  323. <font color="#ffffff" face="arial,helvetica,sanserif">
  324. <a name="Create Task/Element/Attribute Naming guidelines"><strong>Create Task/Element/Attribute Naming guidelines</strong></a>
  325. </font>
  326. </td></tr>
  327. <tr><td>
  328. <blockquote>
  329. <p> Currently Ant has a mixture of tasks from various stages it's evolution, with different
  330. authors and each utilizing different naming patterns. Some tasks use names such as
  331. "src" and "dest" while others use "file" and "tofile". It would be preferrable if
  332. consistent naming patterns were used. It is recomended that we come up with a "best
  333. practices" document to document our recomended naming patterns.</p>
  334. <p>Before we can come up with such a document we need to identify common patterns through
  335. out the tasks. Several tasks have the notion of transforming input from a "source"
  336. to a "destination". So we should have consistent naming schemes for these attributes and
  337. elements. Analysis of existing tasks will likely bring out other similar patterns. Once
  338. we have identified and documented these similarities then we can establish conventions.</p>
  339. </blockquote>
  340. </td></tr>
  341. </table>
  342. <table border="0" cellspacing="0" cellpadding="2" width="100%">
  343. <tr><td bgcolor="#828DA6">
  344. <font color="#ffffff" face="arial,helvetica,sanserif">
  345. <a name="Rethink Notification/Event scheme"><strong>Rethink Notification/Event scheme</strong></a>
  346. </font>
  347. </td></tr>
  348. <tr><td>
  349. <blockquote>
  350. <p>We need to rethink the whole notificaiton scheme. Should tasks be able to
  351. raise events? Probably as long as we have <em>ContainerTasks</em>. Should tasks
  352. be able to query state of run? ie Can a task request "are we paused?" or "are we
  353. stopped?" ? Probably as that way long running tasks are given the opportunity
  354. to be gracefully halted by the end users (primarily aimed at IDE vendors here).</p>
  355. </blockquote>
  356. </td></tr>
  357. </table>
  358. <table border="0" cellspacing="0" cellpadding="2" width="100%">
  359. <tr><td bgcolor="#828DA6">
  360. <font color="#ffffff" face="arial,helvetica,sanserif">
  361. <a name="XPath-like Locators for tasks"><strong>XPath-like Locators for tasks</strong></a>
  362. </font>
  363. </td></tr>
  364. <tr><td>
  365. <blockquote>
  366. <p>Most tasks are grouped into some sort of task container. The task containers
  367. can be things like workspaces, projects, targets or other tasks. Each of these
  368. containers usually has a name. Thus we could refer to tasks via a path such as
  369. "/avalon/compile/javac" would refer to the task "javac" in the target "compile"
  370. in the project "avalon". In the past it has been requested that a task get access
  371. to this path programatically - other people have also asked for access to things
  372. like the currently running target. We need to assess this and decide whether we
  373. wish to support it.</p>
  374. <p>Another point to think about is that we could use XPath-like string to designate
  375. to other tasks to execute. ie antcall would refer to a path rather than a target name</p>
  376. </blockquote>
  377. </td></tr>
  378. </table>
  379. <table border="0" cellspacing="0" cellpadding="2" width="100%">
  380. <tr><td bgcolor="#828DA6">
  381. <font color="#ffffff" face="arial,helvetica,sanserif">
  382. <a name="Embeddor HOWTO"><strong>Embeddor HOWTO</strong></a>
  383. </font>
  384. </td></tr>
  385. <tr><td>
  386. <blockquote>
  387. <p>Assigned To: Peter</p>
  388. <p>Write a HOWTO describing how to embed Myrmidon into other
  389. applications.</p>
  390. </blockquote>
  391. </td></tr>
  392. </table>
  393. <table border="0" cellspacing="0" cellpadding="2" width="100%">
  394. <tr><td bgcolor="#828DA6">
  395. <font color="#ffffff" face="arial,helvetica,sanserif">
  396. <a name="Optional Dependencies"><strong>Optional Dependencies</strong></a>
  397. </font>
  398. </td></tr>
  399. <tr><td>
  400. <blockquote>
  401. <p>Assigned To: Peter</p>
  402. <p>Extend Myrmidons library management facilities so that optional
  403. dependencies may be declared for a library. ie The library will still
  404. operate in absence of such libraries but can provide further features
  405. if these libraries are present. Most likely this will be done via a
  406. new manifest entry "Optional-Extension-List:" that behaves similar
  407. to "Extension-List:" except that the extensions are optional.</p>
  408. </blockquote>
  409. </td></tr>
  410. </table>
  411. <table border="0" cellspacing="0" cellpadding="2" width="100%">
  412. <tr><td bgcolor="#828DA6">
  413. <font color="#ffffff" face="arial,helvetica,sanserif">
  414. <a name="Facade task HOWTO"><strong>Facade task HOWTO</strong></a>
  415. </font>
  416. </td></tr>
  417. <tr><td>
  418. <blockquote>
  419. <p>Currently we have a few tasks that have multiple implementations. For instance
  420. Javac task can actually call jikes, jvc, classic javac or modern javac. Similar things
  421. will be seen with the jspc task and the cc task (if it ever gets written). We have a base
  422. class that is meant to facilitate this sort of task and make it easy to develope. See
  423. AbstractFacadeTask. However we need to write up a HOWTO so people can use it.</p>
  424. </blockquote>
  425. </td></tr>
  426. </table>
  427. <table border="0" cellspacing="0" cellpadding="2" width="100%">
  428. <tr><td bgcolor="#828DA6">
  429. <font color="#ffffff" face="arial,helvetica,sanserif">
  430. <a name="Mail tasks"><strong>Mail tasks</strong></a>
  431. </font>
  432. </td></tr>
  433. <tr><td>
  434. <blockquote>
  435. <p>Convert the ant1.x Mail tasks to myrmidon.</p>
  436. </blockquote>
  437. </td></tr>
  438. </table>
  439. <table border="0" cellspacing="0" cellpadding="2" width="100%">
  440. <tr><td bgcolor="#828DA6">
  441. <font color="#ffffff" face="arial,helvetica,sanserif">
  442. <a name="Security Manager"><strong>Security Manager</strong></a>
  443. </font>
  444. </td></tr>
  445. <tr><td>
  446. <blockquote>
  447. <p>Add the ability to run java programs that call System.exit() by adding a
  448. security manager. Should look something like:</p>
  449. <div align="left">
  450. <table cellspacing="4" cellpadding="0" border="0">
  451. <tr>
  452. <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
  453. <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
  454. <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
  455. </tr>
  456. <tr>
  457. <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
  458. <td bgcolor="#ffffff"><pre>
  459. public class MyrmidonSecurityManager
  460. extends SecurityManager
  461. {
  462. public void checkExit( final int status )
  463. {
  464. throw new ExitException( status );
  465. }
  466. public void checkPermission( final Permission permission )
  467. {
  468. }
  469. }
  470. </pre></td>
  471. <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
  472. </tr>
  473. <tr>
  474. <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
  475. <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
  476. <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
  477. </tr>
  478. </table>
  479. </div>
  480. </blockquote>
  481. </td></tr>
  482. </table>
  483. <table border="0" cellspacing="0" cellpadding="2" width="100%">
  484. <tr><td bgcolor="#828DA6">
  485. <font color="#ffffff" face="arial,helvetica,sanserif">
  486. <a name="Self Hosting"><strong>Self Hosting</strong></a>
  487. </font>
  488. </td></tr>
  489. <tr><td>
  490. <blockquote>
  491. <p>Myrmidon must be able to build itself. Currently, it is built using
  492. Ant 1.x. Ultimately, Myrmidon should be able to build itself from exactly the
  493. same build file. To start with, however, there is no need for Myrmidon to be
  494. able to do this. Myrmidon should also be able to be bootstrapped (that is, be
  495. able to be built from scratch, without using Ant 1.x at all).</p>
  496. </blockquote>
  497. </td></tr>
  498. </table>
  499. <table border="0" cellspacing="0" cellpadding="2" width="100%">
  500. <tr><td bgcolor="#828DA6">
  501. <font color="#ffffff" face="arial,helvetica,sanserif">
  502. <a name="Validation Pass"><strong>Validation Pass</strong></a>
  503. </font>
  504. </td></tr>
  505. <tr><td>
  506. <blockquote>
  507. <p>Consider calling validate() on task prior to execute(). This would allow
  508. us to have a "make -k" mode that actually did basic validation and would also
  509. encourage task writers to do validation properly.</p>
  510. </blockquote>
  511. </td></tr>
  512. </table>
  513. <table border="0" cellspacing="0" cellpadding="2" width="100%">
  514. <tr><td bgcolor="#828DA6">
  515. <font color="#ffffff" face="arial,helvetica,sanserif">
  516. <a name="Paths"><strong>Paths</strong></a>
  517. </font>
  518. </td></tr>
  519. <tr><td>
  520. <blockquote>
  521. <p>Consider allowing the user to configure the ant system by setting the
  522. following path types.</p>
  523. <ul>
  524. <li>ant.type.path: path that is used to search for the type libraries</li>
  525. <li>ant.ext.path: path that is used to search for "Optional Packages"
  526. or extensions.</li>
  527. </ul>
  528. <p>
  529. The default search path will probably include a per-user path element,
  530. a workspace path element and a system path elemtn that are searched in
  531. that order. Some possible defaults;
  532. </p>
  533. <ul>
  534. <li>Unix Per-user: ${user.home}/.ant/lib, ${user.home}/.ant/ext</li>
  535. <li>Windows Per-user: ${user.home}/ant/lib, ${user.home}/ant/ext</li>
  536. <li>MacOSX Per-user: ${user.home}/Library/Ant/lib,
  537. ${user.home}/Library/Ant/ext</li>
  538. <li>Unix System-wide: /opt/ant/lib, /opt/ant/ext</li>
  539. <li>Unix System-wide: /usr/local/ant/lib, /usr/local/ant/ext</li>
  540. <li>Windows System-wide: %SYS_DRIVE%/Program Files/ant/lib,
  541. %SYS_DRIVE%/Program Files/ant/ext</li>
  542. <li>MacOSX System-wide: /Library/Ant/lib, /Library/Ant/ant/ext</li>
  543. </ul>
  544. </blockquote>
  545. </td></tr>
  546. </table>
  547. <table border="0" cellspacing="0" cellpadding="2" width="100%">
  548. <tr><td bgcolor="#828DA6">
  549. <font color="#ffffff" face="arial,helvetica,sanserif">
  550. <a name="Ant 1.x Compatibility"><strong>Ant 1.x Compatibility</strong></a>
  551. </font>
  552. </td></tr>
  553. <tr><td>
  554. <blockquote>
  555. <p>The Ant1 Compatibility layer is still in early stages of development.
  556. </p>
  557. <ul>
  558. <li>Get a version of <code>&lt;antcall&gt;</code> working.</li>
  559. <li>
  560. Provide hooks between Ant1 references and Myrmidon properties.
  561. May use converters for adapting Ant2 objects (like Ant2
  562. <code>&lt;path&gt;</code> or <code>&lt;fileset&gt;</code>)
  563. as Ant1 types.
  564. </li>
  565. <li>
  566. Missing tests:
  567. <ul>
  568. <li>Make sure properties are shared between Ant1 and Myrmidon tasks.</li>
  569. </ul>
  570. </li>
  571. <li>Get GUMP runs going using Myrmidon.</li>
  572. <li>Add protected accessors for get/set/list properties in
  573. Ant1 Project, to minimise the amount of code duplication in
  574. Ant1CompatProject.</li>
  575. </ul>
  576. </blockquote>
  577. </td></tr>
  578. </table>
  579. <table border="0" cellspacing="0" cellpadding="2" width="100%">
  580. <tr><td bgcolor="#828DA6">
  581. <font color="#ffffff" face="arial,helvetica,sanserif">
  582. <a name="Virtual File System"><strong>Virtual File System</strong></a>
  583. </font>
  584. </td></tr>
  585. <tr><td>
  586. <blockquote>
  587. <p>The VFS needs plenty of work:</p>
  588. <ul>
  589. <li>Move files/folders.</li>
  590. <li>Recursive folders copy.</li>
  591. <li>Search through a file hierarchy, using Ant-style wildcards.</li>
  592. <li>Search through a file hierarchy, using a Selector interface.</li>
  593. <li>The in-memory caching mechanism is pretty rudimentary at this stage.
  594. It needs work to make it size capped. In addition, some mechanism needs
  595. to be provided to release and refresh cached info.
  596. </li>
  597. <li>Convert files/folders into local files, for handing off
  598. to external commands, or legacy tasks.</li>
  599. <li>Refactor the replication mechanism out of ZipFileSystemProvder,
  600. and make more general pluggable.</li>
  601. <li>Capabilities discovery.</li>
  602. <li>Attributes and attribute schema.</li>
  603. <li>Handle file canonicalisation better (for cases like case-insensitive
  604. file systems, symbolic links, name encoding, etc).</li>
  605. <li>File system layering. That is, the ability for a file system to
  606. sit on top of another file system, or a file from another file system
  607. (e.g. Zip/Jar/Tar file systems, gzip/encoding file systems, virtual file
  608. systems).
  609. </li>
  610. </ul>
  611. </blockquote>
  612. </td></tr>
  613. </table>
  614. <table border="0" cellspacing="0" cellpadding="2" width="100%">
  615. <tr><td bgcolor="#828DA6">
  616. <font color="#ffffff" face="arial,helvetica,sanserif">
  617. <a name="File Data-Types and Tasks"><strong>File Data-Types and Tasks</strong></a>
  618. </font>
  619. </td></tr>
  620. <tr><td>
  621. <blockquote>
  622. <p>The file data-types, such as
  623. <code>&lt;fileset&gt;</code> and
  624. <code>&lt;path&gt;</code>, are some of the most widely used parts of Ant 1.x.
  625. Unfortunately, they aren't particularly extensible.
  626. </p>
  627. <ul>
  628. <li>Redesign the file data-types, replacing them with an interface-based
  629. API, plus a set of implementations. The API should use the VFS file
  630. <code>FileObject</code>, rather than
  631. <code>java.io.File</code>.
  632. This process has started, in the
  633. <code>antlib.vfile</code> package.
  634. </li>
  635. <li>File Selectors:
  636. <ul>
  637. <li>Change
  638. <code>AbstractNameFileSelector</code> to use Ant 1 style patterns
  639. matches, rather than Globs patterns.
  640. </li>
  641. <li>Add 'defaultexcludes' to
  642. <code>DefaultFileSet</code>. Also add a
  643. file selector implementation that matches everything except the default
  644. excludes.
  645. </li>
  646. <li>Add a name selector that loads patterns from a file.</li>
  647. <li>Add more selector implementations: size and last-modified comparisons,
  648. checksum comparison, byte-wise content comparison.</li>
  649. </ul>
  650. </li>
  651. <li>File conditions:
  652. <ul>
  653. <li>Add more condition implementations that perform checks on files.
  654. One that searches a path for a file would be useful.</li>
  655. </ul>
  656. </li>
  657. <li>File Name Mappers:
  658. <ul>
  659. <li>Change FileNameMapper.mapFileName() to take vfs.FileName objects.</li>
  660. <li>Move the current mapper implementations across to antlib.</li>
  661. </ul>
  662. </li>
  663. <li>File Sets:
  664. <ul>
  665. <li>Add a file set implementation that provides the union of several
  666. nested file sets (that is, a file set that merges several file sets
  667. together).</li>
  668. <li>Add a file set implementation that filters files that are up-to-date
  669. WRT some other file. Alternatively, this might be better done as a
  670. file selector.</li>
  671. </ul>
  672. </li>
  673. <li>Paths:
  674. <ul>
  675. <li>Add path implementations that evaluate to the system classpath,
  676. and the ant runtime classpath. Or, more generally, combine this with
  677. <code>ClassLoaderManager</code> to evaluate to the classpath of any
  678. 'library' (e.g. system classpath, ant runtime, tools.jar,
  679. an antlib, an installed extension, or the system classes of another JVM
  680. for cross-compiling).
  681. </li>
  682. </ul>
  683. </li>
  684. <li>Port across the Ant 1 file filter proposal, once it is complete.</li>
  685. <li>Copy task:
  686. <ul>
  687. <li>Implement 'preservelastmodified', 'overwrite', and 'includeemptydirs'.</li>
  688. <li>Support a file name mapper.</li>
  689. <li>Support file filters.</li>
  690. <li>Detect and handle destination file name collisions.</li>
  691. </ul>
  692. </li>
  693. <li>Implement the
  694. <code>&lt;move&gt;</code>,
  695. <code>&lt;delete&gt;</code>,
  696. <code>&lt;touch&gt;</code> and
  697. <code>&lt;mkdir&gt;</code> tasks on top
  698. of the VFS and the new file data-types. Might be some scope for generalising
  699. 'touch' and 'mkdir' into a single task.
  700. </li>
  701. </ul>
  702. </blockquote>
  703. </td></tr>
  704. </table>
  705. <table border="0" cellspacing="0" cellpadding="2" width="100%">
  706. <tr><td bgcolor="#828DA6">
  707. <font color="#ffffff" face="arial,helvetica,sanserif">
  708. <a name="Command-line and Configuration Files"><strong>Command-line and Configuration Files</strong></a>
  709. </font>
  710. </td></tr>
  711. <tr><td>
  712. <blockquote>
  713. <p>One of the goals of Ant 2 is to allow the user to easily customise and
  714. extend Ant. The command-line and local configuration files, are two places
  715. where this would be done. Currently, Myrmidon some customisation from the
  716. command-line, but does not support configuration files.</p>
  717. <ul>
  718. <li>Load configuration from system (from $ANT_HOME) and user (from $HOME)
  719. configuration files.</li>
  720. <li>Allow the following via config files:
  721. <ul>
  722. <li>Add (or override) the
  723. <code>lib</code> and
  724. <code>ext</code> directories.
  725. </li>
  726. <li>Enable more than one listener, and configure the listeners from
  727. the conents of the config file.</li>
  728. <li>Import libraries, and set properties.</li>
  729. <li>Execute tasks.</li>
  730. <li>Install and configure runtime services.</li>
  731. </ul>
  732. </li>
  733. </ul>
  734. </blockquote>
  735. </td></tr>
  736. </table>
  737. <table border="0" cellspacing="0" cellpadding="2" width="100%">
  738. <tr><td bgcolor="#828DA6">
  739. <font color="#ffffff" face="arial,helvetica,sanserif">
  740. <a name="Scripting"><strong>Scripting</strong></a>
  741. </font>
  742. </td></tr>
  743. <tr><td>
  744. <blockquote>
  745. <p>Add the ability to extend Ant using languages other than
  746. Java:</p>
  747. <ul>
  748. <li>Define a task using a scripting language such as Javascript.</li>
  749. <li>Use Rhino's ability to implement Java interfaces, to
  750. implement and define types, such as FileSelector, or
  751. Condition.</li>
  752. <li>Define a task using template.</li>
  753. <li>Add some lightweight scripting tasks.</li>
  754. </ul>
  755. </blockquote>
  756. </td></tr>
  757. </table>
  758. <table border="0" cellspacing="0" cellpadding="2" width="100%">
  759. <tr><td bgcolor="#828DA6">
  760. <font color="#ffffff" face="arial,helvetica,sanserif">
  761. <a name="Documentation"><strong>Documentation</strong></a>
  762. </font>
  763. </td></tr>
  764. <tr><td>
  765. <blockquote>
  766. <p>Everyone loves writing documentation, and so a goal for Ant 2 is to
  767. generate a lot of reference documentation for tasks and other types directly
  768. from the source. Unfortunately, there's still plenty of tutorial material
  769. to write. In particular we need these:</p>
  770. <ul>
  771. <li>User documentation - describing things like the build file format,
  772. how properties work, how to use references, how sub-builds work, how to customise
  773. Myrmidon, and so on.</li>
  774. <li>Task writer documentation - describing things like an overview the task API,
  775. how configuration works, task lifecycle, how to assemble an antlib, a catalog
  776. of the runtime services, and so on.</li>
  777. <li>Myrmidon developer documentation - a broad outline of the architecture,
  778. how to build, how to test, and so on. Also, this todo list needs plenty
  779. of filling out.</li>
  780. </ul>
  781. </blockquote>
  782. </td></tr>
  783. </table>
  784. <table border="0" cellspacing="0" cellpadding="2" width="100%">
  785. <tr><td bgcolor="#828DA6">
  786. <font color="#ffffff" face="arial,helvetica,sanserif">
  787. <a name="Miscellaneous"><strong>Miscellaneous</strong></a>
  788. </font>
  789. </td></tr>
  790. <tr><td>
  791. <blockquote>
  792. <p>A completely unordered list of items, big and small:</p>
  793. <ul>
  794. <li>Search through the code for 'TODO' items and fix them.</li>
  795. <li>Allow service factories to be configured from the contents of the
  796. <code>ant-services.xml</code> descriptor.
  797. </li>
  798. <li>Add verbosity level to ProjectListener LogEvent</li>
  799. <li>Fire ProjectListener events taskFinished(), targetFinished() and
  800. projectFinished() events on build failure, adding indicator methods to
  801. ProjectEvent.</li>
  802. <li>Fire ProjectListener events projectStarted() and projectFinished()
  803. events on start and finish of referenced projects, adding indicator methods
  804. to ProjectEvent.</li>
  805. <li>Detect duplicate type names.</li>
  806. <li>Add fully qualified type names, based on antlib name and type shorthand name.
  807. Allow these to be used in build files in addition to the shorthand names.</li>
  808. <li>Move the
  809. <code>&lt;http&gt;</code> and
  810. <code>&lt;socket&gt;</code>
  811. conditions to an antlib. Need to resolve how these will be passed a logger.
  812. </li>
  813. <li>Make the
  814. <code>&lt;uptodate&gt;</code> task a condition, and move to
  815. an antlib.
  816. </li>
  817. <li>Split up
  818. <code>&lt;is-set&gt;</code> condition into is-set and is-true conditions.
  819. </li>
  820. <li>Allow the
  821. <code>&lt;if&gt;</code> task to take any condition implementation.
  822. </li>
  823. <li>Add an else block to the
  824. <code>&lt;if&gt;</code> task.
  825. </li>
  826. <li>Split the
  827. <code>&lt;available&gt;</code> condition into separate conditions
  828. that test for the availability of a class, or a resource.
  829. </li>
  830. <li>Move
  831. <code>crimson.jar</code> to
  832. <code>bin/lib</code> in the distribution,
  833. and make available to other jars via the extension mechanism.
  834. </li>
  835. <li>Change <code>DefaultPropertyResolver</code> to ignore '$${'.</li>
  836. <li>Add a <code>--type</code> command-line option, to allow
  837. the project builder to be manually selected.
  838. </li>
  839. <li>Unit tests.</li>
  840. </ul>
  841. </blockquote>
  842. </td></tr>
  843. </table>
  844. </blockquote>
  845. </td></tr>
  846. </table>
  847. </td>
  848. </tr>
  849. <!-- FOOTER -->
  850. <tr><td colspan="2">
  851. <hr noshade="" size="1"/>
  852. </td></tr>
  853. <tr><td colspan="2">
  854. <div align="center"><font color="#525D76" size="-1"><em>
  855. Copyright &#169; 2000-2002, Apache Software Foundation
  856. </em></font></div>
  857. </td></tr>
  858. </table>
  859. </body>
  860. </html>
  861. <!-- end the processing -->