git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@269494 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -0,0 +1,101 @@ | |||
| <?xml version="1.0"?> | |||
| <document> | |||
| <properties> | |||
| <author email="conor@cortexebusiness.com.au">Conor MacNeill</author> | |||
| <author email="stefan.bodewig@epost.de">Stefan Bodewig</author> | |||
| <title>Ant News</title> | |||
| </properties> | |||
| <body> | |||
| <section name="Ant Needs a Logo"> | |||
| <p>Ant still doesn't have a Logo, but it sure deserves one. We've | |||
| put together a <a href="logos.html">page with proposed | |||
| logos</a>, please take a look at them and tell us what you | |||
| think. If you have a nice logo idea yourself, just submit it to | |||
| the mailing lists.</p> | |||
| </section> | |||
| <section name="Ant 2.0 Requirements Collected - Next is Design"> | |||
| <p>A commented version of the collected user requirements is now | |||
| available <a href="/ant/ant2/features.html">here</a> - it is not | |||
| complete as some details still have to be defined, but it should | |||
| give you an idea of what Ant2 is going to look like.</p> | |||
| <p>Several details can only be decided in the light of real code | |||
| and prototypes. Several people are working on prototypes (that | |||
| can be found in Ant's CVS module in the proposals directory) and | |||
| discussion is going on on the Ant-Dev mailing list.</p> | |||
| </section> | |||
| <section name="Best-Practices Profile of Ant at Sun's Dot-Com Builder"> | |||
| <p>Sun has released an introductory article on Ant on their | |||
| Dot-Com Builder site on May 30 2001. See <a | |||
| href="http://dcb.sun.com/practices/profiles/ant.jsp">http://dcb.sun.com/practices/profiles/ant.jsp</a></p> | |||
| </section> | |||
| <section name="Ant 2.0 Requirements"> | |||
| <p>Ant has been in use for quite some time and has been used in ways never conceived when it | |||
| was originally written. While Ant 1.x has continued to sucessfully evolve and grow, there | |||
| are a number of limitations and inconsistencies that are now apparent and which need to | |||
| be addressed. | |||
| </p> | |||
| <p> | |||
| As we continue to evolve and enhance Ant 1.x, it is now time to define what Ant 2.0 will | |||
| encompass. Ant 2.0 will be a major rearchitecting of Ant. It has a number of goals including: | |||
| <ul> | |||
| <li>Define the "contract" with build file writers to which Ant will be bound.</li> | |||
| <li>Define the "contract" between the Ant core and Task writers.</li> | |||
| <li>Make Ant more easily extendable by allowing additional tasks to be "dropped" in.</li> | |||
| <li>Allow Ant to function as a component to simplify integration with GUIs and IDEs.</li> | |||
| <li>Make Ant more regular and logical.</li> | |||
| </ul> | |||
| It is expected that Ant 2.0 will break Ant 1.x based build files. The intention is to | |||
| make this the last time that will happen. | |||
| </p> | |||
| <p> | |||
| To advance the definition of Ant, user requirements are now being accepted on the | |||
| Ant-Dev mailing list. Any requirement will be accepted for consideration. The | |||
| requirements are being collected into a document which is available | |||
| <a href="/ant/ant2/requested-features.txt">on-line</a>. New features will be excepted | |||
| until March 21st, 2001. At that time, each requirement will be discussed | |||
| for inclusion in an Ant 2.0 requirement document. | |||
| </p> | |||
| <p> | |||
| For your reference some of the goals which have shaped the development of Ant 1.x are | |||
| available <a href="/ant/ant2/original-specification.html">here</a>. These continue to be | |||
| relevant to Ant 2.0. | |||
| </p> | |||
| <p> | |||
| If you want to shape the future of Ant, join the | |||
| <a href="/site/mail.html">Ant-Dev mailing list</a> and contribute | |||
| your ideas. | |||
| </p> | |||
| </section> | |||
| <section name="Ant 1.3 Released"> | |||
| <p> | |||
| Ant 1.3 has been released after going through three betas. Thanks to everyone who | |||
| took the time to test the beta and report bugs and enhancements. | |||
| </p> | |||
| <p>You can download the release from | |||
| <a href="http://jakarta.apache.org/builds/jakarta-ant/release/v1.3/">here</a>. | |||
| Both source and binary releases are available in zip, tarball and RPM formats. | |||
| </p> | |||
| <p>Please report all bugs using the | |||
| <a href="http://nagoya.apache.org/bugzilla/enter_bug.cgi?product=Ant">Apache Bugzilla</a> | |||
| </p> | |||
| </section> | |||
| </body> | |||
| </document> | |||
| @@ -0,0 +1,351 @@ | |||
| <?xml version="1.0"?> | |||
| <document> | |||
| <properties> | |||
| <author email="bodewig@apache.org">Stefan Bodewig</author> | |||
| <title>External Tools and Tasks</title> | |||
| </properties> | |||
| <body> | |||
| <section name="External Tools and Tasks"> | |||
| <p>This page lists external resources for Ant: tasks, IDE | |||
| integration tools, loggers, you name it. If you've written | |||
| something that should be included, please post all relevant | |||
| information to one of the mailing lists.</p> | |||
| <p>Nothing listed here is directly supported by the Ant | |||
| developers, if you encounter any problems with them, please use | |||
| the contact information.</p> | |||
| </section> | |||
| <section name="Tasks"> | |||
| <subsection name="AJC"> | |||
| <p><a href="http://aspectj.org">AspectJ</a> is an | |||
| aspect-oriented extension to Java. This task compiles a | |||
| source tree using the AspectJ compiler -- AJC.</p> | |||
| <table> | |||
| <tr> | |||
| <th>Compatibility:</th> | |||
| <td>Ant 1.3</td> | |||
| </tr> | |||
| <tr> | |||
| <th>URL:</th> | |||
| <td><a href="http://aspectj.org/dl">http://aspectj.org/dl</a></td> | |||
| </tr> | |||
| <tr> | |||
| <th>Contact:</th> | |||
| <td><a href="mailto:support@aspectj.org">support@aspectj.org</a></td> | |||
| </tr> | |||
| <tr> | |||
| <th>License:</th> | |||
| <td>Apache Software License</td> | |||
| </tr> | |||
| </table> | |||
| </subsection> | |||
| <subsection name="Anakia"> | |||
| <p>Actually, Anakia is more than just an Ant task, it is a an | |||
| XML transformation tool based on JDOM, Velocity and Ant.</p> | |||
| <table> | |||
| <tr> | |||
| <th>Compatibility:</th> | |||
| <td>Ant 1.2 and 1.3</td> | |||
| </tr> | |||
| <tr> | |||
| <th>URL:</th> | |||
| <td><a href="http://jakarta.apache.org/velocity/anakia.html">http://jakarta.apache.org/velocity/anakia.html</a></td> | |||
| </tr> | |||
| <tr> | |||
| <th>Contact:</th> | |||
| <td><a href="http://jakarta.apache.org/site/mail2.html">Velocity mailing lists</a></td> | |||
| </tr> | |||
| <tr> | |||
| <th>License:</th> | |||
| <td>Apache Software License</td> | |||
| </tr> | |||
| </table> | |||
| </subsection> | |||
| <subsection name="Checkstyle"> | |||
| <p>Checkstyle is a development tool to help programmers write | |||
| Java code that adheres to a coding standard. Its purpose is to | |||
| automate the process of checking Java code, and to spare | |||
| humans of this boring (but important) task.</p> | |||
| <p>Checkstyle can be run via an ANT task or a command line | |||
| utility.</p> | |||
| <table> | |||
| <tr> | |||
| <th>Compatibility:</th> | |||
| <td>Ant 1.2 and 1.3</td> | |||
| </tr> | |||
| <tr> | |||
| <th>URL:</th> | |||
| <td><a href="http://www.puppycrawl.com/checkstyle">http://www.puppycrawl.com/checkstyle</a></td> | |||
| </tr> | |||
| <tr> | |||
| <th>Contact:</th> | |||
| <td><a href="mailto:checkstyle@puppycrawl.com">Oliver Burn</a></td> | |||
| </tr> | |||
| <tr> | |||
| <th>License:</th> | |||
| <td>GNU General Public License</td> | |||
| </tr> | |||
| </table> | |||
| </subsection> | |||
| <subsection name="Configure"> | |||
| <p>Recursive build support (call ant on every package level, | |||
| and only build files in that package or in that package and | |||
| everything below) with seperation of source and output.</p> | |||
| <p>The task generates build files in any subdirectory (except | |||
| for CVS-directories) for you. Only place one build.xml file in | |||
| the top and call target 'setup' or | |||
| 'rescan'.</p> | |||
| <table> | |||
| <tr> | |||
| <th>Compatibility:</th> | |||
| <td>Ant 1.2 and 1.3</td> | |||
| </tr> | |||
| <tr> | |||
| <th>URL:</th> | |||
| <td><a href="http://www.dsdelft.nl/~lemval/ant/">http://www.dsdelft.nl/~lemval/ant/</a></td> | |||
| </tr> | |||
| <tr> | |||
| <th>Contact:</th> | |||
| <td><a href="mailto:lemval@dsdelft.nl">M.J.P. van Leeuwen</a></td> | |||
| </tr> | |||
| <tr> | |||
| <th>License:</th> | |||
| <td>License derived from Apache Software License</td> | |||
| </tr> | |||
| </table> | |||
| </subsection> | |||
| <subsection name="J2ME Ant Tasks"> | |||
| <p>There are two different sets of tasks to help build <a | |||
| href="http://java.sun.com/j2me/">Java 2 Platform, Micro | |||
| Edition</a> (J2ME) applications.</p> | |||
| <p>This set supports CLDC and the K Virtual Machine (KVM):</p> | |||
| <table> | |||
| <tr> | |||
| <th>Compatibility:</th> | |||
| <td>Ant 1.3</td> | |||
| </tr> | |||
| <tr> | |||
| <th>URL:</th> | |||
| <td><a href="http://www.dribin.org/dave/j2me_ant/">http://www.dribin.org/dave/j2me_ant/</a></td> | |||
| </tr> | |||
| <tr> | |||
| <th>Contact:</th> | |||
| <td><a href="mailto:drib@enteract.com">Dave Dribin</a></td> | |||
| </tr> | |||
| <tr> | |||
| <th>License:</th> | |||
| <td>Apache Software License</td> | |||
| </tr> | |||
| </table> | |||
| <p>And this set works with the J2ME Wireless Toolkit and MIDP | |||
| for PalmOS:</p> | |||
| <table> | |||
| <tr> | |||
| <th>Compatibility:</th> | |||
| <td>Ant 1.3</td> | |||
| </tr> | |||
| <tr> | |||
| <th>URL:</th> | |||
| <td><a href="http://www.stampysoft.com/ant/">http://www.stampysoft.com/ant/</a></td> | |||
| </tr> | |||
| <tr> | |||
| <th>Contact:</th> | |||
| <td><a href="mailto:jeckels@stampysoft.com">Josh Eckels</a></td> | |||
| </tr> | |||
| <tr> | |||
| <th>License:</th> | |||
| <td>MIT License</td> | |||
| </tr> | |||
| </table> | |||
| </subsection> | |||
| <subsection name="TiniAnt"> | |||
| <p>TiniAnt is an Ant task to support building applications for | |||
| the <a href="http://www.ibutton.com/TINI/">TINI</a>.</p> | |||
| <table> | |||
| <tr> | |||
| <th>Compatibility:</th> | |||
| <td>Ant 1.2 and 1.3</td> | |||
| </tr> | |||
| <tr> | |||
| <th>URL:</th> | |||
| <td><a href="http://tiniant.sourceforge.net/">http://tiniant.sourceforge.net/</a></td> | |||
| </tr> | |||
| <tr> | |||
| <th>Contact:</th> | |||
| <td><a href="mailto:kelly@ad1440.net">Sean Kelly</a></td> | |||
| </tr> | |||
| <tr> | |||
| <th>License:</th> | |||
| <td>BSD-like license</td> | |||
| </tr> | |||
| </table> | |||
| </subsection> | |||
| <subsection name="Venus Application Publisher's (Vamp) Ant Task Suite"> | |||
| <p>Venus Application Publisher's (Vamp) Ant Task Suite allows | |||
| you to sign and package your applications into relocatable Web | |||
| Archives that you can drop into your web server for | |||
| single-click launching using Java Web Start or into single | |||
| Java Archive installers that serve up their content through a | |||
| built-in, multi-threaded, ultra light-weight web server.</p> | |||
| <table> | |||
| <tr> | |||
| <th>Compatibility:</th> | |||
| <td>Ant 1.2 and 1.3</td> | |||
| </tr> | |||
| <tr> | |||
| <th>URL:</th> | |||
| <td><a href="http://www.geocities.com/vamp201/ant.html">http://www.geocities.com/vamp201/ant.html</a></td> | |||
| </tr> | |||
| <tr> | |||
| <th>Contact:</th> | |||
| <td><a href="mailto:vamp201@yahoo.com">Gerald Bauer</a></td> | |||
| </tr> | |||
| <tr> | |||
| <th>License:</th> | |||
| <td>GNU General Public License</td> | |||
| </tr> | |||
| </table> | |||
| </subsection> | |||
| </section> | |||
| <section name="IDE/Editor Integration"> | |||
| <subsection name="AntRunner"> | |||
| <p>An OpenTool that integrates Ant into the JBuilder IDE.</p> | |||
| <table> | |||
| <tr> | |||
| <th>Compatibility:</th> | |||
| <td>Ant 1.2 and 1.3</td> | |||
| </tr> | |||
| <tr> | |||
| <th>URL:</th> | |||
| <td><a href="http://www.dieter-bogdoll.de/java/AntRunner/">http://www.dieter-bogdoll.de/java/AntRunner/</a></td> | |||
| </tr> | |||
| <tr> | |||
| <th>Contact:</th> | |||
| <td><a href="mailto:bogdoll@users.sourceforge.net">Dieter Bogdoll</a></td> | |||
| </tr> | |||
| <tr> | |||
| <th>License:</th> | |||
| <td>GNU General Public License</td> | |||
| </tr> | |||
| </table> | |||
| </subsection> | |||
| <subsection name="AntWork"> | |||
| <p>A plugin that integrates Ant into the Jext editor.</p> | |||
| <table> | |||
| <tr> | |||
| <th>Compatibility:</th> | |||
| <td>Ant 1.2 and 1.3</td> | |||
| </tr> | |||
| <tr> | |||
| <th>URL:</th> | |||
| <td><a href="ftp://jext.sourceforge.net/pub/jext/plugins/AntWork.zip">ftp://jext.sourceforge.net/pub/jext/plugins/AntWork.zip</a></td> | |||
| </tr> | |||
| <tr> | |||
| <th>Contact:</th> | |||
| <td><a href="mailto:KHartlage@t-online.de">Klaus Hartlage</a></td> | |||
| </tr> | |||
| <tr> | |||
| <th>License:</th> | |||
| <td>GNU General Public License</td> | |||
| </tr> | |||
| </table> | |||
| </subsection> | |||
| <subsection name="NetBeans / Forte for Java"> | |||
| <p>A module that integrates Ant into the NetBeans or Forte for Java IDEs.</p> | |||
| <table> | |||
| <tr> | |||
| <th>Compatibility:</th> | |||
| <td>bundles Ant 1.3</td> | |||
| </tr> | |||
| <tr> | |||
| <th>URL:</th> | |||
| <td><a href="http://ant.netbeans.org/">http://ant.netbeans.org/</a></td> | |||
| </tr> | |||
| <tr> | |||
| <th>Contact:</th> | |||
| <td><a href="mailto:nbdev@netbeans.org">nbdev@netbeans.org</a></td> | |||
| </tr> | |||
| <tr> | |||
| <th>License:</th> | |||
| <td>Sun Public License</td> | |||
| </tr> | |||
| </table> | |||
| </subsection> | |||
| </section> | |||
| <section name="Other"> | |||
| <subsection name="CruiseControl"> | |||
| <p>CruiseControl is a tool for setting up a continuous build | |||
| process. CruiseControl provides an Ant wrapper and a set of | |||
| tasks to automate the checkout/build/test cycle. CruiseControl | |||
| also comes bundled with a servlet for viewing the status of | |||
| the current build, as well as previous build results.</p> | |||
| <table> | |||
| <tr> | |||
| <th>Compatibility:</th> | |||
| <td>Ant 1.2 and 1.3</td> | |||
| </tr> | |||
| <tr> | |||
| <th>URL:</th> | |||
| <td><a href="http://cruisecontrol.sourceforge.net/">http://cruisecontrol.sourceforge.net/</a></td> | |||
| </tr> | |||
| <tr> | |||
| <th>Contact:</th> | |||
| <td><a href ='http://cruisecontrol.sourceforge.net/contact.html'>Project Mailing Lists and Administrators</a></td> | |||
| </tr> | |||
| <tr> | |||
| <th>License:</th> | |||
| <td>Release 1.0 has been licensed under the GNU General Public | |||
| License. Starting with release 1.1 the license has been | |||
| changed to a BSD-like license.</td> | |||
| </tr> | |||
| </table> | |||
| </subsection> | |||
| </section> | |||
| </body> | |||
| </document> | |||
| @@ -0,0 +1,581 @@ | |||
| <?xml version="1.0"?> | |||
| <document> | |||
| <properties> | |||
| <author email="bodewig@apache.org">Stefan Bodewig</author> | |||
| <title>Frequently Asked Questions</title> | |||
| </properties> | |||
| <faqsection title="General"> | |||
| <faq id="what-is-ant"> | |||
| <question>What is Ant?</question> | |||
| <answer> | |||
| <p> Ant is a Java based build tool. In theory it is kind of | |||
| like "make" without makes wrinkles and with the full | |||
| portability of pure Java code.</p> | |||
| </answer> | |||
| </faq> | |||
| <faq id="ant-name"> | |||
| <question>Why do you call it Ant?</question> | |||
| <answer> | |||
| <p>According to Ant's original author James Duncan | |||
| Davidson, the name is an acronym for "Another Neat | |||
| Tool".</p> | |||
| <p>Later explanations go along the lines of "Ants are | |||
| doing an extremely good job at building things" or | |||
| "Ants are very small and can carry a weight a dozen times | |||
| of their own" - describing what Ant is intended to | |||
| be.</p> | |||
| </answer> | |||
| </faq> | |||
| <faq id="history"> | |||
| <question>Tell us a little bit about Ant's history.</question> | |||
| <answer> | |||
| <p>Initially Ant was part of the Tomcat code base when it was | |||
| donated to the Apache Software Foundation - it has been | |||
| created by James Duncan Davidson, who also is the original | |||
| author of Tomcat. Ant was there to build Tomcat, nothing | |||
| else.</p> | |||
| <p>Soon thereafter several open source Java projects realized | |||
| that Ant could solve the problems they had with makefiles. | |||
| Starting with the projects hosted at Jakarta and the old Java | |||
| Apache project, Ant spread like a virus and now is the build | |||
| tool of choice for a lot of projects.</p> | |||
| <p>In January 2000 Ant was moved to a separate CVS module and | |||
| was promoted to a project of its own, independent of | |||
| Tomcat.</p> | |||
| <p>The first version of Ant that was exposed a lager audience | |||
| was the one that shipped with Tomcat's 3.1 release on 19 April | |||
| 2000. This version has later been referenced to as Ant | |||
| 0.3.1.</p> | |||
| <p>The first official release of Ant as a stand alone product was | |||
| Ant 1.1 released on 19 July 2000. The complete release | |||
| history:</p> | |||
| <table> | |||
| <tr> | |||
| <th>Ant Version</th> | |||
| <th>Release Date</th> | |||
| </tr> | |||
| <tr> | |||
| <td>1.1</td> | |||
| <td>19 July 2000</td> | |||
| </tr> | |||
| <tr> | |||
| <td>1.2</td> | |||
| <td>24 October 2000</td> | |||
| </tr> | |||
| <tr> | |||
| <td>1.3</td> | |||
| <td>3 March 2001</td> | |||
| </tr> | |||
| </table> | |||
| </answer> | |||
| </faq> | |||
| </faqsection> | |||
| <faqsection title="Installation"> | |||
| <faq id="no-gnu-tar"> | |||
| <question>I get checksum errors when I try to extract the | |||
| <code>tar.gz</code> distribution file. Why?</question> | |||
| <answer> | |||
| <p>Ant's distribution contains file names that are longer | |||
| than 100 characters, which is not supported by the standard | |||
| tar file format. Several different implementations of tar use | |||
| different and incompatible ways to work around this | |||
| restriction.</p> | |||
| <p>Ant's <tar> task can create tar archives that use | |||
| the GNU tar extension, and this has been used when putting | |||
| together the distribution. If you are using a different | |||
| version of tar (for example, the one shipping with Solaris), | |||
| you cannot use it to extract the archive.</p> | |||
| <p>The solution is to either install GNU tar, which can be | |||
| found <a href="http://www.gnu.org/software/tar/tar.html">here</a> | |||
| or use the zip archive instead (you can extract it using | |||
| <code>jar xf</code>).</p> | |||
| </answer> | |||
| </faq> | |||
| </faqsection> | |||
| <faqsection title="Using Ant"> | |||
| <faq id="always-recompiles"> | |||
| <question>Why does Ant always recompile all my Java files?</question> | |||
| <answer> | |||
| <p>In order to find out which files should be compiled, Ant | |||
| compares the timestamps of the source files to those of the | |||
| resulting <code>.class</code> files. Opening all source files | |||
| to find out which package they belong to would be very | |||
| inefficient - instead of this, Ant expects you to place your | |||
| source files in a directory hierarchy that mirrors your | |||
| package hierarchy and to point Ant to the root of this | |||
| directory tree with the <code>srcdir</code> attribute.</p> | |||
| <p>Say you have <code><javac srcdir="src" | |||
| destdir="dest" /></code>. If Ant finds a file | |||
| <code>src/a/b/C.java</code> it expects it to be in package | |||
| <code>a.b</code> so that the resulting <code>.class</code> | |||
| file is going to be <code>dest/a/b/C.class</code>.</p> | |||
| <p>If your setup is different, Ant's heuristic won't work and | |||
| it will recompile classes that are up to date. Ant is not the | |||
| only tool, that expects a source tree layout like this.</p> | |||
| </answer> | |||
| </faq> | |||
| <faq id="passing-cli-args"> | |||
| <question>How do I pass parameters from the command line to my | |||
| build file?</question> | |||
| <answer> | |||
| <p>Use properties: <code>ant | |||
| -D<name>=<value></code> lets you define values for | |||
| properties. These can then be used within your build file as | |||
| any normal property: <code>${<name>}</code> will put in | |||
| <code><value></code>.</p> | |||
| </answer> | |||
| </faq> | |||
| <faq id="jikes-switches"> | |||
| <question>How can I use Jikes specific command line | |||
| switches?</question> | |||
| <answer> | |||
| <p>A couple of switches are supported via magic | |||
| properties:</p> | |||
| <table> | |||
| <tr> | |||
| <th>switch</th> | |||
| <th>property</th> | |||
| <th>default</th> | |||
| </tr> | |||
| <tr> | |||
| <td>+E</td> | |||
| <td>build.compiler.emacs</td> | |||
| <td>false == not set</td> | |||
| </tr> | |||
| <tr> | |||
| <td>-nowarn</td> | |||
| <td>build.compiler.warnings</td> | |||
| <td>true == not set</td> | |||
| </tr> | |||
| <tr> | |||
| <td>+P</td> | |||
| <td>build.compiler.pedantic</td> | |||
| <td>false == not set</td> | |||
| </tr> | |||
| <tr> | |||
| <td>+F</td> | |||
| <td>build.compiler.fulldepend</td> | |||
| <td>false == not set</td> | |||
| </tr> | |||
| </table> | |||
| </answer> | |||
| </faq> | |||
| <faq id="shell-redirect-1"> | |||
| <question>How do I include a < character in my command line arguments?</question> | |||
| <answer> | |||
| <p>The short answer is "Use <code>&lt;</code>".</p> | |||
| <p>The long answer is, that this probably won't do what you | |||
| want anyway, see <a href="#shell-redirect-2">the next | |||
| section</a>.</p> | |||
| </answer> | |||
| </faq> | |||
| <faq id="shell-redirect-2"> | |||
| <question>How do I redirect standard input or standard output | |||
| in the <code><exec></code> task?</question> | |||
| <answer> | |||
| <p>Say you want to redirect the standard input stream of the | |||
| <code>cat</code> command to read from a file, something | |||
| like</p> | |||
| <source><![CDATA[ | |||
| shell-prompt> cat < foo | |||
| ]]></source> | |||
| <p>and try to translate it into</p> | |||
| <source><![CDATA[ | |||
| <exec executable="cat"> | |||
| <arg value="<" /> | |||
| <arg value="foo" /> | |||
| </exec> | |||
| ]]></source> | |||
| <p>This will not do what you expect. The input-redirection is | |||
| performed by your shell, not the command itself, so this | |||
| should read:</p> | |||
| <source><![CDATA[ | |||
| <exec executable="/bin/sh"> | |||
| <arg value="-c" /> | |||
| <arg value="cat < foo" /> | |||
| </exec> | |||
| ]]></source> | |||
| <p>Note, that you must use the <code>value</code> attribute of | |||
| <code><arg></code> in the last element.</p> | |||
| </answer> | |||
| </faq> | |||
| </faqsection> | |||
| <faqsection title="Ant and IDEs/Editors"> | |||
| <faq id="integration"> | |||
| <question>Is Ant supported by my IDE/Editor?</question> | |||
| <answer> | |||
| <p>See the <a href="external.html#IDE%47Editor+Integration">section | |||
| on IDE integration</a> on our external tools page.</p> | |||
| </answer> | |||
| </faq> | |||
| <faq id="emacs-mode"> | |||
| <question>Why doesn't (X)Emacs/vi/MacOS X's project builder | |||
| parse the error messages generated by Ant correctly?</question> | |||
| <answer> | |||
| <p>Ant adds a "banner" with the name of the current | |||
| task in front of all messages - and there are no built-in | |||
| regular expressions in your Editor that would account for | |||
| this.</p> | |||
| <p>You can disable this banner by invoking Ant with the | |||
| <code>-emacs</code> switch. Alternatively you can add the | |||
| following snippet to your <code>.emacs</code> to make Emacs | |||
| understand Ant's output.</p> | |||
| <source><![CDATA[ | |||
| (require 'compile) | |||
| (setq compilation-error-regexp-alist | |||
| (append (list | |||
| ;; works for jikes | |||
| '("^\\s-*\\[[^]]*\\]\\s-*\\(.+\\):\\([0-9]+\\):\\([0-9]+\\):[0-9]+:[0-9]+:" 1 2 3) | |||
| ;; works for javac | |||
| '("^\\s-*\\[[^]]*\\]\\s-*\\(.+\\):\\([0-9]+\\):" 1 2)) | |||
| compilation-error-regexp-alist)) | |||
| ]]></source> | |||
| <p>Yet another alternative that preserves most of Ant's | |||
| formatting is to pipe Ant's output through the following Perl | |||
| script by Dirk-Willem van Gulik:</p> | |||
| <source><![CDATA[ | |||
| #!/usr/bin/perl | |||
| # | |||
| # May 2001 dirkx@apache.org - remove any | |||
| # [foo] lines from the output; keeping | |||
| # spacing more or less there. | |||
| # | |||
| $|=1; | |||
| while(<STDIN>) { | |||
| if (s/^(\s+)\[(\w+)\]//) { | |||
| if ($2 ne $last) { | |||
| print "$1\[$2\]"; | |||
| $s = ' ' x length($2); | |||
| } else { | |||
| print "$1 $s "; | |||
| }; | |||
| $last = $2; | |||
| }; | |||
| print; | |||
| }; | |||
| ]]></source> | |||
| </answer> | |||
| </faq> | |||
| </faqsection> | |||
| <faqsection title="Advanced issues"> | |||
| <faq id="dtd"> | |||
| <question>Is there a DTD that I can use to validate my build | |||
| files?</question> | |||
| <answer> | |||
| <p>An incomplete DTD can be created by the | |||
| <code><antstructure></code> task - but this one | |||
| has a few problems:</p> | |||
| <ul> | |||
| <li>It doesn't know about required attributes. Only | |||
| manual tweaking of this file can help here.</li> | |||
| <li>It is not complete - if you add new tasks via | |||
| <code><taskdef></code> it won't know about it. See | |||
| <a href="http://www.sdv.fr/pages/casa/html/ant-dtd.en.html">this | |||
| page</a> by Michel Casabianca for a solution to this | |||
| problem. Note that the DTD you can download at this page | |||
| is based on Ant 0.3.1.</li> | |||
| <li>It may even be an invalid DTD. As Ant allows tasks | |||
| writers to define arbitrary elements, name collisions will | |||
| happen quite frequently - if your version of Ant contains | |||
| the optional <code><test></code> and | |||
| <code><junit></code> tasks, there are two XML | |||
| elements named test (the task and the nested child element | |||
| of <code><junit></code>) with different attribute | |||
| lists. This problem cannot be solved, DTDs don't give a | |||
| syntax rich enough to support this.</li> | |||
| </ul> | |||
| </answer> | |||
| </faq> | |||
| <faq id="xml-entity-include"> | |||
| <question>How do I include an XML snippet in my build file?</question> | |||
| <answer> | |||
| <p>You can use XML's way of including external files and let | |||
| the parser do the job for Ant:</p> | |||
| <source><![CDATA[ | |||
| <?xml version="1.0"?> | |||
| <!DOCTYPE project [ | |||
| <!ENTITY common SYSTEM "file:./common.xml"> | |||
| ]> | |||
| <project name="test" default="test" basedir="."> | |||
| <target name="setup"> | |||
| ... | |||
| </target> | |||
| &common; | |||
| ... | |||
| </project> | |||
| ]]></source> | |||
| <p>will literally include the contents of <code>common.xml</code> where | |||
| you've placed the <code>&common;</code> entity.</p> | |||
| <p>In combination with a DTD, this would look like this:</p> | |||
| <source><![CDATA[ | |||
| <!DOCTYPE project PUBLIC "-//ANT//DTD project//EN" "file:./ant.dtd" [ | |||
| <!ENTITY include SYSTEM "file:./header.xml"> | |||
| ]> | |||
| ]]></source> | |||
| </answer> | |||
| </faq> | |||
| <faq id="mail-logger"> | |||
| <question>How do I send an email with the result of my build | |||
| process?</question> | |||
| <answer> | |||
| <p>You can use a custom BuildListener, that sends out an email | |||
| in the buildFinished() method. Will Glozer | |||
| <will.glozer@jda.com> has written such a listener based | |||
| on <a href="http://java.sun.com/products/javamail/">JavaMail</a>, | |||
| the source is</p> | |||
| <source><![CDATA[ | |||
| import java.io.*; | |||
| import java.util.*; | |||
| import javax.mail.*; | |||
| import javax.mail.internet.*; | |||
| import org.apache.tools.ant.*; | |||
| /** | |||
| * A simple listener that waits for a build to finish and sends an email | |||
| * of the results. The settings are stored in "monitor.properties" and | |||
| * are fairly self explanatory. | |||
| * | |||
| * @author Will Glozer | |||
| * @version 1.05a 09/06/2000 | |||
| */ | |||
| public class BuildMonitor implements BuildListener { | |||
| protected Properties props; | |||
| /** | |||
| * Create a new BuildMonitor. | |||
| */ | |||
| public BuildMonitor() throws Exception { | |||
| props = new Properties(); | |||
| InputStream is = getClass().getResourceAsStream("monitor.properties"); | |||
| props.load(is); | |||
| is.close(); | |||
| } | |||
| public void buildStarted(BuildEvent e) { | |||
| } | |||
| /** | |||
| * Determine the status of the build and the actions to follow, now that | |||
| * the build has completed. | |||
| * | |||
| * @param e Event describing the build tatus. | |||
| */ | |||
| public void buildFinished(BuildEvent e) { | |||
| Throwable th = e.getException(); | |||
| String status = (th != null) ? "failed" : "succeeded"; | |||
| try { | |||
| String key = "build." + status; | |||
| if (props.getProperty(key + ".notify").equalsIgnoreCase("false")) { | |||
| return; | |||
| } | |||
| Session session = Session.getDefaultInstance(props, null); | |||
| MimeMessage message = new MimeMessage(session); | |||
| message.addRecipients(Message.RecipientType.TO, parseAddresses( | |||
| props.getProperty(key + ".email.to"))); | |||
| message.setSubject(props.getProperty(key + ".email.subject")); | |||
| BufferedReader br = new BufferedReader(new FileReader( | |||
| props.getProperty("build.log"))); | |||
| StringWriter sw = new StringWriter(); | |||
| String line = br.readLine(); | |||
| while (line != null) { | |||
| sw.write(line); | |||
| sw.write("\n"); | |||
| line = br.readLine(); | |||
| } | |||
| br.close(); | |||
| message.setText(sw.toString(), "UTF-8"); | |||
| sw.close(); | |||
| Transport transport = session.getTransport(); | |||
| transport.connect(); | |||
| transport.send(message); | |||
| transport.close(); | |||
| } catch (Exception ex) { | |||
| System.out.println("BuildMonitor failed to send email!"); | |||
| ex.printStackTrace(); | |||
| } | |||
| } | |||
| /** | |||
| * Parse a comma separated list of internet email addresses. | |||
| * | |||
| * @param s The list of addresses. | |||
| * @return Array of Addresses. | |||
| */ | |||
| protected Address[] parseAddresses(String s) throws Exception { | |||
| StringTokenizer st = new StringTokenizer(s, ","); | |||
| Address[] addrs = new Address[st.countTokens()]; | |||
| for (int i = 0; i < addrs.length; i++) { | |||
| addrs[i] = new InternetAddress(st.nextToken()); | |||
| } | |||
| return addrs; | |||
| } | |||
| public void messageLogged(BuildEvent e) { | |||
| } | |||
| public void targetStarted(BuildEvent e) { | |||
| } | |||
| public void targetFinished(BuildEvent e) { | |||
| } | |||
| public void taskStarted(BuildEvent e) { | |||
| } | |||
| public void taskFinished(BuildEvent e) { | |||
| } | |||
| } | |||
| ]]></source> | |||
| <p>With a <code>monitor.properties</code> like this</p> | |||
| <source><![CDATA[ | |||
| # configuration for build monitor | |||
| mail.transport.protocol=smtp | |||
| mail.smtp.host=<host> | |||
| mail.from=Will Glozer <will.glozer@jda.com> | |||
| build.log=build.log | |||
| build.failed.notify=true | |||
| build.failed.email.to=will.glozer@jda.com | |||
| build.failed.email.subject=Nightly build failed! | |||
| build.succeeded.notify=true | |||
| build.succeeded.email.to=will.glozer@jda.com | |||
| build.succeeded.email.subject=Nightly build succeeded! | |||
| ]]></source> | |||
| <p><code>monitor.properties</code> should be placed right next | |||
| to your compiled <code>BuildMonitor.class</code>. To use it, | |||
| invoke Ant like</p> | |||
| <source><![CDATA[ | |||
| ant -listener BuildMonitor | |||
| ]]></source> | |||
| <p>Make sure that <code>mail.jar</code> from JavaMail and | |||
| <code>activation.jar</code> from the | |||
| <a href="http://java.sun.com/products/javabeans/glasgow/jaf.html">Java | |||
| Beans Activation Framework</a> in your <code>CLASSPATH</code>.</p> | |||
| </answer> | |||
| </faq> | |||
| </faqsection> | |||
| <faqsection title="Known problems"> | |||
| <faq id="remove-cr"> | |||
| <question><chmod> or <exec> don't work in Ant | |||
| 1.3 on Unix</question> | |||
| <answer> | |||
| <p>The <code>antRun</code> script in <code>ANT_HOME/bin</code> | |||
| has DOS instead of Unix line endings, you must remove the | |||
| carriage return characters from this file. This can be done by | |||
| using Ant's <fixcrlf> task or something like:</p> | |||
| <source><![CDATA[ | |||
| tr -d '\r' < $ANT_HOME/bin/antRun > /tmp/foo | |||
| mv /tmp/foo $ANT_HOME/bin/antRun | |||
| ]]></source> | |||
| </answer> | |||
| </faq> | |||
| <faq id="javadoc-cannot-execute"> | |||
| <question>JavaDoc failed: java.io.IOException: javadoc: cannot execute</question> | |||
| <answer> | |||
| <p>There is a bug in the Solaris reference implementation of | |||
| the JDK, see <a href="http://developer.java.sun.com/developer/bugParade/bugs/4230399.html">http://developer.java.sun.com/developer/bugParade/bugs/4230399.html</a>. | |||
| This also appears to be true under Linux, moving the JDK to | |||
| the front of the PATH fixes the problem.</p> | |||
| </answer> | |||
| </faq> | |||
| </faqsection> | |||
| </document> | |||
| @@ -0,0 +1,115 @@ | |||
| <?xml version="1.0"?> | |||
| <document> | |||
| <properties> | |||
| <author email="conor@cortexebusiness.com.au">Conor MacNeill</author> | |||
| <author email="stefan.bodewig@epost.de">Stefan Bodewig</author> | |||
| <title>Ant</title> | |||
| </properties> | |||
| <body> | |||
| <section name="Ant"> | |||
| <p> | |||
| Ant is a Java based build tool. In theory it is kind of like make without | |||
| make's wrinkles. | |||
| </p> | |||
| <p> | |||
| Why another build tool when there is already make, gnumake, nmake, jam, and | |||
| others? Because all of those tools have limitations that Ant's original author | |||
| couldn't live with when developing software across multiple platforms. Make-like | |||
| tools are inherently shell based. They evaluate a set of dependencies and then | |||
| execute commands not unlike what you would issue on a shell. This means that you | |||
| can easily extend these tools by using or writing any program for the OS that | |||
| you are working on. However, this also means that you limit yourself to the OS, | |||
| or at least the OS type such as Unix, that you are working on. | |||
| </p> | |||
| <p> | |||
| Makefiles are inherently evil as well. Anybody who has worked on them for any | |||
| time has run into the dreaded tab problem. "Is my command not executing | |||
| because I have a space in front of my tab!!!" said the original author of | |||
| Ant way too many times. Tools like Jam took care of this to a great degree, but | |||
| still use yet another format to use and remember. | |||
| </p> | |||
| <p> | |||
| Ant is different. Instead of a model where it is extended with shell based | |||
| commands, it is extended using Java classes. Instead of writing shell commands, | |||
| the configuration files are XML based calling out a target tree where various | |||
| tasks get executed. Each task is run by an object which implements a particular | |||
| Task interface. | |||
| </p> | |||
| <p> | |||
| Granted, this removes some of the expressive power that is inherent by being | |||
| able to construct a shell command such as `find . -name foo -exec rm {}` but it | |||
| gives you the ability to be cross platform. To work anywhere and everywhere. And | |||
| hey, if you really need to execute a shell command, Ant has an exec rule that | |||
| allows different commands to be executed based on the OS that it is executing | |||
| on. | |||
| </p> | |||
| </section> | |||
| <section name="Documentation"> | |||
| <p> | |||
| You can view the documentation for the most recent release | |||
| <a href="manual/index.html">online</a> | |||
| </p> | |||
| <p> | |||
| Comprehensive documentation is included in the source and binary distribtions. | |||
| </p> | |||
| </section> | |||
| <section name="Latest Release"> | |||
| <p> | |||
| You can download the latest release: | |||
| </p> | |||
| <ul> | |||
| <li><a href="http://jakarta.apache.org/builds/jakarta-ant/release/v1.3/bin/"> | |||
| Download the binary release</a></li> | |||
| <li><a href="http://jakarta.apache.org/builds/jakarta-ant/release/v1.3/src/"> | |||
| Download the source release</a></li> | |||
| <li><a href="http://jakarta.apache.org/builds/jakarta-ant/release/v1.3/rpms/"> | |||
| Download source and binary RPMs</a></li> | |||
| </ul> | |||
| </section> | |||
| <section name="Nightly Builds"> | |||
| <p> | |||
| If you wish to use the latest Ant features, you can try downloading a nightly | |||
| build from <a href="http://jakarta.apache.org/builds/jakarta-ant/nightly/">here</a> | |||
| </p> | |||
| </section> | |||
| <section name="Towards Ant2"> | |||
| <p> | |||
| We are currently hashing out design details for Ant2. Please | |||
| read the latest <a href="antnews.html">Ant news</a> for more details. | |||
| </p> | |||
| </section> | |||
| <section name="Get Involved"> | |||
| <ul> | |||
| <li><a href="http://jakarta.apache.org/getinvolved/getinvolvedindex.html">Get Involved</a></li> | |||
| <li><a href="http://jakarta.apache.org/getinvolved/mail.html">Join Mailing Lists</a></li> | |||
| <li><a href="http://marc.theaimsgroup.com/?l=ant-dev&r=1&w=2">Search the Dev Mailing List</a> | |||
| </li> | |||
| <li><a href="http://marc.theaimsgroup.com/?l=ant-user&r=1&w=2">Search the User Mailing List</a> | |||
| </li> | |||
| </ul> | |||
| </section> | |||
| </body> | |||
| </document> | |||
| @@ -0,0 +1,174 @@ | |||
| <?xml version="1.0" encoding="ISO-8859-1" ?> | |||
| <document> | |||
| <properties> | |||
| <author email="stefan.bodewig@epost.de">Stefan Bodewig</author> | |||
| <title>Ant Logo Proposals</title> | |||
| </properties> | |||
| <body> | |||
| <section name="Ant needs a Logo"> | |||
| <p>One of the requirements for Ant2 is, that Ant should have a | |||
| logo. You can find the logos that have been proposed to the Ant | |||
| mailing lists on this page.</p> | |||
| <p>Tell us what you think of them (yes, <em>Powered by</em> should | |||
| better be <em>Built by</em>).</p> | |||
| <table> | |||
| <tr> | |||
| <th>Author</th><th> </th> | |||
| </tr> | |||
| <tr> | |||
| <td>Bill J. Fellows (Bill.J.Fellows at mail.sprint.com)</td> | |||
| <td><img src="images/antLogo1.png" /></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Bill J. Fellows (Bill.J.Fellows at mail.sprint.com)</td> | |||
| <td><img src="images/antLogo2.png" /></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Christoph Wilhelms (Christoph.Wilhelms at t-online.de)</td> | |||
| <td><img src="images/ant_logo.gif" /></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Christoph Wilhelms (Christoph.Wilhelms at t-online.de)</td> | |||
| <td><img src="images/ant2_logo.gif" /></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Warner Onstine (warner at warneronstine.com)</td> | |||
| <td><img src="images/ant-logo2.gif" /></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Chris Coleman (chris.coleman at csfb.com)</td> | |||
| <td><img src="images/coleman.gif" /></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Stefan Lecho (Stefan.Lecho at iconmedialab.com)</td> | |||
| <td><img src="images/lecho.jpg" /></td> | |||
| </tr> | |||
| <tr> | |||
| <td>David Trogdon (DTrogdon at orgtek.com)</td> | |||
| <td><img src="images/trogdon.gif" /></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Mirko Klemm (Mirko.Klemm at t-online.de)</td> | |||
| <td><img src="http://www.mutantenzoo.de/antlogo-400.png" /></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Ryan P Ripley (ryan.ripley at bms.com)</td> | |||
| <td><img src="images/ripley.jpg" /></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Christoph Wilhelms (Christoph.Wilhelms at t-online.de)</td> | |||
| <td><img src="images/wilhelms3.gif" /></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Shane Petroff (shane at hayward.ca)</td> | |||
| <td><img src="images/petroff.jpg" /></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Jim Cheesman (jchees at msl.es)</td> | |||
| <td><img src="images/cheesman.jpg" /></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Kevin Duggins (Kevin.Duggins at definityhealth.com)</td> | |||
| <td><img src="images/duggins.gif" /></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Kevin Duggins (Kevin.Duggins at definityhealth.com)</td> | |||
| <td><img src="images/duggins2.gif" /></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Justin Ransom (Justin.Ransom at rubus.com)</td> | |||
| <td><img src="images/hughes1.gif" /></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Justin Ransom (Justin.Ransom at rubus.com)</td> | |||
| <td><img src="images/hughes2.gif" /></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Martin Schlömer (martin.schloemer at phase26.de)</td> | |||
| <td><img src="images/schloemer.gif" /></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Martin Schlömer (martin.schloemer at phase26.de)</td> | |||
| <td><img src="images/schloemer2.gif" /></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Design Services Team at Hewlett Packard (blair_hughes at hp.com></td> | |||
| <td><img src="images/blairhughes_ant.jpg"/></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Design Services Team at Hewlett Packard (blair_hughes at hp.com></td> | |||
| <td><img src="images/blairhughes_ant2.jpg"/></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Design Services Team at Hewlett Packard (blair_hughes at hp.com></td> | |||
| <td><img src="images/blairhughes_ant3.jpg"/></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Design Services Team at Hewlett Packard (blair_hughes at hp.com></td> | |||
| <td><img src="images/blairhughes_ant4.jpg"/></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Design Services Team at Hewlett Packard (blair_hughes at hp.com></td> | |||
| <td><img src="images/blairhughes_ant5.jpg"/></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Design Services Team at Hewlett Packard (blair_hughes at hp.com></td> | |||
| <td><img src="images/blairhughes_ant6.jpg"/></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Design Services Team at Hewlett Packard (blair_hughes at hp.com></td> | |||
| <td><img src="images/blairhughes_germ1.jpg"/></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Design Services Team at Hewlett Packard (blair_hughes at hp.com></td> | |||
| <td><img src="images/blairhughes_germ2.jpg"/></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Design Services Team at Hewlett Packard (blair_hughes at hp.com></td> | |||
| <td><img src="images/blairhughes_germ3.jpg"/></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Design Services Team at Hewlett Packard (blair_hughes at hp.com></td> | |||
| <td><img src="images/blairhughes_germ4.jpg"/></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Design Services Team at Hewlett Packard (blair_hughes at hp.com></td> | |||
| <td><img src="images/blairhughes_germ5.jpg"/></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Design Services Team at Hewlett Packard (blair_hughes at hp.com></td> | |||
| <td><img src="images/blairhughes_germ6.jpg"/></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Design Services Team at Hewlett Packard (blair_hughes at hp.com></td> | |||
| <td><img src="images/blairhughes_keis1.jpg"/></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Design Services Team at Hewlett Packard (blair_hughes at hp.com></td> | |||
| <td><img src="images/blairhughes_keis2.jpg"/></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Design Services Team at Hewlett Packard (blair_hughes at hp.com></td> | |||
| <td><img src="images/blairhughes_keis3.jpg"/></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Design Services Team at Hewlett Packard (blair_hughes at hp.com></td> | |||
| <td><img src="images/blairhughes_keis4.jpg"/></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Design Services Team at Hewlett Packard (blair_hughes at hp.com></td> | |||
| <td><img src="images/blairhughes_keis5.jpg"/></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Alicia Kolesnikova</td> | |||
| <td><img src="images/kolesnikova.gif"/></td> | |||
| </tr> | |||
| </table> | |||
| </section> | |||
| </body> | |||
| </document> | |||
| @@ -0,0 +1,164 @@ | |||
| <?xml version="1.0"?> | |||
| <document> | |||
| <properties> | |||
| <author email="conor@apache.org">Conor MacNeill</author> | |||
| <title>Having Problems?</title> | |||
| </properties> | |||
| <body> | |||
| <section name="Having Problems?"> | |||
| <p>If you are having problems with Ant, this page details some steps you can take | |||
| to try and resolve the problem. If you can't resolve the problem then this page will help | |||
| you collect some of the relevant information to provide a bug report. This information will help | |||
| the Ant developers understand and resolve the problem. Of course, not all of the steps here will | |||
| make sense for every problem you encounter. These are just some suggestions to | |||
| point you in the right direction. | |||
| </p> | |||
| <subsection name="Read the Manual"> | |||
| <p>The first step to take when you have a problem is to read the <a href="manual/index.html"> | |||
| manual</a> entry for the task or concept that is giving you trouble. Check particularly the meaning of | |||
| attributes and nested elements. Perhaps an attribute would provide the behavior you require. If you | |||
| have problems with the manual, then you can submit a documentation bug report (see below) to help us | |||
| improve the Ant documentation. | |||
| </p> | |||
| </subsection> | |||
| <subsection name="Examine Debug Output"> | |||
| <p>The first step when you have a problem is to see what Ant is doing. Try running Ant with | |||
| The verbose flag<br/><br/> | |||
| <code>ant -verbose</code><br/><br/> | |||
| or<br/><br/> | |||
| <code>ant -v</code><br/><br/> | |||
| This will produce something which starts like the following:</p> | |||
| <source> | |||
| Ant version 1.4alpha compiled on August 6 2001 | |||
| Buildfile: build.xml | |||
| Detected Java version: 1.3 in: f:\jdk1.3\jre | |||
| Detected OS: Windows NT | |||
| parsing buildfile \jakarta-ant\build.xml with | |||
| URI = file:/jakarta-ant/build.xml | |||
| Project base dir set to: \jakarta-ant | |||
| [property] Loading \jakarta-ant\.ant.properties | |||
| [property] Unable to find property file: \jakarta-ant\.ant.properties | |||
| [property] Loading \conor\.ant.properties | |||
| [property] Override ignored for debug | |||
| prepare: | |||
| check_for_optional_packages: | |||
| ... | |||
| </source> | |||
| <p> | |||
| You may be able to see in this trace what ant is doing and why it takes 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 and analyze it in an editor. | |||
| </p> | |||
| <p>So, 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 will give you an idea of what is going on. For | |||
| example, the <javac> task logs the reasons why it chooses to compile particular | |||
| classes and the equivalent command it is using. The following trace (which has been edited | |||
| and reformatted for clarity) shows javac adding one class but skipping another. This is followed | |||
| by the compiler arguments and a summary of all the classes to be compiled. | |||
| </p> | |||
| <source> | |||
| [javac] org\apache\tools\ant\listener\Log4jListener.java added as | |||
| \build\classes\org\apache\tools\ant\listener\Log4jListener.class | |||
| is outdated. | |||
| [javac] org\apache\tools\ant\Location.java omitted as | |||
| \build\classes\org\apache\tools\ant\Location.class is up to date. | |||
| ... | |||
| [javac] Compiling 1 source file to \jakarta-ant\build\classes | |||
| [javac] Using modern compiler | |||
| [javac] Compilation args: -d \jakarta-ant\build\classes -classpath | |||
| \jakarta-ant\build\classes;F:\jdk1.3\lib\tools.jar; | |||
| \Ant\lib\optional.jar;\Ant\lib\log4j.jar; | |||
| \Ant\lib\junit.jar;\Ant\lib\jaxp.jar; | |||
| \Ant\lib\crimson.jar;\Ant\lib\ant.jar | |||
| -sourcepath \jakarta-ant\src\main -g:none -O | |||
| [javac] File to be compiled: | |||
| \src\main\org\apache\tools\ant\listener\Log4jListener.java | |||
| </source> | |||
| <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 <javac> task above does. If | |||
| you are having a problem, it is often useful to run the command directly in the same way Ant is doing | |||
| and see if the problem persists. The problem may lie in the command being run by Ant, or 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> | |||
| </subsection> | |||
| <subsection name="Has it been fixed?"> | |||
| <p> | |||
| After examining the debug output, you still believe that the problem you are having may be caused by Ant. | |||
| Chances are that someone else may have already encountered this problem and perhaps it has been | |||
| fixed. The next step, therefore, may be to try a nightly build of Ant to see if the | |||
| problem has been fixed. Nightly builds for Ant are available from the | |||
| <a href="/builds/jakarta-ant/nightly/">Jakarta web site</a>. While Ant nightly | |||
| builds are typically quite stable and are used by <a href="/builds/gump/latest/"> | |||
| Gump</a> to build many other Jakarta projects, these builds should be treated as experimental. You can | |||
| install and verify whether your problem has been fixed. Note that nightly builds do not build many of the | |||
| optional tasks the come with Ant. A snapshot of these optional tasks is occasionally uploaded to the nightly | |||
| download <a href="/builds/jakarta-ant/nightly/optional/">area</a>. Note that even | |||
| this snapshot does not contain every optional task. | |||
| </p> | |||
| </subsection> | |||
| <subsection name="Has it been reported?"> | |||
| <p> | |||
| If the current nightly build doesn't resolve your problem, it is possible that someone else has reported | |||
| the issue. It is time to look at the <a href="http://nagoya.apache.org/bugzilla/">Apache Bug Database</a>. | |||
| This system is easy to use and it will let you search the currently open and resolved bugs to see if your | |||
| problem has already been reported. If it has, you can see whether any of the developers have commented, | |||
| suggesting workarounds or the reason for the bug, etc. You may have more information to add (see about | |||
| creating bug reports below), in which case, go right ahead and add it. If you can't add more information | |||
| you may just want to vote for this bug, and perhaps add yourself to the CC list to follow the progress of | |||
| this bug. | |||
| </p> | |||
| </subsection> | |||
| <subsection name="Filing a Bug report"> | |||
| <p>By this time you may have decided that there is a bug in Ant. You have a few choices at this | |||
| point. You can send an email to the ant-user mailing list to see if others have encountered your issue | |||
| and how they may have worked around it. If after some discussion, you still feel you have a bug, it | |||
| is time to create a bug report. This is a simple operation in the Bug Database. Please try to provide | |||
| as much information as possible to assist the developers in resolving the bug. Please try to enter correct | |||
| values for the various inputs when creating the bug. Once the bug is created you can add attachments to | |||
| the bug report. | |||
| </p> | |||
| <p>What information should you include in your bug report? The easiest bugs to fix are those which are most | |||
| easily reproducible, so if you can, it is really helpful to produce a small test case that exhibits the | |||
| problem. In this case, you would attach the build file and other files necessary to reproduce the problem | |||
| probably packed together in an archive. If you can't produce a test case, you should try to include a | |||
| snippet from your build file and the relevant sections from the debug out from Ant. Try to include the | |||
| header information where Ant states the version, the OS and VM information etc. As the debug output is | |||
| likely to be very large, you should try to remove the output which is not relevant. Once the bug is | |||
| entered into the Bug Database, you will be kept informed about progress on the bug. If you receive email | |||
| asking for further information, please try to respond as it will aid in the resolution of your bug. | |||
| </p> | |||
| </subsection> | |||
| <subsection name="Fixing the Bug"> | |||
| <p>If you aren't satisfied just filing a bug report, you can try to find and fix the problem yourself. The | |||
| best way to do that is by working against the latest code from CVS. Alternatively, you can work with the | |||
| source code from the source distributions available on the Jakarta website. If you are going to tackle the | |||
| issues at this level, you may want to discuss details on the ant-dev mailing list. Once you have a fix | |||
| for the problem, you may either submit the patch to the ant-dev mailing list or enter into the Bug | |||
| Database as described above, attaching the patch. Using the Bug database has the advantage of tracking | |||
| the progress of your bug. | |||
| </p> | |||
| </subsection> | |||
| </section> | |||
| </body> | |||
| </document> | |||
| @@ -0,0 +1,257 @@ | |||
| <?xml version="1.0"?> | |||
| <document> | |||
| <properties> | |||
| <author email="bodewig@apache.org">Stefan Bodewig</author> | |||
| <title>Resources</title> | |||
| </properties> | |||
| <body> | |||
| <section name="Articles and Presentations"> | |||
| <p>This page lists articles and presentations written about Ant. If | |||
| you've written something that should be included, please post it to one | |||
| of the mailing lists.</p> | |||
| </section> | |||
| <section name="Articles"> | |||
| <subsection name="Ant in Anger: Using Ant in a Production Development | |||
| System"> | |||
| <p>This document describes strategies and some basic examples of how to | |||
| use Ant in larger team development projects.</p> | |||
| <table> | |||
| <tr> | |||
| <th>Author:</th> | |||
| <td><a href="mailto:steve_l@iseran.com">Steve Loughran</a></td> | |||
| </tr> | |||
| <tr> | |||
| <th>URL:</th> | |||
| <td><a href="http://cvs.apache.org/viewcvs/~checkout~/jakarta-ant/docs/ant_in_anger.html?content-type=text/html">http://cvs.apache.org/viewcvs/~checkout~/jakarta-ant/docs/ant_in_anger.html?content-type=text/html</a></td> | |||
| </tr> | |||
| </table> | |||
| </subsection> | |||
| <subsection name="Ant Task Guidelines"> | |||
| <p>This document describes how to write custom Ant tasks, and how to submit | |||
| them to potentially be included in Ant.</p> | |||
| <table> | |||
| <tr> | |||
| <th>Author:</th> | |||
| <td><a href="mailto:steve_l@iseran.com">Steve Loughran</a></td> | |||
| </tr> | |||
| <tr> | |||
| <th>URL:</th> | |||
| <td><a href="http://cvs.apache.org/viewcvs/~checkout~/jakarta-ant/docs/ant_task_guidelines.html?content-type=text/html">http://cvs.apache.org/viewcvs/~checkout~/jakarta-ant/docs/ant_task_guidelines.html?content-type=text/html</a></td> | |||
| </tr> | |||
| </table> | |||
| </subsection> | |||
| <subsection name="Incremental development with Ant and JUnit"> | |||
| <p>This article explores the benefits of unit testing with Ant and | |||
| JUnit, detailing how to develop automated unit tests and integrate them | |||
| into your build process.</p> | |||
| <table> | |||
| <tr> | |||
| <th>Author:</th> | |||
| <td><a href="mailto:malcolm@nuearth.com">Malcolm Davis</a></td> | |||
| </tr> | |||
| <tr> | |||
| <th>URL:</th> | |||
| <td><a href="http://www-106.ibm.com/developerworks/library/j-ant/?dwzone=java">http://www-106.ibm.com/developerworks/library/j-ant/?dwzone=java</a></td> | |||
| </tr> | |||
| </table> | |||
| </subsection> | |||
| <subsection name="Automate your build process using Java and Ant"> | |||
| <p>This article provides an introduction to using Ant with some basic | |||
| examples and by highlighting some of the important tasks.</p> | |||
| <table> | |||
| <tr> | |||
| <th>Author:</th> | |||
| <td><a href="mailto:michael.cymerman@javaworld.com">Michael Cymerman</a></td> | |||
| </tr> | |||
| <tr> | |||
| <th>URL:</th> | |||
| <td><a href="http://www.javaworld.com/javaworld/jw-10-2000/jw-1020-ant.html">http://www.javaworld.com/javaworld/jw-10-2000/jw-1020-ant.html</a></td> | |||
| </tr> | |||
| </table> | |||
| </subsection> | |||
| <subsection name="Short tutorial in Cactus' (formerly J2EEUnit) | |||
| documentation"> | |||
| <p>There is a short tutorial on how to use Ant in Cactus' | |||
| documentation. It has a slant towards build files that will be used | |||
| with Cactus.</p> | |||
| <table> | |||
| <tr> | |||
| <th>Author:</th> | |||
| <td>Cactus development team</td> | |||
| </tr> | |||
| <tr> | |||
| <th>URL:</th> | |||
| <td><a href="http://jakarta.apache.org/commons/cactus/ant.html">http://jakarta.apache.org/commons/cactus/ant.html</a></td> | |||
| </tr> | |||
| </table> | |||
| </subsection> | |||
| <subsection name="Developing custom Ant tasks with VisualAge for Java"> | |||
| <p>This article outlines how to integrate Ant into VisualAge for Java, | |||
| and how to write and debug custom tasks using the IDE and the | |||
| integrated debugger.</p> | |||
| <table> | |||
| <tr> | |||
| <th>Author:</th> | |||
| <td><a href="mailto:glenn@somanetworks.com">Glenn McAllister</a></td> | |||
| </tr> | |||
| <tr> | |||
| <th>URL:</th> | |||
| <td><a href="http://www7.software.ibm.com/vad.nsf/data/document2366?OpenDocument&p=1&BCT=1&Footer=1">http://www7.software.ibm.com/vad.nsf/data/document2366?OpenDocument&p=1&BCT=1&Footer=1</a></td> | |||
| </tr> | |||
| </table> | |||
| </subsection> | |||
| <subsection name="Automated builds with VisualAge for Java and Ant"> | |||
| <p>This article shows how you can perform command line builds with a | |||
| VisualAge for Java repository.</p> | |||
| <table> | |||
| <tr> | |||
| <th>Author:</th> | |||
| <td><a href="mailto:glenn@somanetworks.com">Glenn McAllister</a></td> | |||
| </tr> | |||
| <tr> | |||
| <th>URL:</th> | |||
| <td><a href="http://www7.software.ibm.com/vad.nsf/Data/Document4366?OpenDocument&p=1&BCT=3&Footer=1">http://www7.software.ibm.com/vad.nsf/Data/Document4366?OpenDocument&p=1&BCT=3&Footer=1</a></td> | |||
| </tr> | |||
| </table> | |||
| </subsection> | |||
| <subsection name="Ant: A Build Tool from the Jakarta Project"> | |||
| <p>This article is from the "Best Practices" section of | |||
| Sun's Dot-Com Builder Site.</p> | |||
| <table> | |||
| <tr> | |||
| <th>Author:</th> | |||
| <td>Laura Geele Wang</td> | |||
| </tr> | |||
| <tr> | |||
| <th>URL:</th> | |||
| <td><a href="http://dcb.sun.com/practices/profiles/ant.jsp">http://dcb.sun.com/practices/profiles/ant.jsp</a></td> | |||
| </tr> | |||
| </table> | |||
| </subsection> | |||
| <subsection name="Making a Mountain Out of an Anthill"> | |||
| <p>This article is from the June 2001 issue of the Java Developer' | |||
| Journal. You need to be a registered JDJ subscriber to view this | |||
| article.</p> | |||
| <table> | |||
| <tr> | |||
| <th>Author:</th> | |||
| <td>Neal Ford</td> | |||
| </tr> | |||
| <tr> | |||
| <th>URL:</th> | |||
| <td><a href="http://www.sys-con.com/java/archivesa.cfm?volume=06&issue=06">http://www.sys-con.com/java/archivesa.cfm?volume=06&issue=06</a></td> | |||
| </tr> | |||
| </table> | |||
| </subsection> | |||
| <subsection name="Using Ant and Weblogic EJBs"> | |||
| <p>This article describes how to use Ant to create Weblogic EJBs, and | |||
| some workarounds for issues you may encounter.</p> | |||
| <table> | |||
| <tr> | |||
| <th>Author:</th> | |||
| <td>Jesse E. Tilly</td> | |||
| </tr> | |||
| <tr> | |||
| <th>URL:</th> | |||
| <td><a href="http://www.onjava.com/pub/a/onjava/2001/06/25/antejb.html">http://www.onjava.com/pub/a/onjava/2001/06/25/antejb.html</a></td> | |||
| </tr> | |||
| </table> | |||
| </subsection> | |||
| <subsection name="An Introduction to Ant"> | |||
| <p>This article is a short introduction into the basic | |||
| concepts of Ant.</p> | |||
| <table> | |||
| <tr> | |||
| <th>Author:</th> | |||
| <td>Jayakrishnan Nair</td> | |||
| </tr> | |||
| <tr> | |||
| <th>URL:</th> | |||
| <td><a href="http://varnam.org/articles/ant.html">http://varnam.org/articles/ant.html</a></td> | |||
| </tr> | |||
| </table> | |||
| </subsection> | |||
| </section> | |||
| <section name="Presentations"> | |||
| <subsection name="Ant Build Tool"> | |||
| <p>A PowerPoint presentation on Ant 1.2. It provides a basic overview | |||
| of Ant's capabilities.</p> | |||
| <table> | |||
| <tr> | |||
| <th>Author:</th> | |||
| <td><a href="mailto:chanezon@netscape.com">Patrick Chanezon</a></td> | |||
| </tr> | |||
| <tr> | |||
| <th>URL:</th> | |||
| <td><a href="http://people.netscape.com/chanezon/tech/ant/ant_preso.ppt">http://people.netscape.com/chanezon/tech/ant/ant_preso.ppt</a></td> | |||
| </tr> | |||
| </table> | |||
| </subsection> | |||
| <subsection name="Ant"> | |||
| <p>A detailed Ant 1.3 PowerPoint presentation, made at the St. Louis Java Users Group | |||
| meeting in March 2001. Includes a detailed build file and basic | |||
| descriptions of all the built in and optional tasks.</p> | |||
| <table> | |||
| <tr> | |||
| <th>Author:</th> | |||
| <td>Mark Volkmann</td> | |||
| </tr> | |||
| <tr> | |||
| <th>URL:</th> | |||
| <td><a href="http://www.ociweb.com/javasig/knowledgebase/March2001/index.html">http://www.ociweb.com/javasig/knowledgebase/March2001/index.html</a></td> | |||
| </tr> | |||
| </table> | |||
| </subsection> | |||
| <subsection name="Modern Development Crises"> | |||
| <p>This presentation is an overview of the current state of software | |||
| development today. There are a couple of slides that briefly cover | |||
| Ant.</p> | |||
| <table> | |||
| <tr> | |||
| <th>Author:</th> | |||
| <td><a href="mailto:steve_l@iseran.com">Steve Loughran</a></td> | |||
| </tr> | |||
| <tr> | |||
| <th>URL:</th> | |||
| <td><a href="http://www.iseran.com/Steve/modern_development_processes.html">http://www.iseran.com/Steve/modern_development_processes.html</a></td> | |||
| </tr> | |||
| </table> | |||
| </subsection> | |||
| </section> | |||
| </body> | |||
| </document> | |||
| @@ -0,0 +1,118 @@ | |||
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> | |||
| <!-- Content Stylesheet for Site --> | |||
| ## Defined variables | |||
| #set ($bodybg = "#ffffff") | |||
| #set ($bodyfg = "#000000") | |||
| #set ($bodylink = "#525D76") | |||
| #set ($bannerbg = "#525D76") | |||
| #set ($bannerfg = "#ffffff") | |||
| #set ($subbannerbg = "#828DA6") | |||
| #set ($subbannerfg = "#ffffff") | |||
| #set ($tablethbg = "#039acc") | |||
| #set ($tabletdbg = "#a0ddf0") | |||
| #set ($pound = "#" ) | |||
| <!-- start the processing --> | |||
| #faqs() | |||
| <!-- end the processing --> | |||
| ## This is where the FAQ specific macro's live | |||
| #macro (toc $section) | |||
| <table border="0" cellspacing="0" cellpadding="2" width="100%"> | |||
| <tr><td bgcolor="$subbannerbg"> | |||
| <font color="$subbannerfg" face="arial,helvetica,sanserif"> | |||
| <strong>$section.getAttributeValue("title")</strong> | |||
| </font> | |||
| </td></tr> | |||
| <tr><td> | |||
| <blockquote> | |||
| <ul> | |||
| #foreach ($faq in $section.getChildren("faq") ) | |||
| #subtoc ($faq) | |||
| #end | |||
| </ul> | |||
| </blockquote> | |||
| </td></tr> | |||
| </table> | |||
| #end | |||
| #macro (subtoc $faq) | |||
| #set ($id = $faq.getAttributeValue("id")) | |||
| <li><a href="$pound$id"> | |||
| $xmlout.outputString($faq.getChild("question"), true) | |||
| </a></li> | |||
| #end | |||
| #macro (answers $section) | |||
| #foreach ($faq in $section.getChildren("faq") ) | |||
| #faq ($faq) | |||
| #end | |||
| #end | |||
| #macro (faq $faq) | |||
| #set ($id = $faq.getAttributeValue("id")) | |||
| <a name="$id"> | |||
| <table border="0" cellspacing="0" cellpadding="2" width="100%"> | |||
| <tr><td bgcolor="$subbannerbg"> | |||
| <font color="$subbannerfg" face="arial,helvetica,sanserif"> | |||
| <strong> | |||
| $xmlout.outputString($faq.getChild("question"), true) | |||
| </strong> | |||
| </font> | |||
| </td></tr> | |||
| <tr><td> | |||
| <blockquote> | |||
| #foreach ($item in $faq.getChild("answer").getChildren()) | |||
| #if ($item.getName().equals("img")) | |||
| #image ($item) | |||
| #elseif ($item.getName().equals("source")) | |||
| #source ($item) | |||
| #elseif ($item.getName().equals("table")) | |||
| #table ($item) | |||
| #else | |||
| $xmlout.outputString($item) | |||
| #end | |||
| #end | |||
| </blockquote> | |||
| </td></tr> | |||
| </table> | |||
| </a> | |||
| #end | |||
| #macro (faqs) | |||
| #header() | |||
| <table border="0" cellspacing="0" cellpadding="2" width="100%"> | |||
| <tr><td bgcolor="$bannerbg"> | |||
| <font color="$bannerfg" face="arial,helvetica,sanserif"> | |||
| <strong>Questions</strong> | |||
| </font> | |||
| </td></tr> | |||
| <tr><td> | |||
| <blockquote> | |||
| #set ($allFaqSections = $root.getChildren("faqsection")) | |||
| #foreach ( $faqSection in $allFaqSections ) | |||
| #toc ($faqSection) | |||
| #end | |||
| </blockquote> | |||
| </td></tr> | |||
| </table> | |||
| <table border="0" cellspacing="0" cellpadding="2" width="100%"> | |||
| <tr><td bgcolor="$bannerbg"> | |||
| <font color="$bannerfg" face="arial,helvetica,sanserif"> | |||
| <strong>Answers</strong> | |||
| </font> | |||
| </td></tr> | |||
| <tr><td> | |||
| <blockquote> | |||
| #foreach ( $faqSection in $allFaqSections ) | |||
| #answers ($faqSection) | |||
| #end | |||
| </blockquote> | |||
| </td></tr> | |||
| </table> | |||
| #footer() | |||
| #end | |||
| @@ -0,0 +1,50 @@ | |||
| <?xml version="1.0" encoding="ISO-8859-1"?> | |||
| <project name="Jakarta Site" | |||
| href="http://jakarta.apache.org/"> | |||
| <title>The Jakarta Site</title> | |||
| <!-- uncomment and put your project logo here! | |||
| <logo href="http://jakarta.apache.org/images/jakarta-logo.gif">The Jakarta Project</logo> | |||
| --> | |||
| <body> | |||
| <menu name="Ant"> | |||
| <item name="Front Page" | |||
| href="/index.html"/> | |||
| <item name="News" | |||
| href="/antnews.html"/> | |||
| <item name="Documentation" | |||
| href="/manual/"/> | |||
| <item name="External Tools and Tasks" | |||
| href="/external.html"/> | |||
| <item name="Resources" | |||
| href="/resources.html"/> | |||
| <item name="Ant FAQ" | |||
| href="/faq.html"/> | |||
| <item name="Having Problems?" | |||
| href="/problems.html"/> | |||
| </menu> | |||
| <menu name="Download"> | |||
| <item name="Binaries" href="/site/binindex.html"/> | |||
| <item name="Source Code" href="/site/sourceindex.html"/> | |||
| </menu> | |||
| <menu name="Jakarta"> | |||
| <item name="News & Status" href="/site/news.html"/> | |||
| <item name="Mission" href="/site/mission.html"/> | |||
| <item name="Guidelines Notes" href="/site/guidelines.html"/> | |||
| <item name="FAQs" href="/site/faqs.html"/> | |||
| </menu> | |||
| <menu name="Get Involved"> | |||
| <item name="Overview" href="/site/getinvolved.html"/> | |||
| <item name="CVS Repositories" href="/site/cvsindex.html"/> | |||
| <item name="Mailing Lists" href="/site/mail.html"/> | |||
| <item name="Reference Library" href="/site/library.html"/> | |||
| <item name="Bug Database" href="http://nagoya.apache.org/bugzilla/enter_bug.cgi?product=Ant"/> | |||
| <item name="Enhancement Requests" href="http://nagoya.apache.org/bugzilla/enter_bug.cgi?product=Ant&bug_severity=Enhancement"/> | |||
| </menu> | |||
| </body> | |||
| </project> | |||
| @@ -0,0 +1,81 @@ | |||
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> | |||
| <!-- Content Stylesheet for Site --> | |||
| ## Defined variables | |||
| #set ($bodybg = "#ffffff") | |||
| #set ($bodyfg = "#000000") | |||
| #set ($bodylink = "#525D76") | |||
| #set ($bannerbg = "#525D76") | |||
| #set ($bannerfg = "#ffffff") | |||
| #set ($subbannerbg = "#828DA6") | |||
| #set ($subbannerfg = "#ffffff") | |||
| #set ($tablethbg = "#039acc") | |||
| #set ($tabletdbg = "#a0ddf0") | |||
| <!-- start the processing --> | |||
| #document() | |||
| <!-- end the processing --> | |||
| ## This is where the common page macro's live | |||
| #macro ( subsection $subsection) | |||
| <table border="0" cellspacing="0" cellpadding="2" width="100%"> | |||
| <tr><td bgcolor="$subbannerbg"> | |||
| <font color="$subbannerfg" face="arial,helvetica,sanserif"> | |||
| <a name="$subsection.getAttributeValue("name")"><strong>$subsection.getAttributeValue("name")</strong></a> | |||
| </font> | |||
| </td></tr> | |||
| <tr><td> | |||
| <blockquote> | |||
| #foreach ( $items in $subsection.getChildren() ) | |||
| #if ($items.getName().equals("img")) | |||
| #image ($items) | |||
| #elseif ($items.getName().equals("source")) | |||
| #source ($items) | |||
| #elseif ($items.getName().equals("table")) | |||
| #table ($items) | |||
| #else | |||
| $xmlout.outputString($items) | |||
| #end | |||
| #end | |||
| </blockquote> | |||
| </td></tr> | |||
| </table> | |||
| #end | |||
| #macro ( section $section) | |||
| <table border="0" cellspacing="0" cellpadding="2" width="100%"> | |||
| <tr><td bgcolor="$bannerbg"> | |||
| <font color="$bannerfg" face="arial,helvetica,sanserif"> | |||
| <a name="$section.getAttributeValue("name")"><strong>$section.getAttributeValue("name")</strong></a> | |||
| </font> | |||
| </td></tr> | |||
| <tr><td> | |||
| <blockquote> | |||
| #foreach ( $items in $section.getChildren() ) | |||
| #if ($items.getName().equals("img")) | |||
| #image ($items) | |||
| #elseif ($items.getName().equals("source")) | |||
| #source ($items) | |||
| #elseif ($items.getName().equals("table")) | |||
| #table ($items) | |||
| #elseif ($items.getName().equals("subsection")) | |||
| #subsection ($items) | |||
| #else | |||
| $xmlout.outputString($items) | |||
| #end | |||
| #end | |||
| </blockquote> | |||
| </td></tr> | |||
| </table> | |||
| #end | |||
| #macro (document) | |||
| #header() | |||
| #set ($allSections = $root.getChild("body").getChildren("section")) | |||
| #foreach ( $section in $allSections ) | |||
| #section ($section) | |||
| #end | |||
| #footer() | |||
| #end | |||
| @@ -0,0 +1,196 @@ | |||
| ## This is where the common macro's live | |||
| #macro ( table $table) | |||
| <table> | |||
| #foreach ( $items in $table.getChildren() ) | |||
| #if ($items.getName().equals("tr")) | |||
| #tr ($items) | |||
| #end | |||
| #end | |||
| </table> | |||
| #end | |||
| #macro ( tr $tr) | |||
| <tr> | |||
| #foreach ( $items in $tr.getChildren() ) | |||
| #if ($items.getName().equals("td")) | |||
| #td ($items) | |||
| #elseif ($items.getName().equals("th")) | |||
| #th ($items) | |||
| #end | |||
| #end | |||
| </tr> | |||
| #end | |||
| #macro ( td $value) | |||
| #if ($value.getAttributeValue("colspan")) | |||
| #set ($colspan = $value.getAttributeValue("colspan")) | |||
| #end | |||
| #if ($value.getAttributeValue("rowspan")) | |||
| #set ($rowspan = $value.getAttributeValue("rowspan")) | |||
| #end | |||
| <td bgcolor="$tabletdbg" colspan="$!colspan" rowspan="$!rowspan" | |||
| valign="top" align="left"> | |||
| <font color="#000000" size="-1" face="arial,helvetica,sanserif"> | |||
| #if ($value.getText().length() != 0 || $value.hasChildren()) | |||
| $xmlout.outputString($value, true) | |||
| #else | |||
| | |||
| #end | |||
| </font> | |||
| </td> | |||
| #end | |||
| #macro ( th $value) | |||
| #if ($value.getAttributeValue("colspan")) | |||
| #set ($colspan = $value.getAttributeValue("colspan")) | |||
| #end | |||
| #if ($value.getAttributeValue("rowspan")) | |||
| #set ($rowspan = $value.getAttributeValue("rowspan")) | |||
| #end | |||
| <td bgcolor="$tablethbg" colspan="$!colspan" rowspan="$!rowspan" | |||
| valign="top" align="left"> | |||
| <font color="#000000" size="-1" face="arial,helvetica,sanserif"> | |||
| #if ($value.getText().length() != 0 || $value.hasChildren()) | |||
| $xmlout.outputString($value, true) | |||
| #else | |||
| | |||
| #end | |||
| </font> | |||
| </td> | |||
| #end | |||
| #macro ( projectanchor $name $value ) | |||
| #if ($value.startsWith("http://")) | |||
| <a href="$value">$name</a> | |||
| #elseif ($value.startsWith("/site")) | |||
| <a href="http://jakarta.apache.org$value">$name</a> | |||
| #else | |||
| <a href="$relativePath$value">$name</a> | |||
| #end | |||
| #end | |||
| #macro ( metaauthor $author $email ) | |||
| <meta name="author" value="$author"> | |||
| <meta name="email" value="$email"> | |||
| #end | |||
| #macro ( image $value ) | |||
| #if ($value.getAttributeValue("width")) | |||
| #set ($width=$value.getAttributeValue("width")) | |||
| #end | |||
| #if ($value.getAttributeValue("height")) | |||
| #set ($height=$value.getAttributeValue("height")) | |||
| #end | |||
| #if ($value.getAttributeValue("align")) | |||
| #set ($align=$value.getAttributeValue("align")) | |||
| #end | |||
| <img src="$relativePath$value.getAttributeValue("src")" | |||
| width="$!width" height="$!height" align="$!align"> | |||
| #end | |||
| #macro ( source $value) | |||
| <div align="left"> | |||
| <table cellspacing="4" cellpadding="0" border="0"> | |||
| <tr> | |||
| <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> | |||
| <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> | |||
| <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> | |||
| </tr> | |||
| <tr> | |||
| <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> | |||
| <td bgcolor="#ffffff"><pre>$escape.getText($value.getText())</pre></td> | |||
| <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> | |||
| </tr> | |||
| <tr> | |||
| <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> | |||
| <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> | |||
| <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td> | |||
| </tr> | |||
| </table> | |||
| </div> | |||
| #end | |||
| #macro ( makeProject ) | |||
| #set ($menus = $project.getChild("body").getChildren("menu")) | |||
| #foreach ( $menu in $menus ) | |||
| <p><strong>$menu.getAttributeValue("name")</strong></p> | |||
| <ul> | |||
| #foreach ( $item in $menu.getChildren() ) | |||
| #set ($name = $item.getAttributeValue("name")) | |||
| <li>#projectanchor($name $item.getAttributeValue("href"))</li> | |||
| #end | |||
| </ul> | |||
| #end | |||
| #end | |||
| #macro (getProjectImage) | |||
| #if ($project.getChild("logo")) | |||
| <td align="left"> | |||
| <a href="http://jakarta.apache.org"><img src="http://jakarta.apache.org/images/jakarta-logo.gif" border="0"/></a> | |||
| </td> | |||
| <td align="right"> | |||
| #set ( $logoString = $project.getChild("logo").getAttributeValue("href") ) | |||
| #if ( $logoString.startsWith("/") ) | |||
| <a href="$project.getAttributeValue("href")"><img src="$relativePath$logoString" alt="$project.getChild("logo").getText()" border="0"/></a> | |||
| #else | |||
| <a href="$project.getAttributeValue("href")"><img src="$relativePath/$logoString" alt="$project.getChild("logo").getText()" border="0"/></a> | |||
| #end | |||
| </td> | |||
| #else | |||
| <td colspan="2"> | |||
| <a href="http://jakarta.apache.org"><img src="http://jakarta.apache.org/images/jakarta-logo.gif" align="left" border="0"/></a> | |||
| </td> | |||
| #end | |||
| #end | |||
| #macro (header) | |||
| <html> | |||
| <head> | |||
| <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> | |||
| #set ($authors = $root.getChild("properties").getChildren("author")) | |||
| #foreach ( $au in $authors ) | |||
| #metaauthor ( $au.getText() $au.getAttributeValue("email") ) | |||
| #end | |||
| <title>$project.getChild("title").getText() - $root.getChild("properties").getChild("title").getText()</title> | |||
| </head> | |||
| <body bgcolor="$bodybg" text="$bodyfg" link="$bodylink"> | |||
| <table border="0" width="100%" cellspacing="0"> | |||
| <!-- TOP IMAGE --> | |||
| <tr> | |||
| #getProjectImage() | |||
| </tr> | |||
| </table> | |||
| <table border="0" width="100%" cellspacing="4"> | |||
| <tr><td colspan="2"> | |||
| <hr noshade="" size="1"/> | |||
| </td></tr> | |||
| <tr> | |||
| <!-- LEFT SIDE NAVIGATION --> | |||
| <td valign="top" nowrap="true"> | |||
| #makeProject() | |||
| </td> | |||
| <td align="left" valign="top"> | |||
| #end | |||
| #macro (footer) | |||
| </td> | |||
| </tr> | |||
| <!-- FOOTER --> | |||
| <tr><td colspan="2"> | |||
| <hr noshade="" size="1"/> | |||
| </td></tr> | |||
| <tr><td colspan="2"> | |||
| <div align="center"><font color="$bodylink" size="-1"><em> | |||
| Copyright © 1999-2001, Apache Software Foundation | |||
| </em></font></div> | |||
| </td></tr> | |||
| </table> | |||
| </body> | |||
| </html> | |||
| #end | |||
| @@ -0,0 +1,2 @@ | |||
| file.resource.loader.path=xdocs/stylesheets | |||
| velocimacro.library=templates.vm | |||