Update of /cvsroot/tm4j/tm4j/lib/ant/apache-ant-1.7.0/docs In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv12860/lib/ant/apache-ant-1.7.0/docs Added Files: LICENSE ant_in_anger.html ant_task_guidelines.html antnews.html appendix_e.pdf breadcrumbs.js bugs.html bylaws.html contributors.html external.html faq.html favicon.ico index.html legal.html license.html mail.html mission.html nightlies.html page.css problems.html projects.html resources.html svn.html Log Message: Update 4 years old ant. --- NEW FILE: problems.html --- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="en"> <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! --> <head> <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Apache Ant - Having Problems?</title> <link type="text/css" href="./page.css" rel="stylesheet"> <meta name="author" content="Conor MacNeill"> <meta name="email" content=""> </head> <body> <p class="navpath"> <script src="./breadcrumbs.js" language="JavaScript" type="text/javascript"></script> </p> <div class="logobar"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td align="left"><img border="0" alt="Apache Ant site" src="./images/group-logo.gif"></td> <td align="center" width="100%"><img alt="Apache Ant logo" border="0" src="./images/project-logo.gif"></td> <td align="right"> <form target="_blank" onsubmit="q.value = query.value + ' site:ant.apache.org'" action="http://www.google.com/search" method="get"> <table summary="search" border="0" cellspacing="0" cellpadding="0" bgcolor="#4C6C8F"> <tr> <td colspan="3"><img height="10" width="1" alt="" src="./images/spacer.gif"></td> </tr> <tr> <td><img height="1" width="1" alt="" src="./images/spacer.gif"></td> <td nowrap="nowrap" class="searchcaption"> <input name="q" type="hidden"> <input size="15" id="query" type="text"> <img height="1" width="5" alt="" src="./images/spacer.gif"> <input name="Search" value="Search" type="submit"> <br> the Apache Ant site </td> <td><img height="1" width="1" alt="" src="./images/spacer.gif"></td> </tr> <tr> <td><img alt="" border="0" height="10" width="9" src="./images/search-left.gif"></td> <td><img height="1" width="1" alt="" src="./images/spacer.gif"></td> <td><img alt="" border="0" height="10" width="9" src="./images/search-right.gif"></td> </tr> </table> </form> </td> </tr> </table> </div> <div class="tab"> <table summary="tab bar" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="8"><img alt="" height="5" width="8" src="./images/spacer.gif"></td><td valign="bottom"> <table summary="selected tab" style="height: 1.5em" border="0" cellpadding="0" cellspacing="0"> <tr> <td valign="top" width="5" bgcolor="#4C6C8F"><img height="5" width="5" alt="" src="./images/tabSel-left.gif"></td><td valign="middle" bgcolor="#4C6C8F"><font color="#ffffff" size="2" face="Arial, Helvetica, Sans-serif"><b>Home</b></font></td><td valign="top" width="5" bgcolor="#4C6C8F"><img height="5" width="5" alt="" src="./images/tabSel-right.gif"></td> </tr> </table> </td> <td width="5"><img alt="" height="8" width="8" src="./images/spacer.gif"></td><td valign="bottom"> <table summary="non selected tab" style="height: 1.4em" border="0" cellpadding="0" cellspacing="0"> <tr> <td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="./images/tab-left.gif"></td><td valign="middle" bgcolor="#B2C4E0"><a href="./projects/index.html"><font size="2" face="Arial, Helvetica, Sans-serif">Projects</font></a></td><td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="./images/tab-right.gif"></td> </tr> </table> </td> </tr> </table> </div> <div class="bluebar"></div> <div class="menucontainer"> <div class="menu"> <ul> <li class="menuheader">Apache Ant <ul> <li> <a href="./index.html">Welcome</a> </li> <li> <a href="./license.html">License</a> </li> <li> <a href="./antnews.html">News</a> </li> </ul> </li> <li class="menuheader">Documentation <ul> <li> <a href="./manual/index.html">Manual</a> </li> <li> <a href="./projects.html">Related Projects</a> </li> <li> <a href="./external.html">External Tools and Tasks</a> </li> <li> <a href="./resources.html">Resources</a> </li> <li> <a href="./faq.html">Frequently Asked Questions</a> </li> <li> <a href="http://wiki.apache.org/ant/FrontPage">Wiki</a> </li> <li> <span class="sel">Having Problems?</span> </li> </ul> </li> <li class="menuheader">Download <ul> <li> <a href="http://ant.apache.org/bindownload.cgi">Binary Distributions</a> </li> <li> <a href="http://ant.apache.org/srcdownload.cgi">Source Distributions</a> </li> </ul> </li> <li class="menuheader">Contributing <ul> <li> <a href="./mail.html">Mailing Lists</a> </li> <li> <a href="./svn.html">Subversion Repositories</a> </li> <li> <a href="./nightlies.html">Nightly Builds</a> </li> <li> <a href="./bugs.html">Bug Database</a> </li> <li> <a href="http://www.apache.org/foundation/contributing.html">Donations</a> </li> </ul> </li> <li class="menuheader">Project Management <ul> <li> <a href="./contributors.html">Contributors</a> </li> <li> <a href="./mission.html">Apache Ant Mission</a> </li> <li> <a href="./bylaws.html">Project Bylaws</a> </li> <li> <a href="./legal.html">Legal</a> </li> </ul> </li> </ul> </div> <img style="float: left" height="10" width="10" border="0" alt="" src="./images/menu-left.gif"> <img style="float: right" height="10" width="10" border="0" alt="" src="./images/menu-right.gif"> </div> <div class="lightbluebar"> </div> <div class="main"> <div class="content"> <h1 class="title">Having Problems?</h1> <h3 class="section"> <a name="Having Problems?"></a> Having Problems? </h3> <p> This page details some steps you can take to try and resolve any problems you may be having with Ant. If you find you can't resolve the problem, then this page will help you collect some of the relevant information to provide in a bug report. This information will help the Ant developers understand and resolve the problem. Of course, not all the steps here will make sense for every problem you may encounter - these are just some suggestions to point you in the right direction. </p> <h4 class="subsection"> <a name="Ensure that you are actually running the version of Ant that you think you do"></a> Ensure that you are actually running the version of Ant that you think you do </h4> <p>Many tools include a version of Ant and some Operating Systems even install it by default now, so you may have a version of Ant installed that you haven't been aware of.</p> <p>One of the first things to do is to run <br /><br /> <font face="verdana" size="-1">ant -version</font> <br /><br /> and <br /><br /> <font face="verdana" size="-1">ant -diagnostics</font> <br /><br /> to be sure. Also, we highly recommend that you run Ant with an empty CLASSPATH. If any other version of Ant can be loaded from the CLASSPATH, many types of errors may happen because of incompatible classes being loaded.</p> <p>See <a href="faq.html">the FAQ</a> for <a href="faq.html#NoClassDefFoundError">some</a> <a href="faq.html#InstantiationException">examples</a>, but many other problems are a result of an old version of Ant on your system as well.</p> <h4 class="subsection"> <a name="Read the Manual"></a> Read the Manual </h4> <p> The first step to take when you have a problem with Ant is to read the <a href="manual/index.html">manual</a> entry for the task or concept that is giving you trouble. In particular, check the meaning of a task's attributes and nested elements. Perhaps an attribute is available that would provide the behavior you require. If you have problems with the manual itself, you can submit a documentation bug report (see below) to help us improve the Ant documentation. </p> <h4 class="subsection"> <a name="Examine Debug Output"></a> Examine Debug Output </h4> <p> If you're still having a problem, the next step is to try and gather additional information about what Ant is doing. Try running Ant with the <code>verbose</code> flag: <br /><br /> <font face="verdana" size="-1">ant -verbose</font> <br /><br /> or <br /><br /> <font face="verdana" size="-1">ant -v</font> <br /><br /> This will produce output that starts like the following:</p> <table class="ForrestTable" cellspacing="1" cellpadding="4"> <tr> <td colspan="1" rowspan="1" valign="top" align="left"> Ant version 1.4.1 compiled on October 11 2001<br /> Buildfile: build.xml<br /> Detected Java version: 1.3 in: D:\usr\local\java\jdk13\jre<br /> Detected OS: Windows NT<br /> parsing buildfile D:\ant\build.xml with URI = file:D:/ant/build.xml<br /> Project base dir set to: D:\ant<br /> [property] Loading Environment env.<br /> [property] Loading D:\ant\conf.properties<br /> Build sequence for target 'debug' is [debug]<br /> Complete build sequence is [debug, gensrc, compile, jar, test]<br /> . . .<br /> </td> </tr> </table> <p> You should be able to see from the trace more about what Ant is doing and why it's taking a particular course of action. If you need even more information, you can use the <code>-debug</code> flag rather than <code>-verbose</code>. This will generally produce so much output that you may want to save the output to a file and analyze it in an editor. You can save the output using the <code>-logfile <filename></code> flag, or using redirection. </p> <p> Once you have all this debug information, how can you use it to solve your problem? That will depend on the task in question and the nature of your problem. Each task logs different aspects of its operation, but it should give you an idea of what is going on. For example, the <code><javac></code> task logs the reasons why it chooses to compile particular class files and not others, along with which compiler it is using and the arguments it will pass to that compiler. The following partial trace shows why <code><javac></code> is adding one class file but skipping another. This is followed by which compiler it will be using, the arguments that will get passed to the compiler, and a list of all the class files to be compiled. </p> <table class="ForrestTable" cellspacing="1" cellpadding="4"> <tr> <td colspan="1" rowspan="1" valign="top" align="left"> [javac] Test.java omitted as D:\classes\Test.class is up to date.<br /> [javac] Unset.java added as D:\classes\Unset.class is outdated.<br /> [javac] Compiling 1 source file to D:\classes<br /> [javac] Using classic compiler<br /> [javac] Compilation args: -d D:\classes -classpath D:\classes;<br /> D:\jdk118\classes.zip; -sourcepath D:\src\java -g:none<br /> [javac] File to be compiled:<br /> D:\src\java\Unset.java<br /> </td> </tr> </table> <p> In many cases, Ant tasks are wrappers around OS commands or other Java classes. In debug mode, many of these tasks will print out the equivalent command line, as the <code><javac></code> task output does. If you are having a problem, it is often useful to run the command directly from the command line, in the same way Ant is running it, and see if the problem occurs from there as well. The problem may be in the command that is being run, or it may be in the way the Ant task is running the command. You can also see the effect of changing attribute values on the generated command line. This can help you to understand whether you are using the correct attributes and values. </p> <h4 class="subsection"> <a name="Has It Been Fixed?"></a> Has It Been Fixed? </h4> <p> After examining the debug output, if you still believe that the problem you are having is caused by Ant, chances are that someone else may have already encountered this problem, and perhaps it has been fixed. The next step, therefore, would be to download the sources of ant, see <a href="svn.html">svn</a>. </p> <p> <a href="http://vmgump.apache.org/gump/public/index.html">Gump</a> is building ant every night and using the ant built from the latest source to build a long list of open source projects. However, the version of ant built by gump is not available for download. Even if it were, it would not include most of the optional tasks. </p> <p> We currently do not have nightly builds including the optional tasks. </p> <h3 class="section"> <a name="bugs"></a> bugs </h3> <p>If you are convinced that you have identified an unfixed bug, please turn to our document concerning the <a href="bugs.html">bug database</a>.</p> </div> </div> <p class="copyright"> <script type="text/javascript" language="JavaScript"><!-- document.write(" - "+"Last Published: " + document.lastModified); // --> </script> </p> </body> </html> --- NEW FILE: appendix_e.pdf --- (This appears to be a binary file; contents omitted.) --- NEW FILE: ant_task_guidelines.html --- <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <html><head> <title> Apache Ant Task Design Guidelines </title> </head><body> <h1>Apache Ant Task Design Guidelines</h1> This document covers how to write Ant tasks to a standard required to be incorporated into the Ant distribution. You may find it useful when writing tasks for personal use as the issues it addresses are still there in such a case. <h2>Don't break existing builds</h2> Even if you find some really hideous problem with Ant, one that is easy to fix, if your fix breaks an existing build file then we have problems. Making sure that every build file out there still works is one of the goals of all changes. As an example of this, Ant 1.5 passes the single dollar sign "$" through in strings; Ant 1.4 and before would strip it. To get this fix in we first had to write the test suite to expose current behaviour, then change something so that single "$" was passed through, but double "$" got mapped to "$" for backwards compatibility. <h2>Don't break the Java API</h2> Ant's tasks can be used by third party programs and tasks. We cannot make changes that break the API. This includes: <ol> <li>Moving classes without leaving a backwards-compatible facade. <li>Deleting classes. <li>Deleting methods or fields, or reducing their accessibility. <li>Changing the signature of a <tt>setAttribute(Type)</tt> method. If you need to add a restrictive type, add a new attribute, and place it in the source <i>above</i> the original. The XML mapper will get the restricted type, old programs can still use the old type. <li>Don't change semantics. At least, not drastically. All bug fixes are implicit changes of semantics, after all. </ol> <h2>Use built in helper classes</h2> Ant includes helper tasks to simplify much of your work. It is much better to use them than roll your own, for development, maintenance and code size reasons. <h4>Execute</h4> Execute will spawn off separate programs under all the platforms which Ant supports, dealing with Java version issues as well as platform issues. Always use this class to invoke other programs. <h4>Java, ExecuteJava</h4> These classes can be used to spawn Java programs in a separate VM (they use execute) or in the same VM--with or without a different classloader. When deriving tasks from this, it often benefits users to permit the classpath to be specified, and for forking to be an optional attribute. <h4>Project and related classes</h4> Project, FileUtils, JavaEnvUtils all have helper functions to do things like touch a file, copy a file and the like. Use these instead of coding them yourself or trying to use tasks which may be less stable and fiddlier to use. <h2>Obey the Sun/Java style guidelines</h2> The Ant codebase aims to have a single unified coding standard, and that standard is the <a href="http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html"> Sun Java coding guidelines </a> <p> It's not that they are better than any alternatives, but they are a standard and they are what is consistently used in the rest of the tasks. Code will not be incorporated into the database until it complies with these. <p> If you are writing a task for your personal or organisational use, you are free to use whatever style you like. But using the Sun Java style will help you to become comfortable with the rest of the Ant source, which may be important. <p> One important rule is 'no tabs'. Use four spaces instead. Not two, not eight, four. Even if your editor is configured to have a tab of four spaces, lots of others aren't. Spaces have more consistency across editors and platforms. Some IDEs (JEdit) can highlight tabs, to stop you accidentally inserting them. <p> There is an Ant build file check.xml in the main ant directory with runs <a href="http://checkstyle.sourceforge.net">checkstyle</a> over Ant's source code. <h2>Attributes and elements</h2> Use the Ant introspection-based mapping of attributes into Java datatypes, rather than implementing all your attributes as setFoo(String) and doing the mapping to int, boolean or File yourself. This saves work on your part, lets Java callers use you in a typesafe manner, and will let the Xdocs documentation generator work out what the parameters are. <p> The Ant 1.x tasks are very inconsistent regarding naming of attributes--some tasks use <tt>source</tt>, others <tt>src</tt>. Here is a list of preferred attribute names: <p> <table cellpadding="5"> <tr> <td> failonerror </td> <td> boolean to control whether failure to execute should throw a <tt>BuildException</tt> or just print an error. Parameter validation failures should always throw an error, regardless of this flag. </td> </tr> <tr> <td> destdir </td> <td> destination directory for output </td> </tr> <tr> <td> destfile </td> <td> destination file for output </td> </tr> <tr> <td> srcdir </td> <td> source directory </td> </tr> <tr> <td> srcfile </td> <td> source file </td> </tr> </table> <p> Yes, this is a very short list. Try and be vaguely consistent with the core tasks, at the very least. <h2>Support classpaths</h2> Try and make it possible for people to supply a classpath to your task, if you need external libraries, rather than make them add everything to the ANT_HOME/lib directory. This lets people keep the external libraries in their Ant-based project, rather than force all users to make changes to their Ant system configuration. <h2>Design for controlled re-use</h2> Keep member variables private. If read access by subclasses is required, add accessor methods rather than change the accessiblity of the member. This enables subclasses to access the contents, yet still be decoupled from the actual implementation. <p> The other common re-use mechanism in Ant is for one task to create and configure another. This is fairly simple. There are facilities available in Ant's API to have the tasks instantiated by their familiar names ("java", "exec", etc.). It is recommended that you <b>not</b> use this approach because of the entirely real possibility that a user has overridden the name to point to a different class entirely. Use direct constructor calls (or reflection) to instantiate your subtask. Since Ant 1.6.3, you can call <code>org.apache.tools.ant.Task#bindToOwner()</code> to "mask" a helper task as its parent. <h2>Do your own Dependency Checking</h2> Make has the edge over Ant in its integrated dependency checking; the command line apps make invokes don't need to do their own work. Ant tasks do have to do their own dependency work, but if this can be done then it can be done well. A good dependency-aware task can work out the dependencies without explicit dependency information in the build file, and be smart enough to work out the real dependencies, perhaps through a bit of file parsing. The <tt>depends</tt> task is the best example of this. Some of the zip/jar tasks are pretty good too, as they can update the archive when needed. Most tasks just compare source and destination timestamps and work from there. Tasks which don't do any dependency checking do not help users as much as they can, because their needless work can trickle through the entire build, test and deploy process. <h2>Support Java 1.2 through Java 1.5+</h2> Ant 1.5 and lower was designed to support Java 1.1. Ant 1.6 and higher is designed to support Java 1.2: to build on it, to run on it. Sometimes functionality of tasks have to degrade in that environment--usually due to library limitations; such behaviour change must always be noted in the documentation. <p> What is problematic is code which is dependent on Java 1.3 features; e.g. java.lang.reflect.Proxy, or Java 1.4 features; e.g. java.io.nio. Be also aware of extra methods in older classes; e.g. StringBuffer#append(StringBuffer). These cannot be used directly by any code and still be able to compile and run on a Java 1.2 system. If a new method in an existing class is to be used, it must be used via reflection and the <tt>NoSuchMethodException</tt> handled somehow. <p> What if code simply does not work on Java 1.2? It can happen. It will probably be OK to have the task as an optional task, with compilation restricted to Java 1.3 or later through build.xml modifications. Better still, use reflection to link to the classes at run time. <p> Java 1.4 adds a new optional change to the language itself, the <tt>assert</tt> keyword, which is only enabled if the compiler is told to compile 1.4 version source. Clearly with the 1.2 compatibility requirement, Ant tasks cannot use this keyword. They also need to move away from using the JUnit <tt>assert()</tt> method and call <tt>assertTrue()</tt> instead. <p> Java 1.5 adds the <tt>enum</tt> type; again, this must not be used. <h2>Explicitly Expand properties in nested text</h2> For historical reasons, <tt>addText(String text)</tt> is called to set the task's nested text, without any property expansion taking place. Call <tt>Project.replaceProperties()</tt> to do this manually. If you forget, you create a problem that is impossible to fix without breaking users' build files. <h2>Refactor</h2> If the changes made to a task are making it too unwieldy, split it up into a cleaner design, refactor the code and submit not just feature creep but cleaner tasks. A common design pattern which tends to occur in the Ant process is the adoption of the adapter pattern, in which a base class (say Javac or Rmic) starts off simply, then gets convoluted with support for multiple back ends: javac, jikes, jvc. A refactoring to split the programmable front end from the classes which provide the back end cleans up the design and makes it much easier to add new back ends. But to carry this off one needs to keep the interface and behaviour of the front end identical, and to be sure that no subclasses have been accessing data members directly, because these data members may not exist in the refactored design. This is why having private data members is so important. <p> One thing we must not do is move existing tasks around or delete them. Remember that Ant has a Java API as well as an XML language. We don't want to break that API, or anything that subclasses existing Ant tasks. When refactoring, you need to leave facades where the original classes were. so existing code does not break. <h2>Test</h2> Look in <tt>ant/src/testcases</tt> and you will find JUnit tests for the shipping Ant tasks, to see how it is done and what is expected of a new task. Most of them are rudimentary, and no doubt you could do better for your task--feel free to do so! <p> A well written set of test cases will break the Ant task while it is in development, until the code is actually complete. And every bug which surfaces later should have a test case added to demonstrate the problem, and to fix it. <p> The test cases are a great way of testing your task during development. A simple call to 'build run-test' in the ant source tree will run all ant tests, to verify that your changes don't break anything. To test a single task, use the one shot <code>ant run-single-test -Dtestcase=${testname}</code> where <code>${testname}</code> is the name of your test class. <p> The test cases are also used by the committers to verify that changes and patches do what they say. If you've got test cases it increases your credibility significantly. To be precise, we hate submissions without test cases, as it means we have to write them ourselves. This is something that only gets done if we need the task or it is perceived as utterly essential to many users. <p> Remember also that Ant 1.x is designed to compile and run on Java 1.2, so you should test on Java 1.2 as well as any later version which you use. You ought to be able to download an old SDK from Sun for this purpose. <p> Finally, run a full <code>build test</code> before and after you start developing your project, to make sure you haven't broken anything else by accident. <h2>Document</h2> Without documentation, the task can't be used. So remember to provide a succinct and clear html (soon, xml) page describing the task in a similar style to that of existing tasks. It should include a list of attributes and elements, and at least one working example of the task. Many users cut and paste the examples into their build files as a starting point, so make the examples practical and test them too. <p> You can use the xdocs stuff in proposal/xdocs to autogenerate your documentation page from the javadocs of the source; this makes life easier and will make the transition to a full xdoclet generated documentation build process trivial. <h2>Licensing and Copyright</h2> Any code submitted to the Apache project must be compatible with the Apache Software License, and the act of submission must be viewed as an implicit license of the submitted code to the Apache Software Foundation. <p> This is important. <p> The fairly laissez-faire license of Apache is not currently considered compatible with either the GPL or the Lesser GPL of the Free Software Foundation--the Gnu project. These licenses have stricter terms, "copyleft", which are not in the Apache Software Foundation license. This permits people and organisations to build commercial and closed source applications atop the Apache libraries and source. <p> Because the Gnu GPL license immediately extends to cover any larger application (or library, in the case of LGPL) into which it is incorporated, the Ant team cannot incorporate any task based upon GPL or LGPL source into the Ant codebase. You are free to submit it, but it will be politely and firmly rejected. <p> If you link to a GPL or LGPL library, by <code>import</code> or reflection, your task must be licensed under the same terms. So tasks linking to (L)GPL code can't go into the Apache managed codebase. Tasks calling such code can use the 'exec' or 'java' tasks to run the programs, as you are just executing them at this point, not linking to them. <p> Even if we cannot include your task into the Apache codebase, we can still point to where you host it; just submit a diff to xdocs/external.html pointing to your task. <p> If your task links directly to proprietary code, we have a different problem: it is really hard to build the tasks. Please use reflection. <h3>Don't re-invent the wheel</h3> We've all done it: written and submitted a task only to discover it was already implemented in a small corner of another task, or it has been submitted by someone else and not committed. You can avoid this by being aware of what is in the latest CVS tree; keep getting the daily source updates, look at manual changes and subscribe to the dev mailing list. <p> If you are thinking of writing a task, posting a note on your thoughts to the list can be informative--you will get other peoples' insights and maybe some half-written task to do the basics, all without writing a line of code. <h2>Submitting to Ant</h2> The basic mechanism for submitting an Ant task is to mail it to the dev mailing list. It helps to be on this list, as you will see other submissions, and any debate about your own submission. <p> You may create your patch file using either of the following approaches (the committers recommend the first): <p> <ul> <li><h3>Approach 1 - The Ant Way</h3> <p> Use Ant to generate a patch file to Ant: <pre class="code"> ant -f patch.xml </pre> This will create a file named patch.tar.gz that will contain a unified diff of files that have been modified and also include files that have been added. Review the file for completeness and correctness. This approach is recommended because it standardizes the way in which patch files are constructed. It also eliminates the chance of you missing to submit new files that constitute part of the patch. <p> <li><h3>Approach 2 - The Manual Way</h3> <p> Patches to existing files should be generated with <code>svn diff -u filename</code> and save the output to a file. If you want to get the changes made to multiple files in a directory , just use <code>cvs diff -u</code>. Then, Tar and GZip the patch file as well as any new files that you have added. </ul> <p> The patches should be sent as an attachment to a message titled [PATCH] and distinctive one-line summary in the subject of the patch. The filename/task and the change usually suffices. It's important to include the changes as an attachment, as too many mailers reformat the text pasted in, which breaks the patch. <p> Then you wait for one of the committers to commit the patch, if it is felt appropriate to do so. Bug fixes go in quickly, other changes often spark a bit of discussion before a (perhaps revised) commit is made. <p> New submissions should be proceeded with [SUBMIT]. The mailer-daemon will reject any messages over 100KB, so any large update should be zipped up. If your submission is bigger than that, why not break it up into separate tasks. <p> We also like submissions to be added to <a href="http://issues.apache.org/bugzilla/">bugzilla</a>, so that they dont get lost. Please submit them by first filing the report with a meaningful name, then adding files as attachments. Use CVS diff files please! <p> If you hear nothing after a couple of weeks, remind the mailing list. Sometimes really good submissions get lost in the noise of other issues. This is particularly the case just prior to a new point release of the product. At that time anything other than bug fixes will tend to be neglected. <h2>Checklists</h2> These are the things you should verify before submitting patches and new tasks. Things don't have to be perfect; it may take a couple of iterations before a patch or submission is committed, and these items can be addressed in the process. But by the time the code is committed, everything including the documentation and some test cases will have been done, so getting them out the way up front can save time. The committers look more favourably on patches and submissions with test cases, while documentation helps sell the reason for a task. <h3>Checklist before submitting a patch</h3> <ul> <li>Added code complies with style guidelines <li>Code compiles and runs on Java 1.2 <li>New member variables are private, and provide public accessor methods if access is actually needed. <li>Existing test cases succeed. <li>New test cases written and succeed. <li>Documentation page extended as appropriate. <li>Example task declarations in the documentation tested. <li>Diff files generated using svn diff -u <li>Message to dev contains [PATCH], task name and patch reason in subject. <li>Message body contains a rationale for the patch. <li>Message attachment contains the patch file(s). </ul> <h3>Checklist before submitting a new task</h3> <ul> <li>Java file begins with Apache copyright and license statement. <li>Task does not depend on GPL or LGPL code. <li>Source code complies with style guidelines <li>Code compiles and runs on Java 1.2 <li>Member variables are private, and provide public accessor methods if access is actually needed. <li><i>Maybe</i> Task has failonerror attribute to control failure behaviour <li>New test cases written and succeed <li>Documentation page written <li>Example task declarations in the documentation tested. <li>Patch files generated using svn diff -u <li>patch files include a patch to defaults.properties to register the tasks <li>patch files include a patch to coretasklist.html or optionaltasklist.html to link to the new task page <li>Message to dev contains [SUBMIT] and task name in subject <li>Message body contains a rationale for the task <li>Message attachments contain the required files -source, documentation, test and patches zipped up to escape the HTML filter. </ul> </body></html> --- NEW FILE: mission.html --- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="en"> <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! --> <head> <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Apache Ant - Apache Ant Mission</title> <link type="text/css" href="./page.css" rel="stylesheet"> <meta name="author" content="Apache Ant PMC"> <meta name="email" content=""> </head> <body> <p class="navpath"> <script src="./breadcrumbs.js" language="JavaScript" type="text/javascript"></script> </p> <div class="logobar"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td align="left"><img border="0" alt="Apache Ant site" src="./images/group-logo.gif"></td> <td align="center" width="100%"><img alt="Apache Ant logo" border="0" src="./images/project-logo.gif"></td> <td align="right"> <form target="_blank" onsubmit="q.value = query.value + ' site:ant.apache.org'" action="http://www.google.com/search" method="get"> <table summary="search" border="0" cellspacing="0" cellpadding="0" bgcolor="#4C6C8F"> <tr> <td colspan="3"><img height="10" width="1" alt="" src="./images/spacer.gif"></td> </tr> <tr> <td><img height="1" width="1" alt="" src="./images/spacer.gif"></td> <td nowrap="nowrap" class="searchcaption"> <input name="q" type="hidden"> <input size="15" id="query" type="text"> <img height="1" width="5" alt="" src="./images/spacer.gif"> <input name="Search" value="Search" type="submit"> <br> the Apache Ant site </td> <td><img height="1" width="1" alt="" src="./images/spacer.gif"></td> </tr> <tr> <td><img alt="" border="0" height="10" width="9" src="./images/search-left.gif"></td> <td><img height="1" width="1" alt="" src="./images/spacer.gif"></td> <td><img alt="" border="0" height="10" width="9" src="./images/search-right.gif"></td> </tr> </table> </form> </td> </tr> </table> </div> <div class="tab"> <table summary="tab bar" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="8"><img alt="" height="5" width="8" src="./images/spacer.gif"></td><td valign="bottom"> <table summary="selected tab" style="height: 1.5em" border="0" cellpadding="0" cellspacing="0"> <tr> <td valign="top" width="5" bgcolor="#4C6C8F"><img height="5" width="5" alt="" src="./images/tabSel-left.gif"></td><td valign="middle" bgcolor="#4C6C8F"><font color="#ffffff" size="2" face="Arial, Helvetica, Sans-serif"><b>Home</b></font></td><td valign="top" width="5" bgcolor="#4C6C8F"><img height="5" width="5" alt="" src="./images/tabSel-right.gif"></td> </tr> </table> </td> <td width="5"><img alt="" height="8" width="8" src="./images/spacer.gif"></td><td valign="bottom"> <table summary="non selected tab" style="height: 1.4em" border="0" cellpadding="0" cellspacing="0"> <tr> <td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="./images/tab-left.gif"></td><td valign="middle" bgcolor="#B2C4E0"><a href="./projects/index.html"><font size="2" face="Arial, Helvetica, Sans-serif">Projects</font></a></td><td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="./images/tab-right.gif"></td> </tr> </table> </td> </tr> </table> </div> <div class="bluebar"></div> <div class="menucontainer"> <div class="menu"> <ul> <li class="menuheader">Apache Ant <ul> <li> <a href="./index.html">Welcome</a> </li> <li> <a href="./license.html">License</a> </li> <li> <a href="./antnews.html">News</a> </li> </ul> </li> <li class="menuheader">Documentation <ul> <li> <a href="./manual/index.html">Manual</a> </li> <li> <a href="./projects.html">Related Projects</a> </li> <li> <a href="./external.html">External Tools and Tasks</a> </li> <li> <a href="./resources.html">Resources</a> </li> <li> <a href="./faq.html">Frequently Asked Questions</a> </li> <li> <a href="http://wiki.apache.org/ant/FrontPage">Wiki</a> </li> <li> <a href="./problems.html">Having Problems?</a> </li> </ul> </li> <li class="menuheader">Download <ul> <li> <a href="http://ant.apache.org/bindownload.cgi">Binary Distributions</a> </li> <li> <a href="http://ant.apache.org/srcdownload.cgi">Source Distributions</a> </li> </ul> </li> <li class="menuheader">Contributing <ul> <li> <a href="./mail.html">Mailing Lists</a> </li> <li> <a href="./svn.html">Subversion Repositories</a> </li> <li> <a href="./nightlies.html">Nightly Builds</a> </li> <li> <a href="./bugs.html">Bug Database</a> </li> <li> <a href="http://www.apache.org/foundation/contributing.html">Donations</a> </li> </ul> </li> <li class="menuheader">Project Management <ul> <li> <a href="./contributors.html">Contributors</a> </li> <li> <span class="sel">Apache Ant Mission</span> </li> <li> <a href="./bylaws.html">Project Bylaws</a> </li> <li> <a href="./legal.html">Legal</a> </li> </ul> </li> </ul> </div> <img style="float: left" height="10" width="10" border="0" alt="" src="./images/menu-left.gif"> <img style="float: right" height="10" width="10" border="0" alt="" src="./images/menu-right.gif"> </div> <div class="lightbluebar"> </div> <div class="main"> <div class="content"> <h1 class="title">Apache Ant Mission</h1> <h3 class="section"> <a name="Board Resolution"></a> Board Resolution </h3> <p>Apache Ant is a project of the <a href="http://www.apache.org/">Apache Software Foundation</a>. It started as a subproject of the <a href="http://jakarta.apache.org/">Apache Jakarta Project</a>.</p> <p>This is the board resolution (from the <a href="http://www.apache.org/foundation/records/minutes/2002/board_minutes_2002_11_18.txt">minutes</a>) that created the Apache Ant project:</p> <pre class="code"> 7.D. Resolution [R3] to create the Ant PMC WHEREAS, the Board of Directors deems it to be in the best interests of the Foundation and consistent with the Foundation's purpose to establish a Project Management Committee charged with the creation and maintenance of open-source software related to the Apache Ant build tool, for distribution at no charge to the public. NOW, THEREFORE, BE IT RESOLVED, that a Project Management Committee (PMC), to be known as the "Apache Ant PMC", be and hereby is established pursuant to Bylaws of the Foundation; and be it further RESOLVED, that the Apache Ant PMC be and hereby is responsible for the creation and maintenance of the Ant build system and related software components, based on software licensed to the Foundation; and be it further RESOLVED, that the office of "Vice President, Apache Ant" be and hereby is created, the person holding such office to serve at the direction of the Board of Directors as the chair of the Apache Ant PMC, and to have primary responsibility for management of the projects within the scope of responsibility of the Apache Ant PMC; and be it further RESOLVED, that the persons listed immediately below be and hereby are appointed to serve as the initial members of the Apache Ant PMC: Bruce Atherton Stephane Bailliez Stefan Bodewig Erik Hatcher Diane Holt Donald Leslie Steve Loughran Conor MacNeill Costin Manolache Sam Ruby Jon Skeet Magesh Umasankar Christoph Wilhelms NOW, THEREFORE, BE IT FURTHER RESOLVED, that Conor MacNeill be and hereby is appointed to the office of Vice President, Apache Ant, to serve in accordance with and subject to the direction of the Board of Directors and the Bylaws of the Foundation until death, resignation, retirement, removal or disqualification, or until a successor is appointed; and be it further RESOLVED, that the initial Apache Ant PMC be and hereby is tasked with the creation of a set of bylaws intended to encourage open development and increased participation in the Apache Ant Project. By Unanimous Vote, Resolution R3 was approved. The Ant PMC is hereby created. </pre> </div> </div> <p class="copyright"> <script type="text/javascript" language="JavaScript"><!-- document.write(" - "+"Last Published: " + document.lastModified); // --> </script> </p> </body> </html> --- NEW FILE: nightlies.html --- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="en"> <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! --> <head> <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Apache Ant - Nightly Builds</title> <link type="text/css" href="./page.css" rel="stylesheet"> </head> <body> <p class="navpath"> <script src="./breadcrumbs.js" language="JavaScript" type="text/javascript"></script> </p> <div class="logobar"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td align="left"><img border="0" alt="Apache Ant site" src="./images/group-logo.gif"></td> <td align="center" width="100%"><img alt="Apache Ant logo" border="0" src="./images/project-logo.gif"></td> <td align="right"> <form target="_blank" onsubmit="q.value = query.value + ' site:ant.apache.org'" action="http://www.google.com/search" method="get"> <table summary="search" border="0" cellspacing="0" cellpadding="0" bgcolor="#4C6C8F"> <tr> <td colspan="3"><img height="10" width="1" alt="" src="./images/spacer.gif"></td> </tr> <tr> <td><img height="1" width="1" alt="" src="./images/spacer.gif"></td> <td nowrap="nowrap" class="searchcaption"> <input name="q" type="hidden"> <input size="15" id="query" type="text"> <img height="1" width="5" alt="" src="./images/spacer.gif"> <input name="Search" value="Search" type="submit"> <br> the Apache Ant site </td> <td><img height="1" width="1" alt="" src="./images/spacer.gif"></td> </tr> <tr> <td><img alt="" border="0" height="10" width="9" src="./images/search-left.gif"></td> <td><img height="1" width="1" alt="" src="./images/spacer.gif"></td> <td><img alt="" border="0" height="10" width="9" src="./images/search-right.gif"></td> </tr> </table> </form> </td> </tr> </table> </div> <div class="tab"> <table summary="tab bar" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="8"><img alt="" height="5" width="8" src="./images/spacer.gif"></td><td valign="bottom"> <table summary="selected tab" style="height: 1.5em" border="0" cellpadding="0" cellspacing="0"> <tr> <td valign="top" width="5" bgcolor="#4C6C8F"><img height="5" width="5" alt="" src="./images/tabSel-left.gif"></td><td valign="middle" bgcolor="#4C6C8F"><font color="#ffffff" size="2" face="Arial, Helvetica, Sans-serif"><b>Home</b></font></td><td valign="top" width="5" bgcolor="#4C6C8F"><img height="5" width="5" alt="" src="./images/tabSel-right.gif"></td> </tr> </table> </td> <td width="5"><img alt="" height="8" width="8" src="./images/spacer.gif"></td><td valign="bottom"> <table summary="non selected tab" style="height: 1.4em" border="0" cellpadding="0" cellspacing="0"> <tr> <td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="./images/tab-left.gif"></td><td valign="middle" bgcolor="#B2C4E0"><a href="./projects/index.html"><font size="2" face="Arial, Helvetica, Sans-serif">Projects</font></a></td><td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="./images/tab-right.gif"></td> </tr> </table> </td> </tr> </table> </div> <div class="bluebar"></div> <div class="menucontainer"> <div class="menu"> <ul> <li class="menuheader">Apache Ant <ul> <li> <a href="./index.html">Welcome</a> </li> <li> <a href="./license.html">License</a> </li> <li> <a href="./antnews.html">News</a> </li> </ul> </li> <li class="menuheader">Documentation <ul> <li> <a href="./manual/index.html">Manual</a> </li> <li> <a href="./projects.html">Related Projects</a> </li> <li> <a href="./external.html">External Tools and Tasks</a> </li> <li> <a href="./resources.html">Resources</a> </li> <li> <a href="./faq.html">Frequently Asked Questions</a> </li> <li> <a href="http://wiki.apache.org/ant/FrontPage">Wiki</a> </li> <li> <a href="./problems.html">Having Problems?</a> </li> </ul> </li> <li class="menuheader">Download <ul> <li> <a href="http://ant.apache.org/bindownload.cgi">Binary Distributions</a> </li> <li> <a href="http://ant.apache.org/srcdownload.cgi">Source Distributions</a> </li> </ul> </li> <li class="menuheader">Contributing <ul> <li> <a href="./mail.html">Mailing Lists</a> </li> <li> <a href="./svn.html">Subversion Repositories</a> </li> <li> <span class="sel">Nightly Builds</span> </li> <li> <a href="./bugs.html">Bug Database</a> </li> <li> <a href="http://www.apache.org/foundation/contributing.html">Donations</a> </li> </ul> </li> <li class="menuheader">Project Management <ul> <li> <a href="./contributors.html">Contributors</a> </li> <li> <a href="./mission.html">Apache Ant Mission</a> </li> <li> <a href="./bylaws.html">Project Bylaws</a> </li> <li> <a href="./legal.html">Legal</a> </li> </ul> </li> </ul> </div> <img style="float: left" height="10" width="10" border="0" alt="" src="./images/menu-left.gif"> <img style="float: right" height="10" width="10" border="0" alt="" src="./images/menu-right.gif"> </div> <div class="lightbluebar"> </div> <div class="main"> <div class="content"> <h1 class="title">Nightly Builds</h1> <h3 class="section"> <a name="Nightly Builds"></a> Nightly Builds </h3> <p>If you wish to use the latest Ant features, you can try downloading a <a href="http://people.apache.org/builds/ant/nightly/">nightly build</a>. </p> <p>If you want to build Ant from sources, you can use a <a href="http://svn.apache.org/snapshots/ant/">Subversion snapshot</a>.</p> </div> </div> <p class="copyright"> <script type="text/javascript" language="JavaScript"><!-- document.write(" - "+"Last Published: " + document.lastModified); // --> </script> </p> </body> </html> --- NEW FILE: legal.html --- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="en"> <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! --> <head> <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Apache Ant - Legal</title> <link type="text/css" href="./page.css" rel="stylesheet"> <meta name="author" content="Jon S. Stevens"> <meta name="email" content="jo...@la..."> </head> <body> <p class="navpath"> <script src="./breadcrumbs.js" language="JavaScript" type="text/javascript"></script> ... [truncated message content] |