diff --git a/Article-PDE-Automation/article.html b/Article-PDE-Automation/article.html
new file mode 100644
index 0000000..d33242e
--- /dev/null
+++ b/Article-PDE-Automation/article.html
@@ -0,0 +1,1568 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html>
+  <head>
+    <meta name="generator" content="HTML Tidy, see www.w3.org">
+    <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+
+    <title>Build and Test Automation for plug-ins and features</title>
+    <link type="text/css" rel="stylesheet" href="../default_style.css">
+    <link type="text/css" rel="stylesheet" href="automation_style.css">
+  </head>
+
+  <body link="#0000ff" vlink="#800080">
+    <div align="right">
+      &nbsp; <font face="Times New Roman, Times, serif" size="2">Copyright
+      &copy; 2005 Markus Barchfeld</font> 
+
+      <table border="0" cellpadding="2" cellspacing="0" width="100%">
+        <tbody>
+          <tr>
+            <td colspan="2" align="left" bgcolor="#0080c0" valign="top">
+            <b><font face="Arial,Helvetica"><font color="#ffffff">&nbsp;Eclipse
+            Corner Article</font></font></b></td>
+          </tr>
+        </tbody>
+      </table>
+    </div>
+
+    <div align="left">
+      <h1><img src="../images/Idea.jpg" align="middle" height="86" width=
+      "120"></h1>
+    </div>
+
+    <p>&nbsp;</p>
+
+    <h1 align="center">Build and Test Automation for plug-ins and features</h1>
+
+    <blockquote>
+      <p><b>Summary</b><br>
+       Eclipse offers the possibility to build plug-ins automatically outside
+      the Eclipse IDE, which is called "headless build". Eclipse itself is
+      built headless and since Eclipse is an assembly of plug-ins, this feature
+      is also available for any other plug-in. Although the set up of automatic
+      building and testing requires only a couple of files, it can be tedious
+      work to do nonetheless. This article shares the experiences and lessons
+      learned while setting up automatic building and testing for an
+      Open-Source Eclipse plug-in called RDT, Ruby Development Tools.</p>
+
+      <p><b>By Markus Barchfeld, Zuehlke Engineering</b><br>
+       <font size="-1">May 29, 2005</font></p>
+    </blockquote>
+    <hr width="100%">
+
+    <h3>Environment</h3>
+
+    <p>All the techniques, examples and screen shots covered in this article
+    refer to Eclipse 3.0. If you want to follow the examples, you will need an
+    Eclipse 3.0.x installation. They might work with Eclipse 3.1 as well, but
+    it is untested.</p>
+
+    <p>The first part of this article gives an overview of the building steps
+    and artifacts of the headless build and introduces the required files to
+    build RDT as example. The second part shows how the Eclipse Test Framework
+    can be leveraged to extend the automatic build by running a suite of test
+    cases on the built plug-ins.</p>
+
+    <h2>Part 1 - Automated Build</h2>
+
+    <h3>Build a feature using PDE GUI Tools</h3>
+
+    <p>Starting the development of a plug-in is quite easy with the PDE
+    environment. There are tutorials and examples available which create sample
+    plug-in projects in the workspace. Compilation is done automatically from
+    the IDE and running the project can be easily achieved with starting a
+    runtime workbench, thanks to the self hosting feature of Eclipse.</p>
+
+    <p>For deployment you need to create a zip file which contains at least the
+    plugin.xml and a jar file with the classes of the plug-in. The inclusion of
+    further files (e.g. html files, images) can be controlled with the
+    build.properties file, the PDE (Plug-in Development Environment) provides
+    the "Build Properties Editor" for convenient editing of the file. <a href=
+    "#pdeHelpBuildProperties">[1]</a> explains the content of build.properties.
+    Fig. 1 shows the menu entry for the creation of an Ant build file. The
+    build file will be called build.xml and be located in the same directory as
+    the plugin.xml. The build file creation can be controlled with
+    build.properties. Some of the properties are described in <a href=
+    "#pdeHelpGenAnt">[2]</a>, see also Fig. 5. If you have the need to
+    customize the build process beyond the possibilities of build.properties, a
+    custom build file can be provided. Of course, the custom build file must
+    provide the same "interface" as the generated build file has, i.e. there
+    are some mandatory targets, which are explained in <a href=
+    "#usingPDEBuild">[12]</a>.</p>
+
+    <div class="figure">
+      <img style="width: 441px; height: 113px;" alt="Create Ant Build File"
+      src="createAntBuildFile.png"> 
+
+      <div class="figure-caption">
+        <span class="figure-number">Fig 1</span>. Create Ant Build file<br>
+      </div>
+    </div>
+    <br>
+     <br>
+     
+
+    <p>The simplest method of deployment is to choose a zip file as the
+    deliverable and then to unzip the build output into the plugins directory
+    of your target Eclipse installation. More sophisticated deployment options
+    are update sites and product extensions. If the project grows then you may
+    to split it up into several plug-in projects, at least plug-in projects
+    which contain GUI components and Core plug-in projects which do not contain
+    GUI components. They can still be built and deployed separately, but having
+    an Eclipse feature provides additional advantages and so you probably want
+    to wrap up the plug-ins with a feature project.</p>
+
+    <p>Fig. 2 shows the Feature Manifest Editor. The Export... button opens the
+    Feature Export Dialog (Fig. 3) with which you can create the deliverable:
+    either a single zip file or the file structure for an update site. Behind
+    the scenes the feature build process just builds every contained plug-in as
+    described above and then collects the results. All the generated build
+    files are temporary and will be deleted after the build has finished. The
+    build file generation for every contained plug-in works in exactly the same
+    way as if called from the "Create Ant Build File" menu entry, which also
+    means that the build.properties file of every plug-in is considered in the
+    same way as if the plug-in would be built standalone.</p>
+
+    <p>Additionally there is a build.xml file created for the feature project.
+    Like the plug-ins build file, the build.xml for the feature can be created
+    with the PDE Tools-&gt;Create Ant Build File context menu on the
+    feature.xml file. Similar to the plug-ins, there is a build.properties file
+    for the feature which can be used to customize the build process. E.g: the
+    files you choose to include into a binary build are defined in the
+    bin.includes property in build.properties. Some of the properties of
+    build.properties can be conveniently set with the Feature Manifest Editor.
+    E.g the bin.includes property can be assembled on the "Build" tab with a
+    tree control and check boxes.</p>
+
+    <p>Although the Feature Export Dialog allows storing the build-action in a
+    single build script, it is not yet the solution for a fully automated build
+    process, because this script can not be run outside of an Eclipse
+    workbench. Its purpose is to save the settings chosen in the Feature Export
+    Dialog and conveniently rerun the same export function again by choosing
+    Run-&gt;Ant Build (<a href="#bugsHeadlessInvokation">[3]</a>). For building
+    outside of Eclipse, PDE provides some Ant tasks which are explained in <a
+    href="#pdeHelpGenCommandLine">[4]</a>. But In order to use them you don't
+    have to create Ant scripts from scratch. There is already an infrastructure
+    for headless builds, which can be leveraged.</p>
+
+    <div class="figure">
+      <img src="featureManifestEditor.png" height="421" width="518"> 
+
+      <div class="figure-caption">
+        <span class="figure-number">Fig 2</span>. Feature Manifest Editor
+      </div>
+    </div>
+
+    <p>&nbsp;</p>
+
+    <div class="figure">
+      <img src="exportFeaturesDialog.png" height="487" width="378"> 
+
+      <div class="figure-caption">
+        <span class="figure-number">Fig 3</span>. Export Features Dialog
+      </div>
+    </div>
+
+    <h3>Build headless</h3>
+
+    <p>There are many reasons for creating a batch build process such as
+    providing a nightly or continuous build. This requires a fully automatic
+    build which can even start with the retrieval of the sources from CVS.
+    Eclipse itself is built in that way and because "everything is a plug-in"
+    the mechanisms can also be applied for the build of arbitrary plug-ins.
+    However it is necessary to bundle your plug-ins into a feature project if
+    you want to use headless build. If there is no real need to deploy your
+    plug-in(s) using a feature, a feature project can also be used for the
+    build process only. In this case there will be no feature manifest added to
+    the deliverable.</p>
+
+    <p>The infrastructure is provided by the PDE and the RelEng (Release
+    Engineering) plug-ins. The org.eclipse.releng.basebuilder plug-in contains
+    a complete Eclipse installation for the build, but any Eclipse-SDK is
+    sufficient. The org.eclipse.releng.eclipsebuilder plug-in contains control
+    files for the build of parts like JDT, PDE, and all the other plug-ins
+    which are part of the Eclipse distribution.</p>
+
+    <p>Although the build.xml provided in org.eclipse.releng.eclipsebuilder
+    looks like a plain Ant build file, there are Ant-Tasks required which are
+    provided from the PDE. Therefore the script must be executed in an Eclipse
+    environment. Because it would not be suitable for batch processing to start
+    up the Eclipse workbench, there is a "headless" startup mode provided,
+    which means that Eclipse is started without loading GUI plug-ins. To start
+    up a headless Eclipse instance which then executes an Ant build file,
+    Eclipse must be started as AntRunner application. An example is given in
+    Fig. 10.</p>
+
+    <h4>Building sdk.examples headless</h4>
+
+    <p>As an example, let's build one of the Eclipse deliverables headless. The
+    feature sdk.examples is chosen, because it is quite small, the deliverable
+    is about 1.8 Mb (<a href="#eclipsExamples">[5])</a>. The headless build
+    takes about 10 minutes on my 1.6Ghz Win XP laptop, most of the time used
+    for fetching the sources via a 64k internet connection. In addition to an
+    Eclipse installation there are two prerequisites for the headless
+    build:</p>
+
+    <ul>
+      <li><a target="extra" href="http://www.cvshome.org/">CVS</a> client
+      version 1.10 or higher on system path.</li>
+
+      <li><a target="extra" href=
+      "http://www.info-zip.org/pub/infozip/">Info-Zip</a> zip and unzip
+      executables on system path.</li>
+    </ul>
+
+    <p>The first step is to get org.eclipse.releng.eclipsebuilder:</p>
+<pre>
+D:\build&gt;cvs -d :pserver:anonymous@dev.eclipse.org:/cvsroot/eclipse export -r R3_0_2 org.eclipse.releng.eclipsebuilder
+</pre>
+
+    <p>The readme.html in org.eclipse.releng.eclipsebuilder (<a href=
+    "#eclipsebuilderReadme">[6])</a> describes how to build a component. By
+    default, components are built with an Eclipse instance (build host) defined
+    in org.eclipse.releng.basebuilder. But because the basebuilder is rather
+    large, we can also use an existing Eclipse-3.0.2 installation as build
+    host. Because it is not assured that the Eclipse-3.0.2 host can compile the
+    current Eclipse components, we use the 3.0.2 version of eclipsebuilder in
+    this example. In order to fetch the 3.0.2 version of sdk.examples instead
+    of the HEAD version, we have to modify
+    org.eclipse.releng.eclipsebuilder/sdk.examples/build.properties and set the
+    property mapVersionTag appropriately:</p>
+<pre>
+mapVersionTag=R3_0_2
+</pre>
+
+    <p>Now the build can be started from the command line:</p>
+<pre>
+D:\build\org.eclipse.releng.eclipsebuilder&gt;set ECLIPSE_HOME=D:\eclipse\eclipse-3.0.2
+D:\build\org.eclipse.releng.eclipsebuilder&gt;java -cp %ECLIPSE_HOME%\startup.jar org.eclipse.core.launcher.Main
+ -application org.eclipse.ant.core.antRunner -buildfile build.xml 
+ -Dcomponent=sdk.examples -Dconfigs="*,*,*" -Dbaseos=win32 -Dbasews=win32 -Dbasearch=x86 -Djavacfailonerror=true
+ -Dpde.build.scripts=%ECLIPSE_HOME%/plugins/org.eclipse.pde.build_3.0.1/scripts -DbaseLocation=%ECLIPSE_HOME%
+</pre>
+
+    <p>The property "component" is used to define that the files in the
+    sdk.examples subdirectory are used in the headless build, which are
+    build.properties and customTargets.xml. The build takes place in
+    D:\build\org.eclipse.releng.eclipsebuilder\src by default. This can be
+    changed with the property buildDirectory. Either by adding
+    -DbuildDirectory=${basedir}/newDirectory to the command above or by
+    changing buildDirectory in
+    org.eclipse.releng.eclipsebuilder/sdk.examples/build.properties.</p>
+
+    <p>After the build has finished, the deliverable and compile logs can be
+    found in the build output directory, a subdirectory of the build directory.
+    The name of the output directory is defined by the buildLabel property. By
+    default it starts with "I-" and includes the time stamp of the build
+    time.</p>
+
+    <p>The baseLocation is used during the build to provide missing plug-ins,
+    i.e., plug-ins which are not part of the deliverable to build and have
+    therefore not been fetched from CVS. After the plug-ins have been fetched,
+    PDE reads in the plug-ins and creates a build time Eclipse host. If
+    baseLocation is given, the Eclipse installation at baseLocation is added to
+    the build time Eclipse host. In our case this is necessary, because
+    sdk.examples depends on the plug-ins in the Eclipse SDK and can therefore
+    not be built standalone. Note that the baseLocation is independent of the
+    build host and therefore the build host can be another version of Eclipse.
+    In the example we could use Eclipse 3.0.2 as build host and Eclipse 3.0 as
+    baseLocation. The baseLocation may not contain any of the plug-ins to be
+    built. If the baseLocation contained the sdk.examples, an error would
+    occur.</p>
+
+    <p>The next section looks behind the scenes of the headless build.</p>
+
+    <h3>Build Phases</h3>
+
+    <p>Fig. 4 shows the files which drive the build process. While build.xml
+    and genericTargets.xml are provided from the PDE feature, there are two
+    files to be provided by the plugin to be built: the customTargets.xml and
+    build.properties. Examples for these two files can be found in
+    org.eclipse.releng.eclipsebuilder\sdk.examples, if you did not download
+    org.eclipse.releng.eclipsebuilder in the last section, see <a href=
+    "#eclipsebuilderReadme">[7]</a>. The build.properties file allows
+    customizing various build parameters, for a reference see Fig. 5. Fig. 6
+    shows the interaction of three build files, build.xml, genericTargets.xml
+    and customTargets.xml, which accomplishes the build. The main phases of the
+    build process are declared in build.xml: PreBuild, Fetch, Generate,
+    Process, Assemble and PostBuild.</p>
+
+    <div class="figure">
+      <table class="contentTable" cellspacing="2">
+        <tbody>
+          <tr>
+            <th>File name</th>
+
+            <th>Location</th>
+
+            <th>Description</th>
+          </tr>
+
+          <tr>
+            <td><b>build.xml</b></td>
+
+            <td>org.eclipse.pde.build_&lt;version&gt;/scripts</td>
+
+            <td>This is the main build script and provides a skeleton for the
+            build process: from prebuild to postbuild targets</td>
+          </tr>
+
+          <tr>
+            <td><b>genericTargets.xml</b></td>
+
+            <td>org.eclipse.pde.build_&lt;version&gt;/scripts</td>
+
+            <td>Contains targets like fetchElement, generateScript,
+            processElement, assembleElement</td>
+          </tr>
+
+          <tr>
+            <td><b>customTargets.xml</b></td>
+
+            <td>value of property <i>builder</i></td>
+
+            <td>This build script resides in the location specified by the
+            property <i>builder</i>. It is included from the main build.xml
+            file and delegates to targets in genericTargets. The main
+            responsibilities are in defining the features to build and to fetch
+            the map files.</td>
+          </tr>
+
+          <tr>
+            <td><b>build.properties</b></td>
+
+            <td>value of property <i>builder</i></td>
+
+            <td>This build script resides in the location specified by the
+            property <i>builder</i>. It contains properties for fetching the
+            sources, building and compiling.</td>
+          </tr>
+        </tbody>
+      </table>
+
+      <div class="figure-caption">
+        <span class="figure-number">Fig 4</span>. Files for controlling the
+        build process
+      </div>
+    </div>
+    <br>
+     <br>
+     
+
+    <div class="figure">
+      <table class="contentTable" cellspacing="2">
+        <tbody>
+          <tr>
+            <th>Category</th>
+
+            <th>Name</th>
+
+            <th>Description</th>
+          </tr>
+
+          <tr>
+            <td rowspan="3">Build folder</td>
+
+            <td>buildDirectory</td>
+
+            <td>The relative path to a directory where the source for the build
+            will be exported, where scripts will be generated and where the end
+            products of the build will be located. On Windows systems, this
+            directory should be close to the drive root to avoid path length
+            limitations particularly at compile time.</td>
+          </tr>
+
+          <tr>
+            <td>baseLocation</td>
+
+            <td>A directory separate from ${buildDirectory} which contains
+            pre-built plug-ins against which to compile. ${baseLocation} must
+            not contain any features, plug-ins or fragments which are already
+            or will be located in ${buildDirectory}.</td>
+          </tr>
+
+          <tr>
+            <td>baseos,basews,basearch,basenl</td>
+
+            <td>The os, ws, arch and nl values of the pre-built Eclipse found
+            in ${baseLocation}.</td>
+          </tr>
+
+          <tr>
+            <td rowspan="7">Build target (what is being built)</td>
+
+            <td>configs</td>
+
+            <td>An ampersand separated list of configurations to build for an
+            element where a configuration is specified as
+            &lt;os&gt;,&lt;ws&gt;,&lt;arch&gt;.<br>
+             ie.configs="win32,win32,x86 &amp; linux, motif, x86 &amp; linux,
+            gtk, x86". Typically used to build a feature that is os, ws, arch
+            specific. A non-platform specific configuration is specified with
+            "*,*,*".</td>
+          </tr>
+
+          <tr>
+            <td>collectingFolder</td>
+
+            <td>The directory in which built features and plug-ins are
+            gathered. This is typically set to "eclipse".</td>
+          </tr>
+
+          <tr>
+            <td>archivePrefix</td>
+
+            <td>The top level directory in assembled distribution. This is
+            typically set to "eclipse".</td>
+          </tr>
+
+          <tr>
+            <td>buildType</td>
+
+            <td>A letter "I, N, S, R or M" used to identify builds as being one
+            of the following:<br>
+             <br>
+             I - Integration<br>
+             N - Nightly<br>
+             S - Stable<br>
+             R - Release<br>
+             M - Maintenance<br>
+             </td>
+          </tr>
+
+          <tr>
+            <td>buildId</td>
+
+            <td>The build name. Default set to "build" in template
+            build.properties.</td>
+          </tr>
+
+          <tr>
+            <td>buildLabel</td>
+
+            <td>Refers to the name of the directory which will contain the end
+            result of the build. Set to ${buildType}.${buildId} in template
+            build.properties. This directory will be created in the
+            ${buildDirectory}.</td>
+          </tr>
+
+          <tr>
+            <td>timestamp</td>
+
+            <td>A timestamp used to fill in value for buildid in about.mappings
+            files. Also used to name build output directory, i.e.
+            I-build-&lt;timestamp&gt;.</td>
+          </tr>
+
+          <tr>
+            <td rowspan="2">Repository</td>
+
+            <td>mapVersionTag</td>
+
+            <td>Sets the tag attribute in a call to the <a target="extra" href=
+            "http://ant.apache.org/manual/CoreTasks/cvs.html">Ant &lt;cvs&gt;
+            task</a> to check out the map file project.</td>
+          </tr>
+
+          <tr>
+            <td>fetchTag</td>
+
+            <td>Sets the tag or branch when exporting modules used in the
+            build. For example, setting fetchTag=HEAD will fetch the HEAD
+            stream of the source for all features, plug-ins and fragments
+            listed in the map files instead of fetching the tag specified in
+            the map entry for that element. For example this is being used in
+            the eclipse build process to produce the nightly build.</td>
+          </tr>
+
+          <tr>
+            <td rowspan="6">Java Compiler</td>
+
+            <td>bootclasspath</td>
+
+            <td>Sets the value for the attribute "bootclasspath" in calls to
+            the <a target="extra" href=
+            "http://ant.apache.org/manual/CoreTasks/javac.html">Ant
+            &lt;javac&gt; task</a> in a plug-in's build.xml.</td>
+          </tr>
+
+          <tr>
+            <td>javacDebugInfo</td>
+
+            <td>Sets the value for the attribute "debug" in calls to the <a
+            target="extra" href=
+            "http://ant.apache.org/manual/CoreTasks/javac.html">Ant
+            &lt;javac&gt; task</a> in a plug-in's build.xml. Determines if
+            debug info is included in the output jars. Set to on in template
+            build.properties.</td>
+          </tr>
+
+          <tr>
+            <td>javacFailOnError</td>
+
+            <td>Sets the value for the attribute "failonerror" in calls to the
+            <a target="extra" href=
+            "http://ant.apache.org/manual/CoreTasks/javac.html">Ant
+            &lt;javac&gt; task</a> in a plug-in's build.xml. Build will
+            continue even if there are compilation errors when this is set to
+            false.</td>
+          </tr>
+
+          <tr>
+            <td>javacSource</td>
+
+            <td>Sets the value for the attribute "source" in calls to the <a
+            target="extra" href=
+            "http://ant.apache.org/manual/CoreTasks/javac.html">Ant
+            &lt;javac&gt; task</a> in a plug-in's build.xml. Sets the value of
+            the -source command line switch for javac version 1.4. Used when
+            compiling the jars for the plug-ins. Default set to 1.3 in
+            generated build.xml for plug-ins and fragments.</td>
+          </tr>
+
+          <tr>
+            <td>javacTarget</td>
+
+            <td>Sets the value for the attribute "target" in calls to the <a
+            target="extra" href=
+            "http://ant.apache.org/manual/CoreTasks/javac.html">Ant
+            &lt;javac&gt; task</a> in a plug-in's build.xml. Sets the value of
+            the -target command line switch for javac. Used when compiling the
+            jars for the plug-ins. Default set to 1.1 in generated build.xml
+            for plug-ins and fragments.</td>
+          </tr>
+
+          <tr>
+            <td>javacVerbose</td>
+
+            <td>Sets the value for the attribute "verbose" in calls to the <a
+            target="extra" href=
+            "http://ant.apache.org/manual/CoreTasks/javac.html">Ant
+            &lt;javac&gt; task</a> in a plug-in's build.xml. Asks the compiler
+            for verbose output. Default set to true.</td>
+          </tr>
+
+          <tr>
+            <td>misc</td>
+
+            <td>zipargs</td>
+
+            <td>Arguments to send to the zip executable. Setting it to -y on
+            Linux preserves symbolic links.</td>
+          </tr>
+        </tbody>
+      </table>
+
+      <div class="figure-caption">
+        <span class="figure-number">Fig 5</span>. build.properties
+      </div>
+    </div>
+    <br>
+     <br>
+     
+
+    <div class="figure">
+      <img src="buildInteractionDiagram.png"> 
+
+      <div class="figure-caption">
+        <span class="figure-number">Fig 6</span>. Script interaction for the
+        build process<br>
+      </div>
+    </div>
+
+    <h4>PreBuild and Fetch phase</h4>
+
+    <p>Fig. 7 gives an overview of the main activities and the files created
+    from these activities for the complete build process. The getMapFiles and
+    concatenate activities are part of the PreBuild phase; fetch and getFromCVS
+    are part of the Fetch phase.</p>
+
+    <p>The most important task in the PreBuild phase is to retrieve map files,
+    which is implemented in the getMapFiles target in customTargets.xml.
+    Usually the getMapFiles target consists of a CVS command to fetch the map
+    files. A map file is a java property file which contains mappings of
+    elements to their CVS locations and access methods. It consists of one map
+    file entry for each feature being built, its &lt;plugin&gt; elements, and
+    its &lt;includes&gt; elements (i.e. nested features and their plug-ins).
+    Adding a plug-in or fragment to a feature therefore requires updating the
+    map files with the new element.</p>
+
+    <p>Map file entries use the following format:</p>
+<pre>
+feature|fragment|plugin@elementId=&lt;cvs tag&gt;,&lt;access method&gt;:&lt;cvsuser&gt;@&lt;cvs repository&gt;,&lt;cvs password&gt;[,&lt;repository path&gt; (no starting slash) ]
+</pre>
+
+    <p>The &lt;repository path&gt; is only required when the module (or
+    directory) containing the source for the element does not match the
+    elementId or if the directory is not at the root of the repository. Because
+    all the map files are concatenated into a single file called Directory.txt
+    after getMapFiles has finished, the format of directory.txt described in <a
+    href="#pdeHelpGenCommandLine">[4]</a> applies also to the format of a map
+    file.</p>
+
+    <p>The fetch phase starts with the creation of an ant script called
+    retrieve.xml, which contains a build target for fetching the feature.xml.
+    Then this target will be executed and the information about the provided
+    plug-ins of the feature is read in. For every provided plug-in a
+    corresponding build target will be added to the fetch build script. Both
+    files (retrieve.xml and feature.xml) are only temporary. They will be
+    deleted after the fetch build script has been generated.</p>
+
+    <p>The fetch build script is named fetch_&lt;element_id&gt;.xml, where
+    &lt;element_id&gt; is substituted with the feature id read from the
+    feature.xml file (not the property "id" given in customTargets.xml).
+    Running the default target "fetch" of this build script calls the target
+    getFromCVS for the feature itself and all included plug-ins. The sources of
+    the plugins are not fetched again in the case of an existing plugin.xml.
+    So, if you run the full build twice in the same directory, the sources for
+    the plug-ins are not fetched twice. But you need to have a working CVS
+    connection nonetheless, because the retrieve.xml file is created and
+    executed in any case. Therefore you would end up with an incomplete
+    fetch_&lt;element_id&gt;.xml file if you run the fetch phase and did not
+    have CVS connection.</p>
+    <br>
+     <br>
+     
+
+    <div class="figure">
+      <img src="fetchProcessActivity.png" height="780" width="464"> 
+
+      <div class="figure-caption">
+        <span class="figure-number">Fig 7</span>. File flow of the build
+        process
+      </div>
+    </div>
+
+    <h4>Generate Phase</h4>
+
+    <p>After the feature and plug-ins have been copied to the build target
+    directory, the build scripts are generated in the same way as they would be
+    with the PDE GUI (see above). The created files are:</p>
+
+    <ul>
+      <li>a build file in every plug-in directory (unless custom build files
+      are used)</li>
+
+      <li>a build file in the feature directory</li>
+
+      <li>assemble_&lt;element_id&gt;.all.xml and
+      assemble_&lt;element_id&gt;.all.xml</li>
+    </ul>
+
+    <h4>Process and Assemble Phase</h4>
+
+    <p>At this point of the build process the build files are in place and the
+    compilation is started from a call to processElement in genericTargets.xml.
+    This in turn calls the target build.jars in the build.xml file in the
+    feature directory. There the compilation starts and the warning and error
+    messages of the java compiler are collected separately for each jar file.
+    The files are named &lt;jarFileName&gt;.bin.log and reside in a
+    subdirectory "temp.folder". Later these files are gathered and copied to
+    the build output directory.</p>
+
+    <p>The assembly is started from the assembleElement target in
+    genericTargets.xml which then calls a target named assemble.${id} in
+    customTargets.xml. This gives the chance to do some work before or after
+    the assembly, but the main part of the work can just be delegated to the
+    assemble.${id}.all.xml in the build target directory.</p>
+
+    <p>The assemble script copies all the build results to a temporary
+    subdirectory in the build target directory and finally zips them up. The
+    files being collected are feature manifest files (feature.xml), plug-in
+    manifest files (plugin.xml) and the built jar files. The inclusion of
+    arbitrary files can be specified with the bin.includes property of the
+    plug-in's build.properties file <a href=
+    "#pdeHelpBuildProperties">([1]</a>).</p>
+
+    <h4>PostBuild Phase</h4>
+
+    <p>This is a build hook which is empty per default and allows performing
+    actions with the build output. We will use this later for test
+    automation.</p>
+
+    <blockquote>
+      <p><img src="../images/tip.gif" height="13" width="62"> After
+      modifications to the build files you can save time if you run only a
+      particular phase of the build process. E.g. if you changed a property
+      which only affects the process phase, you can run this phase alone by
+      appending process to the -buildfile argument in the command line:</p>
+<pre>
+java org.eclipse.core.launcher.Main -application org.eclipse.ant.core.antRunner -buildfile %buildfile% process
+</pre>
+    </blockquote>
+
+    <h3>How to build your Plug-In</h3>
+
+    <p>Now we have built sdk.examples headless and have an overview of the
+    build process. Build automation for your plug-in is not far away anymore
+    with one constraint: you need to provide a feature project if you want to
+    fully leverage the headless build as you have seen it for sdk.examples. So,
+    if you don't have a feature project created yet, now is the time. With the
+    IDE you can create a feature project with
+    File-&gt;New-&gt;Project...-&gt;Plug-in Development-&gt;Feature Project. In
+    the wizard which opens enter a feature name and then select all the
+    plug-ins you want to include in your build. If you do not want to deploy
+    your plug-in(s) as a feature, you can configure the feature project so that
+    it is only be used to drive the build process but will not be included in
+    the deliverable. Therefore just remove the bin.includes property from the
+    build.properties file of the feature project.</p>
+
+    <p>Using the feature there need to be 4 files defined in order to provide a
+    one step build:</p>
+
+    <ul>
+      <li>a map file for fetching the sources</li>
+
+      <li>customTargets.xml</li>
+
+      <li>build.properties</li>
+
+      <li>a shell script, which starts an Eclipse instance as AntRunner</li>
+    </ul>
+
+    <p>Fig. 8 shows a part of the map file for RDT. The CVS method used is ext,
+    which allows to configure access parameters like user name, password or SSH
+    proxy locally. In the case that pserver should be used, the getMapFiles
+    target of customTargets.xml replaces ext with pserver.</p>
+
+    <div class="figure" style="text-align: left;">
+<pre>
+ feature@org.rubypeople.rdt=HEAD,:ext:cvs.sf.net:/cvsroot/rubyeclipse,,org.rubypeople.rdt-feature
+ plugin@org.kxml2=HEAD,:ext:cvs.sf.net:/cvsroot/rubyeclipse,
+ plugin@org.rubypeople.rdt=HEAD,:ext:cvs.sf.net:/cvsroot/rubyeclipse,
+ plugin@org.rubypeople.rdt.core=HEAD,:ext:cvs.sf.net:/cvsroot/rubyeclipse,
+</pre>
+
+      <div class="figure-caption">
+        <span class="figure-number">Fig 8</span>. A section from rdt.map
+      </div>
+    </div>
+
+    <p>As seen above customTargets.xml is the build file which provides hooks
+    to customize the build process. A template for customTargets.xml can be
+    found in <a href="#pdeScripts">[9]</a>. Fig. 9 shows the parts of the
+    customTargets.xml file which have to be modified as a minimum for the build
+    process:</p>
+
+    <ol>
+      <li>Define the Feature to be built in the allElements target. The given
+      id is not the Feature id as defined in the feature manifest but only an
+      identifier for the lookup in the map file.</li>
+
+      <li>Retrieve map files in the getMapFiles target. Usually the map files
+      are fetched from CVS and copied to the maps subdirectory of
+      ${buildDirectory}.</li>
+
+      <li>Provide a target called assemble.&lt;id&gt;. This can just delegate
+      to the assemble script which has been created in the generate phase of
+      the build process.</li>
+    </ol>
+
+    <div class="figure">
+      <div style="text-align: left;">
+<pre>
+&lt;target name="allElements"&gt;
+  &lt;ant antfile="${genericTargets}" target="${target}" &gt;
+ &lt;property name="type" value="feature" /&gt;
+  &lt;property name="id" value="org.rubypeople.rdt" /&gt;
+ &lt;/ant&gt;
+&lt;/target&gt;
+&lt;target name="getMapFiles"&gt;
+    &lt;property name="cvsRoot" value=":ext:cvs.sf.net:/cvsroot/rubyeclipse" /&gt;
+  &lt;cvs cvsroot="${cvsRoot}"
+    dest="${buildDirectory}/maps"
+   command="export -r ${mapVersionTag} org.rubypeople.rdt.build/map"/&gt;
+&lt;/target&gt;
+&lt;target name="assemble.org.rubypeople.rdt"&gt;
+  &lt;ant antfile="${assembleScriptName}" dir="${buildDirectory}"&gt;
+ &lt;property name="zipargs" value="" /&gt;
+  &lt;/ant&gt;
+&lt;/target&gt;
+</pre>
+      </div>
+
+      <div class="figure-caption">
+        <span class="figure-number">Fig 9</span>. Mandatory changes in
+        customTargets.xml
+      </div>
+    </div>
+
+    <h4>Build RDT as example</h4>
+
+    <p>All the files which configure the headless build for RDT can be found in
+    <a href="#buildBootstrapFilesRdt">[10]</a>. In order to build RDT, you must
+    have an Eclipse 3.0.x installation, CVS installed and CVS access to the
+    internet (firewall!). The sources will be fetched from cvs.sf.net, which
+    provides anonymous access.</p>
+
+    <p>First we need to get the bootstrap for the headless build:</p>
+<pre>
+cvs -d :pserver:anonymous@cvs.sf.net:/cvsroot/rubyeclipse export -r R0_5_0 org.rubypeople.rdt.build/bootstrap
+</pre>
+
+    <p>After a successful retrieval you will find the following files: README,
+    run.bat, run.sh, customTargets.xml and build.properties. The map file
+    defines to fetch the HEAD version of all plug-ins. In order to get stable
+    sources, the property fetchTag is set in build.properties and overwrites
+    the settings from the map file. See <a href="#pdeScripts">[9]</a> for a
+    description of the build file options. Now change the variables in the run
+    script (run.bat on windows or run.sh on UNIX) so that they reflect your PCs
+    environment.</p>
+
+    <ul>
+      <li>Adapt eclipseDir and pdeBuildPluginVersion to the Eclipse
+      installation you want to use for the build</li>
+
+      <li>Set the buildDirectory&nbsp;</li>
+
+      <li>The variable docbook.root can be commented out</li>
+
+      <li>The variable pluginAutomaticBuildDir must be set to the absolute path
+      of the bootstrap directory</li>
+
+      <li>If java 1.4.x is not available on the classpath, vm must be set to
+      the location of a java 1.4.x executable.&nbsp;</li>
+    </ul>
+
+    <p>Now the execution of the run script should build RDT. If it does not,
+    test your skills in handling the lengthy Ant stack traces.</p>
+
+    <blockquote>
+      <p><img src="../images/tip.gif" height="13" width="62">The
+      build.properties file which is provided as template in <a href=
+      "#pdeScripts">[9]</a> builds a result zip file which contains paths with
+      "eclipse" prefix, e.g. "eclipse/feature/...". This is inconvenient if the
+      zip file should be extracted into a renamed Eclipse installation
+      directory, e.g. eclipse-3.0.2. Therefore the archive path names should be
+      relative to the eclipse installation directory, which can be achieved by
+      setting the properties collectingFolder and archivePrefix to ".".</p>
+    </blockquote>
+
+    <h4>Debug the Build Process</h4>
+
+    <p>If you reach a point where the error messages during the build are more
+    confusing than helpful, you can debug the build run. A first measure to
+    take is to set the AntRunner to verbose mode: add a "-verbose" behind the
+    AntRunner argument in the java command line. This gives detailed
+    information about which Ant targets are executed. It is particularly useful
+    for debugging problems with accessing CVS. If that does not help, the build
+    run itself can be debugged. Instead of starting the build host from a shell
+    script (.sh or .bat) you can start the build host from the Eclipse IDE with
+    a Run Configuration. The custom Ant Tasks which PDE provides reside in the
+    org.eclipse.pde.build plug-in project and set breakpoints or catch
+    exceptions. Here is a step-by-step guide on how to set up an AntRunner
+    Run-time Workbench:</p>
+
+    <ol>
+      <li>Start Eclipse and switch to an empty workspace</li>
+
+      <li>File&gt;Import, External plug-ins and Fragments</li>
+
+      <li>Select "Projects with source folders"</li>
+
+      <li>Add all plug-ins with org.eclipse.pde.*</li>
+
+      <li>
+        Create a Run-time Workbench run configuration (Run-&gt;Run..., Run-time
+        Workbench) 
+
+        <ol>
+          <li>Choose "org.eclipse.ant.core.antRunner" as "Run an
+          application"</li>
+
+          <li>
+            Add Program Arguments: 
+
+            <ol>
+              <li>-Dbuilder=$builder, where $builder is the directory where
+              your customTargets.xml is located</li>
+
+              <li>-DbaseLocation=$baseLocation, where $baseLocation is the
+              directory of your Eclipse installation (see above)</li>
+            </ol>
+          </li>
+        </ol>
+      </li>
+
+      <li>Add a breakpoint, e.g. in the method "generate" in
+      org.eclipse.pde.build/src-pdebuild/org.eclipse.pde.internal.build.FetchScriptGenerator</li>
+
+      <li>Start the debug session</li>
+    </ol>
+
+    <div class="figure">
+      <img style="width: 794px; height: 605px;" alt=
+      "Run Configuration for building sdk.examples" src=
+      "buildRunConfiguration.png"><br>
+       
+
+      <div class="figure-caption">
+        <span class="figure-number">Fig 10</span>. Run configuration for
+        building sdk.examples<br>
+      </div>
+    </div>
+
+    <p>Fig. 10 shows the Run configuration dialog for building sdk.examples,
+    which we have built from command line above. The full Program Arguments
+    are:</p>
+<pre>
+-buildfile "D:\build\org.eclipse.releng.eclipsebuilder\build.xml" -Dcomponent=sdk.examples -Dconfigs="*,*,*"
+-Dbaseos=win32 -Dbasews=win32 -Dbasearch=x86 -Djavacfailonerror=true
+-Dpde.build.scripts=D:/eclipse/eclipse-3.0.2/plugins/org.eclipse.pde.build_3.0.1/scripts -DbaseLocation=D:\eclipse\eclipse-3.0.2
+</pre>
+
+    <p>Note the location of the build workspace. The log file in
+    D:\build\build-workspace\.metadata\.log often provides useful information
+    if a build fails.</p>
+
+    <h4>Include sources</h4>
+
+    <p>Unfortunately the headless build does not support all of the settings as
+    they are provided by the Feature Export Dialog (Fig. 3). For example, the
+    inclusion of source jar files is not possible. This lack can be
+    circumvented by using a source feature or plug-in. Building a source
+    feature is quite convenient and needs only two entries to be added:</p>
+
+    <ol>
+      <li>
+        Add a Line to build.properties of your feature project: 
+<pre>
+generate.feature@org.rubypeople.rdt.source=org.rubypeople.rdt
+</pre>
+      </li>
+
+      <li>
+        Add an xml element to feature.xml: 
+<pre>
+&lt;includes id="org.rubypeople.rdt.source" version="0.0.0"/&gt;
+</pre>
+        If the version is set to 0.0.0, the version of the containing plug-in
+        will be used.
+      </li>
+    </ol>
+
+    <p>Further customization of the source feature generation can be achieved
+    by creating the subdirectories "sourceTemplatePlugin" and
+    "sourceTemplateFeature" in your feature project. These directories should
+    contain the files that are included in the root of the generated source
+    feature and plug-in. The feature.xml and plugin.xml files are not required
+    since these are generated. A build.properties is required in the
+    sourceTemplatePlugin directory. This should contain a "bin.includes"
+    setting as well as the entry "sourcePlugin = true". The plugin.xml file and
+    src/ directory should be listed in bin.includes.</p>
+
+    <blockquote>
+      <p><img src="../images/tip.gif" height="13" width="62"> If there is an
+      includes tag in feature.xml, building with the Export... button from the
+      Feature Manifest Editor fails (<a href=
+      "#generateSourceFeatureBug">[16]</a>). As a workaround the feature.xml of
+      the RDT project contains only an xml comment. The comment will be
+      replaced with the includes tag in the postFetch target in
+      customTargets.xml. The generate.feature property must be treated in a
+      similar way.</p>
+    </blockquote>
+
+    <h4>Build for Update Site</h4>
+
+    <p>If you want to build files for an update site customTargets.xml can be
+    modified to call the build.update.jar target of the feature build file. The
+    results can then be copied to the update site location. Fig. 11 shows the
+    changes in customTargets.xml, following the idea in <a href=
+    "#discussionUpdateSiteBuild">[11]</a>.</p>
+
+    <div class="figure">
+      <div style="text-align: left;">
+<pre>
+&lt;target name="postBuild"&gt;
+  &lt;property name="UpdateSiteStagingLocation" value="${buildDirectory}/updateSite"/&gt;
+  &lt;property name="sitePackagePrefix" value="org.rubypeople.updatesite"/&gt;
+  &lt;antcall target="generateUpdateSite"/&gt;
+&lt;/target&gt;
+&lt;target name="generateUpdateSite"&gt;
+  &lt;!-- Create the directory structure --&gt;
+  &lt;mkdir dir="${UpdateSiteStagingLocation}"/&gt;
+  &lt;mkdir dir="${UpdateSiteStagingLocation}/features"/&gt;
+  &lt;mkdir dir="${UpdateSiteStagingLocation}/plugins"/&gt;
+  &lt;!-- Build the jar files --&gt;
+  &lt;antcall target="allElements"&gt;
+    &lt;param name="genericTargets" value="${builder}/customTargets.xml"/&gt;
+    &lt;param name="target" value="updateSiteExport"/&gt;
+  &lt;/antcall&gt;
+  &lt;antcall target="copySiteXmlFromCvs"/&gt;
+  &lt;antcall target="createNightlyBuildSiteXml"/&gt;
+&lt;/target&gt;
+&lt;target name="updateSiteExport"&gt;
+  &lt;ant antfile="build.xml" dir="${buildDirectory}/features/${id}/" target="build.update.jar"&gt;
+    &lt;property name="feature.destination" value="${UpdateSiteStagingLocation}/features"/&gt;
+    &lt;property name="plugin.destination" value="${UpdateSiteStagingLocation}/plugins"/&gt;
+  &lt;/ant&gt;
+&lt;/target&gt;
+&lt;target name="copySiteXmlFromCvs" unless="isNightlyBuild"&gt;
+  &lt;!-- connect to CVS and fetch site.xml, copy to ${UpdateSiteStagingLocation}/site.xml afterwards --&gt;
+&lt;/target&gt;
+&lt;target name="createNightlyBuildSiteXml" if="isNightlyBuild"&gt;
+  &lt;!-- create ${UpdateSiteStagingLocation}/site.xml which contains only the nighlty build version --&gt;
+&lt;/target&gt;
+</pre>
+      </div>
+
+      <div class="figure-caption">
+        <span class="figure-number">Fig 11</span>. Building for update site
+      </div>
+    </div>
+
+    <h2>Part 2 - Automated Tests</h2>
+
+    <p>After the deliverable has been created the wish may arise to deploy it
+    and to run a test suite with unit and integration tests. The reasons to do
+    this automatically as well and present the results along with the
+    deliverable are manifold:</p>
+
+    <ul>
+      <li>find integration errors, run the tests in different
+      configurations</li>
+
+      <li>give a hint on the quality of the code, particularly useful for
+      nightly builds</li>
+
+      <li>run the tests in a defined environment as opposed to the workbench of
+      the developer</li>
+    </ul>
+
+    <p>Fortunately, Eclipse provides a framework for test automation, which can
+    also be leveraged for test automation of arbitrary Eclipse features. The
+    test results of every Eclipse build are publicly available in the Eclipse
+    download directories; see <a href="#discussionUpdateSiteBuild">13</a> for
+    the test results of the 3.0.2 build.</p>
+
+    <h3>Eclipse Test Framework</h3>
+
+    <p>For running the tests on your PC, get the
+    eclipse-Automated-Tests-&lt;version&gt;.zip, which contains a zip file with
+    the unit tests (eclipse-junit-tests-&lt;version&gt;.zip), shell scripts,
+    build files and documentation. The steps for running the tests are
+    described in the file testFramework.html (<a href="#testFramework">14</a>).
+    Basically the shell script runtests starts up a new AntRunner Eclipse
+    instance which executes one of the targets of the test.xml build file.
+    Therefore an eclipse installation must exist in the eclipse subdirectory,
+    which is called the build host in the following. If there is no build host
+    installation, the script tries to unzip an SDK zip which it assumes to be
+    the same directory. In addition to that the script extracts the
+    org.eclipse.test plug-in from the eclipse-junit-tests-&lt;version&gt;.zip
+    into the build host installation.<br>
+    <br>
+     In order to run the some of the tests of the JDT, the following steps are
+    necessary:</p>
+
+    <ol>
+      <li>Download eclipse-Automated-Tests-3.0.2.zip (<a href=
+      "#eclipseAutomatedTests">15</a>) and unzip to
+      $ECLIPSE_AUTOMATED_TESTS</li>
+
+      <li>Copy eclipse-SDK-3.0.2 to $ECLIPSE_AUTOMATED_TESTS</li>
+
+      <li>cd to $ECLIPSE_AUTOMATED_TESTS and type "runtests.bat jdtui"</li>
+    </ol>
+
+    <p>The last step executes the non-interactive UI tests for the JDT (there
+    are also interactive UI Tests which require the interaction of a test
+    person to assure the layout and interactive behaviour of dialogs for
+    example). Although the tests are non-interactive you will watch a workbench
+    come up and during the execution of the test suite you can witness projects
+    being created and closed, editors being opened and so on. After the test
+    run has finished, the test results will be placed in
+    $ECLIPSE_AUTOMATED_TESTS/results in html and xml format.<br>
+    <br>
+     While the tests run, we can have look behind the scenes. Fig. 12 lists the
+    build files for test automation; Fig. 13 shows the interaction between
+    them. At first the runtests script creates the build host and launches an
+    Eclipse instance as AntRunner. The AntRunner executes the jdt target of
+    test.xml. During the process another eclipse-installation will take place
+    in $ECLIPSE_AUTOMATED_TESTS/test-eclipse, called the test host in the
+    following. The test host also consists of the provided SDK and the full
+    content of eclipse-junit-tests-3.0.2.zip. A test host instance is then
+    launched, with the application type org.eclipse.test.uitestapplication
+    (target uitest in library.xml, see below). The class name of the test suite
+    is passed to the uitestapplication. After the test suite has completed, the
+    test results can be found in $ECLIPSE_AUTOMATED_TESTS/results.</p>
+
+    <div class="figure">
+      <center style="margin-bottom: 1em;">
+        <table class="contentTable" cellspacing="2">
+          <tbody>
+            <tr>
+              <th>file name</th>
+
+              <th>location</th>
+
+              <th>description</th>
+            </tr>
+
+            <tr>
+              <td><b>test.xml</b></td>
+
+              <td>unzip location of eclipse-Automated-Tests.zip</td>
+
+              <td>This script provides the entry point for testing, the
+              runtests target</td>
+            </tr>
+
+            <tr>
+              <td><b>test.xml</b></td>
+
+              <td>plug-in directory of the test suite to be run</td>
+
+              <td>Must provide a run target. Main purpose is to set properties
+              and delegate to the ui-test target in library.xml. After the
+              tests have run the collect target in library is called to create
+              the result files. A skeleton can be found in <a href=
+              "#testFramework">14.</a> </td>
+            </tr>
+
+            <tr>
+              <td><b>library.xml</b></td>
+
+              <td>plugins/org.eclipse.test, delivered in
+              eclipse-junit-tests-&lt;version&gt;.zip, which itself is part of
+              eclipse-Automated-Tests-&lt;version&gt;.zip</td>
+
+              <td>This build script contains the eclipse-test target which
+              launches a new eclipse instance within which the tests will be
+              executed. Tests can be run with or without UI.</td>
+            </tr>
+          </tbody>
+        </table>
+      </center>
+
+      <div class="figure-caption">
+        <span class="figure-number">Fig 12</span>. Files for controlling the
+        test process
+      </div>
+    </div>
+    <br>
+     <br>
+     <br>
+     
+
+    <div class="figure">
+      <img style="width: 861px; height: 554px;" alt=
+      "Interaction Diagram for the test process" src=
+      "runTestsInteractionDiagram.png"><br>
+       
+
+      <div class="figure-caption">
+        <span class="figure-number">Fig 13</span>. Script interaction for the
+        test process
+      </div>
+    </div>
+
+    <h3>Automate Tests for your Plug-In</h3>
+
+    <p>Now it is time to think about the effort to automate the tests for your
+    plug-in. At the time I automated the tests for RDT, the tests resided in
+    extra plug-ins and there was an AllTests suite, which gathered all the
+    tests. With these preconditions, there were 3 steps on the road to test
+    automation:</p>
+
+    <ul>
+      <li>Build a deployable which includes the tests</li>
+
+      <li>Add a test.xml file in the plug-in, which contains the AllTests
+      suite</li>
+
+      <li>Add post-build behavior in customTargets.xml</li>
+    </ul>
+
+    <h4>Build a deployable which includes the tests</h4>
+
+    <p>Because the deliverable for your plug-in (the zip file or update site
+    files) should not contain the tests, another zip file for the tests must be
+    created, called test deliverable in the following. If you followed the
+    pattern of the Eclipse plug-ins and created a tests plug-in project for
+    each of your plug-ins, this can easily be achieved. If there is more than
+    one test plug-in project, a test feature can be created to bundle them.
+    Therefore you can add a feature project. Alternatively, if you want to keep
+    the number of projects small and do not have the need to create the feature
+    interactively from the feature manifest file, you can add a subdirectory to
+    the existing feature project. The map file can then be used to customize
+    the fetch process to create a feature directory with the content of the
+    subdirectory. An example is given in the first line of Fig. 14.</p>
+
+    <div class="fileContent">
+      feature@org.rubypeople.rdt-tests=HEAD,:ext:cvs.sf.net:/cvsroot/rubyeclipse,,org.rubypeople.rdt-feature/unit-tests-feature<br>
+
+       plugin@org.rubypeople.rdt.ui.tests=HEAD,:ext:cvs.sf.net:/cvsroot/rubyeclipse,<br>
+
+       plugin@org.rubypeople.rdt.debug.core.tests=HEAD,:ext:cvs.sf.net:/cvsroot/rubyeclipse,<br>
+
+       ...<br>
+       
+
+      <div class="figure-caption">
+        <span class="figure-number">Fig 14</span>. Section from rdt.map for
+        test feature
+      </div>
+    </div>
+
+    <p>Building the test deliverable is identical to building the deliverable
+    itself. If you can use the same build properties as for the deliverable,
+    just add an additional entry to the allElements target in
+    customTargets.xml. Fig. 15 shows how the allElements target is adapted for
+    RDT in order to create the deliverable and test deliverable in one
+    step.</p>
+
+    <div class="fileContent">
+<pre>
+&lt;target name="allElements"&gt;&lt;target name="allElements"&gt;
+
+  ...
+ 
+  &lt;ant antfile="${genericTargets}" target="${target}" &gt;
+    &lt;property name="type" value="feature" /&gt;
+    &lt;property name="id" value="org.rubypeople.rdt-tests" /&gt;
+  &lt;/ant&gt; 
+&lt;/target&gt;
+&lt;target name="postBuild"&gt; 
+  &lt;antcall target="test"&gt;&lt;/antcall&gt;
+&lt;/target&gt;
+
+&lt;target name="test"&gt;
+  &lt;echo message="Setting up tests in ${eclipseAutomatedTestHome}"/&gt;
+    
+  &lt;copy file="${buildDirectory}/${buildLabel}/org.rubypeople.rdt-${buildId}.zip" tofile="${eclipseAutomatedTestHome}/eclipse-SDK-RDT-${buildId}.zip" /&gt;
+  &lt;copy file="${buildDirectory}/${buildLabel}/org.rubypeople.rdt-tests-${buildId}.zip" tofile="${eclipseAutomatedTestHome}/eclipse-junit-tests-rdt-${buildId}.zip" /&gt;
+
+  &lt;ant antfile="${eclipseAutomatedTestHome}/test.xml" target="runtests" dir="${eclipseAutomatedTestHome}"&gt; 
+    &lt;property name="os" value="${baseos}" /&gt;
+    &lt;property name="ws" value="${basews}" /&gt;
+    &lt;property name="arch" value="${basearch}" /&gt;
+    &lt;property name="testPlugin" value="org.rubypeople.rdt.tests.all_0.5.0" /&gt; 
+    &lt;property name="report" value="org.rubypeople.rdt.tests.all" /&gt; 
+  &lt;/ant&gt; 
+&lt;/target&gt;
+</pre>
+
+      <div class="figure-caption">
+        <span class="figure-number">Fig 15</span>. Targets from
+        customTargets.xml for testing
+      </div>
+    </div>
+
+    <h4>Add a test.xml</h4>
+
+    <p>A test.xml file must exist for every test plug-in you want to run.
+    Because every test run starts up a new eclipse instance, it is convenient
+    to have a plug-in which bundles all the tests into a single AllTests suite.
+    Then there is only one test run and there must only be one test.xml file
+    maintained. A template for such a test.xml file can be found in <a href=
+    "#testFramework">14</a>. Fig. 16 shows important targets of the test.xml
+    for the RDT plug-in containing the AllTests suite. The entry point is the
+    run target, which is called from ${eclipseAutomatedTestHome}/test.xml. Its
+    prerequisites are init, suite and cleanup. The suite target calls ui-test
+    in library.xml with the necessary properties to start up the test host and
+    run TS_RdtAllTests.</p>
+
+    <div class="fileContent">
+<pre>
+ &lt;target name="init"&gt;
+    &lt;tstamp/&gt;
+    &lt;delete&gt;
+      &lt;fileset dir="${eclipse-home}" includes="org*.xml"/&gt;
+    &lt;/delete&gt;
+  &lt;/target&gt;
+      
+  &lt;!-- This target defines the tests that need to be run. --&gt;
+  &lt;target name="suite"&gt;
+    &lt;property name="rdt-folder" value="${eclipse-home}/rdt_folder"/&gt;
+    &lt;delete dir="${rdt-tests-workspace}" quiet="true"/&gt;
+    &lt;ant target="ui-test" antfile="${library-file}" dir="${eclipse-home}"&gt;
+      &lt;property name="data-dir" value="${rdt-tests-workspace}"/&gt;
+      &lt;property name="plugin-name" value="${plugin-name}"/&gt;
+      &lt;property name="classname" value="org.rubypeople.rdt.tests.all.TS_RdtAllTests"/&gt;   
+
+      &lt;property name="vmargs" value="-Drdt.rubyInterpreter=&amp;quot;${rdt.rubyInterpreter}&amp;quot;"/&gt;
+
+    &lt;/ant&gt;
+  &lt;/target&gt;
+      
+ 
+  &lt;!-- This target holds code to cleanup the testing environment after --&gt;
+  &lt;!-- after all of the tests have been run. You can use this target to --&gt;
+  &lt;!-- delete temporary files that have been created. --&gt;
+  &lt;target name="cleanup"&gt;
+  &lt;/target&gt;
+      
+  &lt;!-- This target runs the test suite. Any actions that need to happen --&gt;
+  &lt;!-- after all the tests have been run should go here. --&gt;
+  &lt;target name="run" depends="init,suite,cleanup"&gt;
+    &lt;ant target="collect" antfile="${library-file}" dir="${eclipse-home}"&gt;
+      &lt;property name="includes" value="org*.xml"/&gt;
+      &lt;property name="output-file" value="${plugin-name}.xml"/&gt;
+    &lt;/ant&gt;
+  &lt;/target&gt;
+</pre>
+
+      <div class="figure-caption">
+        <span class="figure-number">Fig 16</span>. Important targets of
+        org.rubypeople.rdt.tests.all/test.xml<br>
+      </div>
+    </div>
+
+    <h4>Add post-build behavior in customTargets.xml</h4>
+
+    <p>Fig. 15 shows the test target of customTargets.xml, which is executed in
+    the PostBuild phase of the build process. The property
+    eclipseAutomatedTestHome is set to the directory into which
+    eclipse-Automated-Tests-&lt;version&gt;.zip has been extracted. The first
+    step in the test target is to copy the two deliverables into this
+    directory, following a naming schema which is given in
+    ${eclipseAutomatedTestHome}/test.xml. By using these names, the runtests
+    target of test.xml extracts the deliverables into the test host
+    installation (in ${eclipseAutomatedTestHome}/test-eclipse/eclipse). The
+    second step is to call the runtests target of
+    ${eclipseAutomatedTestHome}/test.xml. The property testPlugin defines which
+    tests to run and the report property defines the name of the generated
+    report.</p>
+
+    <p>Compared to the example above, where we ran the tests jdt ui, there is
+    no need to create the build host in $ECLIPSE_AUTOMATED_TESTS/eclipse,
+    because the target runtests in test.xml is directly called from the
+    postbuild target in customTargets.xml. So the build host for the automatic
+    build is reused as build host for the automatic tests. Fig. 17 shows the
+    difference compared to Fig. 13.</p>
+
+    <div class="figure">
+      <img alt="Interaction Diagram for the test process" src=
+      "runTestsRdtInteractionDiagram.png"><br>
+       
+
+      <div class="figure-caption">
+        <span class="figure-number">Fig 17</span>. Script interaction for the
+        test process<br>
+      </div>
+    </div>
+
+    <blockquote>
+      <p><img src="../images/tip.gif" height="13" width="62">PDE JUnit tests
+      open up a workbench window. If you run your tests on a remote *nix box,
+      you can use Xvfb (X virtual frame buffer) to provide a dummy environment
+      for displaying windows.</p>
+    </blockquote>
+
+    <h4>Run the RDT tests</h4>
+
+    <p>If you want to run the RDT tests, follow the instructions above for
+    building RDT and set the following additional properties in run.bat or
+    run.sh:</p>
+
+    <ul>
+      <li>unset dontRunTests</li>
+
+      <li>set eclipseAutomatedTestHome to the directory into which you
+      extracted eclipse-Automated-Tests-3.0.2.zip</li>
+
+      <li>unset rubyInterpreter if you don't have ruby installed (which will
+      result in failed tests)</li>
+    </ul>
+
+    <p>After you call run.bat or run.sh the tests will be executed in the
+    postBuild phase. If you want to run the tests separately, you can insert
+    the build target after the -build property in the antRunner command
+    line:</p>
+<pre>
+%vm% -cp %eclipseDir%\startup.jar ... org.eclipse.core.launcher.Main -application org.eclipse.ant.core.antRunner -buildfile %buildfile% postBuild -data ...
+</pre>
+
+    <h1>Conclusion</h1>
+
+    <p>Hopefully this article could help you in setting up project automation
+    for your Eclipse plug-in project. It has shown the automation mechanisms
+    used in building Eclipse itself and how they are leveraged to build and
+    test arbitrary plug-ins automatically with a single command. Further
+    project automation can be achieved from the inside or from the outside:
+    From the inside by using the hooks provided in the build files for
+    activities like enhanced reporting. From the outside by calling the build
+    command as part of a broader build process from tools like CruiseControl or
+    Maven.<br>
+     For the discussion of questions about this article and experiences with
+    Eclipse build and test automation in general, I'd like to invite you to the
+    RDT developer wiki [<a href="#feedbackPage">17</a>] or to e-mail me [<a
+    href="#mbarchfeContact">18]</a>.</p>
+
+    <h1>Acknowledgments</h1>
+
+    <p>I would like to thank Sonia Dimitrov and Pascal Rapicault for their
+    article draft, which I have weaved into this article. Many thanks also to
+    Pat McCarthy for his valuable comments.</p>
+
+    <h3>Reference</h3>
+
+    <table>
+      <tbody>
+        <tr>
+          <td valign="top"><a name="pdeHelpBuildProperties">[1]</a> </td>
+
+          <td><a href=
+          "http://help.eclipse.org/help30/topic/org.eclipse.pde.doc.user/guide/pde_feature_generating_build.htm"
+           class="referenceLink">PDE Help on build.properties</a>, Eclipse 3.0
+          Help</td>
+        </tr>
+
+        <tr>
+          <td valign="top"><a name="pdeHelpGenAnt">[2]</a> </td>
+
+          <td><a href=
+          "http://help.eclipse.org/help30/topic/org.eclipse.pde.doc.user/guide/pde_feature_generating_ant.htm"
+           class="referenceLink">PDE Help on Generating Build Files</a>,
+          Eclipse 3.0 Help</td>
+        </tr>
+
+        <tr>
+          <td valign="top"><a name="bugsHeadlessInvokation">[3]</a> </td>
+
+          <td><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=65146"
+          class="referenceLink">Generated feature build scripts and headless
+          invokation</a> , Eclipse Bugs</td>
+        </tr>
+
+        <tr>
+          <td valign="top"><a name="pdeHelpGenCommandLine">[4]</a> </td>
+
+          <td><a href=
+          "http://help.eclipse.org/help30/index.jsp?topic=/org.eclipse.pde.doc.user/guide/pde_feature_generating_antcommandline.htm"
+           class="referenceLink">PDE Help on headless build</a> , Eclipse 3.0
+          Help</td>
+        </tr>
+
+        <tr>
+          <td valign="top"><a name="eclipsExamples">[5]</a> </td>
+
+          <td><a href=
+          "http://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops/R-3.0-200406251208/eclipse-examples-3.0-win32.zip"
+           class="referenceLink">eclipse-examples-3.0-win32.zip</a> , Eclipse
+          Download Area</td>
+        </tr>
+
+        <tr>
+          <td valign="top"><a name="eclipsebuilderReadme">[6]</a> </td>
+
+          <td><a href=
+          "http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.releng.eclipsebuilder/readme.html?rev=1.24"
+           class=
+          "referenceLink">org.eclipse.releng.eclipsebuilder/readme.html</a> ,
+          Eclipse CVS</td>
+        </tr>
+
+        <tr>
+          <td valign="top"><a name="sdkExamplesBuildFiles">[7]</a> </td>
+
+          <td><a href=
+          "http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.releng.eclipsebuilder/sdk.examples"
+           class=
+          "referenceLink">org.eclipse.releng.eclipsebuilder/sdk.examples</a>,
+          Eclipse CVS</td>
+        </tr>
+
+        <tr>
+          <td valign="top"><a name="jdtFeature">[8]</a> </td>
+
+          <td><a href=
+          "http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt-feature/"
+          class="referenceLink">JDT feature</a> , Eclipse CVS</td>
+        </tr>
+
+        <tr>
+          <td valign="top"><a name="pdeScripts">[9]</a> </td>
+
+          <td><a href=
+          "http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.pde.build/scripts"
+           class="referenceLink">org.eclipse.pde.build/scripts</a>, Eclipse
+          CVS</td>
+        </tr>
+
+        <tr>
+          <td valign="top"><a name="buildBootstrapFilesRdt">[10]</a> </td>
+
+          <td><a href=
+          "http://cvs.sourceforge.net/viewcvs.py/rubyeclipse/org.rubypeople.rdt.build/bootstrap/">
+          RDT bootstrap files for headless build</a>, RDT CVS</td>
+        </tr>
+
+        <tr>
+          <td valign="top"><a name="discussionUpdateSiteBuild">[11]</a> </td>
+
+          <td><a href=
+          "http://dev.eclipse.org/newslists/news.eclipse.platform/msg25629.html"
+           class="referenceLink">Way to automatically build for update
+          site?</a> , Eclipse News</td>
+        </tr>
+
+        <tr>
+          <td valign="top"><a name="usingPDEBuild">[12]</a> </td>
+
+          <td><a href=
+          "http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.pde.build/notes/usingPDEBuild.html?rev=1.8"
+           class="referenceLink">Using PDE Build</a>, Eclipse CVS</td>
+        </tr>
+
+        <tr>
+          <td valign="top"><a name="eclipseTestResults">[13]</a> </td>
+
+          <td><a href=
+          "ftp://download.eclipse.org/R-3.0.2-200503110845/testresults" class=
+          "referenceLink">Eclipse Test Results for 3.0.2</a>, Eclipse Download
+          Area</td>
+        </tr>
+
+        <tr>
+          <td valign="top"><a name="testFramework">[14]</a> </td>
+
+          <td><a href=
+          "ftp://download.eclipse.org/R-3.0.2-200503110845/testframework.html"
+          class="referenceLink">testframework.html</a>, Eclipse Download
+          Area</td>
+        </tr>
+
+        <tr>
+          <td valign="top"><a name="eclipseAutomatedTests">[15]</a> </td>
+
+          <td><a href=
+          "http://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops/R-3.0-200406251208/eclipse-Automated-Tests-3.0.zip"
+           class="referenceLink">eclipse-Automated-Tests-3.0.2.zip</a>, Eclipse
+          Download Area</td>
+        </tr>
+
+        <tr>
+          <td valign="top"><a name="generateSourceFeatureBug">[16]</a> </td>
+
+          <td><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=86299"
+          class="referenceLink">generate.feature and building using export
+          button in feature.xml</a> , Eclipse Bugs</td>
+        </tr>
+
+        <tr>
+          <td valign="top"><a name="feedbackPage">[17]</a> </td>
+
+          <td><a href="http://213.203.244.123/wiki/Automatic_Build.wiki.phtml"
+          class="referenceLink">feedback page</a>, RDT developer wiki</td>
+        </tr>
+
+        <tr>
+          <td valign="top"><a name="mbarchfeContact">[18]</a> </td>
+
+          <td><a href="http://sourceforge.net/users/mbarchfe/" class=
+          "referenceLink">contact</a>, user page at sf.net</td>
+        </tr>
+      </tbody>
+    </table>
+
+    <p><small>ref: <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=87151">bug
+    87151</a></small></p>
+
+    <p><small>Java and all Java-based trademarks and logos are trademarks or
+    registered trademarks of Sun Microsystems, Inc. in the United States, other
+    countries, or both.</small></p>
+  </body>
+</html>
+
diff --git a/Article-PDE-Automation/automation.html b/Article-PDE-Automation/automation.html
index d33242e..91f62b8 100644
--- a/Article-PDE-Automation/automation.html
+++ b/Article-PDE-Automation/automation.html
@@ -1,1568 +1,9 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html>
-  <head>
-    <meta name="generator" content="HTML Tidy, see www.w3.org">
-    <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-
-    <title>Build and Test Automation for plug-ins and features</title>
-    <link type="text/css" rel="stylesheet" href="../default_style.css">
-    <link type="text/css" rel="stylesheet" href="automation_style.css">
-  </head>
-
-  <body link="#0000ff" vlink="#800080">
-    <div align="right">
-      &nbsp; <font face="Times New Roman, Times, serif" size="2">Copyright
-      &copy; 2005 Markus Barchfeld</font> 
-
-      <table border="0" cellpadding="2" cellspacing="0" width="100%">
-        <tbody>
-          <tr>
-            <td colspan="2" align="left" bgcolor="#0080c0" valign="top">
-            <b><font face="Arial,Helvetica"><font color="#ffffff">&nbsp;Eclipse
-            Corner Article</font></font></b></td>
-          </tr>
-        </tbody>
-      </table>
-    </div>
-
-    <div align="left">
-      <h1><img src="../images/Idea.jpg" align="middle" height="86" width=
-      "120"></h1>
-    </div>
-
-    <p>&nbsp;</p>
-
-    <h1 align="center">Build and Test Automation for plug-ins and features</h1>
-
-    <blockquote>
-      <p><b>Summary</b><br>
-       Eclipse offers the possibility to build plug-ins automatically outside
-      the Eclipse IDE, which is called "headless build". Eclipse itself is
-      built headless and since Eclipse is an assembly of plug-ins, this feature
-      is also available for any other plug-in. Although the set up of automatic
-      building and testing requires only a couple of files, it can be tedious
-      work to do nonetheless. This article shares the experiences and lessons
-      learned while setting up automatic building and testing for an
-      Open-Source Eclipse plug-in called RDT, Ruby Development Tools.</p>
-
-      <p><b>By Markus Barchfeld, Zuehlke Engineering</b><br>
-       <font size="-1">May 29, 2005</font></p>
-    </blockquote>
-    <hr width="100%">
-
-    <h3>Environment</h3>
-
-    <p>All the techniques, examples and screen shots covered in this article
-    refer to Eclipse 3.0. If you want to follow the examples, you will need an
-    Eclipse 3.0.x installation. They might work with Eclipse 3.1 as well, but
-    it is untested.</p>
-
-    <p>The first part of this article gives an overview of the building steps
-    and artifacts of the headless build and introduces the required files to
-    build RDT as example. The second part shows how the Eclipse Test Framework
-    can be leveraged to extend the automatic build by running a suite of test
-    cases on the built plug-ins.</p>
-
-    <h2>Part 1 - Automated Build</h2>
-
-    <h3>Build a feature using PDE GUI Tools</h3>
-
-    <p>Starting the development of a plug-in is quite easy with the PDE
-    environment. There are tutorials and examples available which create sample
-    plug-in projects in the workspace. Compilation is done automatically from
-    the IDE and running the project can be easily achieved with starting a
-    runtime workbench, thanks to the self hosting feature of Eclipse.</p>
-
-    <p>For deployment you need to create a zip file which contains at least the
-    plugin.xml and a jar file with the classes of the plug-in. The inclusion of
-    further files (e.g. html files, images) can be controlled with the
-    build.properties file, the PDE (Plug-in Development Environment) provides
-    the "Build Properties Editor" for convenient editing of the file. <a href=
-    "#pdeHelpBuildProperties">[1]</a> explains the content of build.properties.
-    Fig. 1 shows the menu entry for the creation of an Ant build file. The
-    build file will be called build.xml and be located in the same directory as
-    the plugin.xml. The build file creation can be controlled with
-    build.properties. Some of the properties are described in <a href=
-    "#pdeHelpGenAnt">[2]</a>, see also Fig. 5. If you have the need to
-    customize the build process beyond the possibilities of build.properties, a
-    custom build file can be provided. Of course, the custom build file must
-    provide the same "interface" as the generated build file has, i.e. there
-    are some mandatory targets, which are explained in <a href=
-    "#usingPDEBuild">[12]</a>.</p>
-
-    <div class="figure">
-      <img style="width: 441px; height: 113px;" alt="Create Ant Build File"
-      src="createAntBuildFile.png"> 
-
-      <div class="figure-caption">
-        <span class="figure-number">Fig 1</span>. Create Ant Build file<br>
-      </div>
-    </div>
-    <br>
-     <br>
-     
-
-    <p>The simplest method of deployment is to choose a zip file as the
-    deliverable and then to unzip the build output into the plugins directory
-    of your target Eclipse installation. More sophisticated deployment options
-    are update sites and product extensions. If the project grows then you may
-    to split it up into several plug-in projects, at least plug-in projects
-    which contain GUI components and Core plug-in projects which do not contain
-    GUI components. They can still be built and deployed separately, but having
-    an Eclipse feature provides additional advantages and so you probably want
-    to wrap up the plug-ins with a feature project.</p>
-
-    <p>Fig. 2 shows the Feature Manifest Editor. The Export... button opens the
-    Feature Export Dialog (Fig. 3) with which you can create the deliverable:
-    either a single zip file or the file structure for an update site. Behind
-    the scenes the feature build process just builds every contained plug-in as
-    described above and then collects the results. All the generated build
-    files are temporary and will be deleted after the build has finished. The
-    build file generation for every contained plug-in works in exactly the same
-    way as if called from the "Create Ant Build File" menu entry, which also
-    means that the build.properties file of every plug-in is considered in the
-    same way as if the plug-in would be built standalone.</p>
-
-    <p>Additionally there is a build.xml file created for the feature project.
-    Like the plug-ins build file, the build.xml for the feature can be created
-    with the PDE Tools-&gt;Create Ant Build File context menu on the
-    feature.xml file. Similar to the plug-ins, there is a build.properties file
-    for the feature which can be used to customize the build process. E.g: the
-    files you choose to include into a binary build are defined in the
-    bin.includes property in build.properties. Some of the properties of
-    build.properties can be conveniently set with the Feature Manifest Editor.
-    E.g the bin.includes property can be assembled on the "Build" tab with a
-    tree control and check boxes.</p>
-
-    <p>Although the Feature Export Dialog allows storing the build-action in a
-    single build script, it is not yet the solution for a fully automated build
-    process, because this script can not be run outside of an Eclipse
-    workbench. Its purpose is to save the settings chosen in the Feature Export
-    Dialog and conveniently rerun the same export function again by choosing
-    Run-&gt;Ant Build (<a href="#bugsHeadlessInvokation">[3]</a>). For building
-    outside of Eclipse, PDE provides some Ant tasks which are explained in <a
-    href="#pdeHelpGenCommandLine">[4]</a>. But In order to use them you don't
-    have to create Ant scripts from scratch. There is already an infrastructure
-    for headless builds, which can be leveraged.</p>
-
-    <div class="figure">
-      <img src="featureManifestEditor.png" height="421" width="518"> 
-
-      <div class="figure-caption">
-        <span class="figure-number">Fig 2</span>. Feature Manifest Editor
-      </div>
-    </div>
-
-    <p>&nbsp;</p>
-
-    <div class="figure">
-      <img src="exportFeaturesDialog.png" height="487" width="378"> 
-
-      <div class="figure-caption">
-        <span class="figure-number">Fig 3</span>. Export Features Dialog
-      </div>
-    </div>
-
-    <h3>Build headless</h3>
-
-    <p>There are many reasons for creating a batch build process such as
-    providing a nightly or continuous build. This requires a fully automatic
-    build which can even start with the retrieval of the sources from CVS.
-    Eclipse itself is built in that way and because "everything is a plug-in"
-    the mechanisms can also be applied for the build of arbitrary plug-ins.
-    However it is necessary to bundle your plug-ins into a feature project if
-    you want to use headless build. If there is no real need to deploy your
-    plug-in(s) using a feature, a feature project can also be used for the
-    build process only. In this case there will be no feature manifest added to
-    the deliverable.</p>
-
-    <p>The infrastructure is provided by the PDE and the RelEng (Release
-    Engineering) plug-ins. The org.eclipse.releng.basebuilder plug-in contains
-    a complete Eclipse installation for the build, but any Eclipse-SDK is
-    sufficient. The org.eclipse.releng.eclipsebuilder plug-in contains control
-    files for the build of parts like JDT, PDE, and all the other plug-ins
-    which are part of the Eclipse distribution.</p>
-
-    <p>Although the build.xml provided in org.eclipse.releng.eclipsebuilder
-    looks like a plain Ant build file, there are Ant-Tasks required which are
-    provided from the PDE. Therefore the script must be executed in an Eclipse
-    environment. Because it would not be suitable for batch processing to start
-    up the Eclipse workbench, there is a "headless" startup mode provided,
-    which means that Eclipse is started without loading GUI plug-ins. To start
-    up a headless Eclipse instance which then executes an Ant build file,
-    Eclipse must be started as AntRunner application. An example is given in
-    Fig. 10.</p>
-
-    <h4>Building sdk.examples headless</h4>
-
-    <p>As an example, let's build one of the Eclipse deliverables headless. The
-    feature sdk.examples is chosen, because it is quite small, the deliverable
-    is about 1.8 Mb (<a href="#eclipsExamples">[5])</a>. The headless build
-    takes about 10 minutes on my 1.6Ghz Win XP laptop, most of the time used
-    for fetching the sources via a 64k internet connection. In addition to an
-    Eclipse installation there are two prerequisites for the headless
-    build:</p>
-
-    <ul>
-      <li><a target="extra" href="http://www.cvshome.org/">CVS</a> client
-      version 1.10 or higher on system path.</li>
-
-      <li><a target="extra" href=
-      "http://www.info-zip.org/pub/infozip/">Info-Zip</a> zip and unzip
-      executables on system path.</li>
-    </ul>
-
-    <p>The first step is to get org.eclipse.releng.eclipsebuilder:</p>
-<pre>
-D:\build&gt;cvs -d :pserver:anonymous@dev.eclipse.org:/cvsroot/eclipse export -r R3_0_2 org.eclipse.releng.eclipsebuilder
-</pre>
-
-    <p>The readme.html in org.eclipse.releng.eclipsebuilder (<a href=
-    "#eclipsebuilderReadme">[6])</a> describes how to build a component. By
-    default, components are built with an Eclipse instance (build host) defined
-    in org.eclipse.releng.basebuilder. But because the basebuilder is rather
-    large, we can also use an existing Eclipse-3.0.2 installation as build
-    host. Because it is not assured that the Eclipse-3.0.2 host can compile the
-    current Eclipse components, we use the 3.0.2 version of eclipsebuilder in
-    this example. In order to fetch the 3.0.2 version of sdk.examples instead
-    of the HEAD version, we have to modify
-    org.eclipse.releng.eclipsebuilder/sdk.examples/build.properties and set the
-    property mapVersionTag appropriately:</p>
-<pre>
-mapVersionTag=R3_0_2
-</pre>
-
-    <p>Now the build can be started from the command line:</p>
-<pre>
-D:\build\org.eclipse.releng.eclipsebuilder&gt;set ECLIPSE_HOME=D:\eclipse\eclipse-3.0.2
-D:\build\org.eclipse.releng.eclipsebuilder&gt;java -cp %ECLIPSE_HOME%\startup.jar org.eclipse.core.launcher.Main
- -application org.eclipse.ant.core.antRunner -buildfile build.xml 
- -Dcomponent=sdk.examples -Dconfigs="*,*,*" -Dbaseos=win32 -Dbasews=win32 -Dbasearch=x86 -Djavacfailonerror=true
- -Dpde.build.scripts=%ECLIPSE_HOME%/plugins/org.eclipse.pde.build_3.0.1/scripts -DbaseLocation=%ECLIPSE_HOME%
-</pre>
-
-    <p>The property "component" is used to define that the files in the
-    sdk.examples subdirectory are used in the headless build, which are
-    build.properties and customTargets.xml. The build takes place in
-    D:\build\org.eclipse.releng.eclipsebuilder\src by default. This can be
-    changed with the property buildDirectory. Either by adding
-    -DbuildDirectory=${basedir}/newDirectory to the command above or by
-    changing buildDirectory in
-    org.eclipse.releng.eclipsebuilder/sdk.examples/build.properties.</p>
-
-    <p>After the build has finished, the deliverable and compile logs can be
-    found in the build output directory, a subdirectory of the build directory.
-    The name of the output directory is defined by the buildLabel property. By
-    default it starts with "I-" and includes the time stamp of the build
-    time.</p>
-
-    <p>The baseLocation is used during the build to provide missing plug-ins,
-    i.e., plug-ins which are not part of the deliverable to build and have
-    therefore not been fetched from CVS. After the plug-ins have been fetched,
-    PDE reads in the plug-ins and creates a build time Eclipse host. If
-    baseLocation is given, the Eclipse installation at baseLocation is added to
-    the build time Eclipse host. In our case this is necessary, because
-    sdk.examples depends on the plug-ins in the Eclipse SDK and can therefore
-    not be built standalone. Note that the baseLocation is independent of the
-    build host and therefore the build host can be another version of Eclipse.
-    In the example we could use Eclipse 3.0.2 as build host and Eclipse 3.0 as
-    baseLocation. The baseLocation may not contain any of the plug-ins to be
-    built. If the baseLocation contained the sdk.examples, an error would
-    occur.</p>
-
-    <p>The next section looks behind the scenes of the headless build.</p>
-
-    <h3>Build Phases</h3>
-
-    <p>Fig. 4 shows the files which drive the build process. While build.xml
-    and genericTargets.xml are provided from the PDE feature, there are two
-    files to be provided by the plugin to be built: the customTargets.xml and
-    build.properties. Examples for these two files can be found in
-    org.eclipse.releng.eclipsebuilder\sdk.examples, if you did not download
-    org.eclipse.releng.eclipsebuilder in the last section, see <a href=
-    "#eclipsebuilderReadme">[7]</a>. The build.properties file allows
-    customizing various build parameters, for a reference see Fig. 5. Fig. 6
-    shows the interaction of three build files, build.xml, genericTargets.xml
-    and customTargets.xml, which accomplishes the build. The main phases of the
-    build process are declared in build.xml: PreBuild, Fetch, Generate,
-    Process, Assemble and PostBuild.</p>
-
-    <div class="figure">
-      <table class="contentTable" cellspacing="2">
-        <tbody>
-          <tr>
-            <th>File name</th>
-
-            <th>Location</th>
-
-            <th>Description</th>
-          </tr>
-
-          <tr>
-            <td><b>build.xml</b></td>
-
-            <td>org.eclipse.pde.build_&lt;version&gt;/scripts</td>
-
-            <td>This is the main build script and provides a skeleton for the
-            build process: from prebuild to postbuild targets</td>
-          </tr>
-
-          <tr>
-            <td><b>genericTargets.xml</b></td>
-
-            <td>org.eclipse.pde.build_&lt;version&gt;/scripts</td>
-
-            <td>Contains targets like fetchElement, generateScript,
-            processElement, assembleElement</td>
-          </tr>
-
-          <tr>
-            <td><b>customTargets.xml</b></td>
-
-            <td>value of property <i>builder</i></td>
-
-            <td>This build script resides in the location specified by the
-            property <i>builder</i>. It is included from the main build.xml
-            file and delegates to targets in genericTargets. The main
-            responsibilities are in defining the features to build and to fetch
-            the map files.</td>
-          </tr>
-
-          <tr>
-            <td><b>build.properties</b></td>
-
-            <td>value of property <i>builder</i></td>
-
-            <td>This build script resides in the location specified by the
-            property <i>builder</i>. It contains properties for fetching the
-            sources, building and compiling.</td>
-          </tr>
-        </tbody>
-      </table>
-
-      <div class="figure-caption">
-        <span class="figure-number">Fig 4</span>. Files for controlling the
-        build process
-      </div>
-    </div>
-    <br>
-     <br>
-     
-
-    <div class="figure">
-      <table class="contentTable" cellspacing="2">
-        <tbody>
-          <tr>
-            <th>Category</th>
-
-            <th>Name</th>
-
-            <th>Description</th>
-          </tr>
-
-          <tr>
-            <td rowspan="3">Build folder</td>
-
-            <td>buildDirectory</td>
-
-            <td>The relative path to a directory where the source for the build
-            will be exported, where scripts will be generated and where the end
-            products of the build will be located. On Windows systems, this
-            directory should be close to the drive root to avoid path length
-            limitations particularly at compile time.</td>
-          </tr>
-
-          <tr>
-            <td>baseLocation</td>
-
-            <td>A directory separate from ${buildDirectory} which contains
-            pre-built plug-ins against which to compile. ${baseLocation} must
-            not contain any features, plug-ins or fragments which are already
-            or will be located in ${buildDirectory}.</td>
-          </tr>
-
-          <tr>
-            <td>baseos,basews,basearch,basenl</td>
-
-            <td>The os, ws, arch and nl values of the pre-built Eclipse found
-            in ${baseLocation}.</td>
-          </tr>
-
-          <tr>
-            <td rowspan="7">Build target (what is being built)</td>
-
-            <td>configs</td>
-
-            <td>An ampersand separated list of configurations to build for an
-            element where a configuration is specified as
-            &lt;os&gt;,&lt;ws&gt;,&lt;arch&gt;.<br>
-             ie.configs="win32,win32,x86 &amp; linux, motif, x86 &amp; linux,
-            gtk, x86". Typically used to build a feature that is os, ws, arch
-            specific. A non-platform specific configuration is specified with
-            "*,*,*".</td>
-          </tr>
-
-          <tr>
-            <td>collectingFolder</td>
-
-            <td>The directory in which built features and plug-ins are
-            gathered. This is typically set to "eclipse".</td>
-          </tr>
-
-          <tr>
-            <td>archivePrefix</td>
-
-            <td>The top level directory in assembled distribution. This is
-            typically set to "eclipse".</td>
-          </tr>
-
-          <tr>
-            <td>buildType</td>
-
-            <td>A letter "I, N, S, R or M" used to identify builds as being one
-            of the following:<br>
-             <br>
-             I - Integration<br>
-             N - Nightly<br>
-             S - Stable<br>
-             R - Release<br>
-             M - Maintenance<br>
-             </td>
-          </tr>
-
-          <tr>
-            <td>buildId</td>
-
-            <td>The build name. Default set to "build" in template
-            build.properties.</td>
-          </tr>
-
-          <tr>
-            <td>buildLabel</td>
-
-            <td>Refers to the name of the directory which will contain the end
-            result of the build. Set to ${buildType}.${buildId} in template
-            build.properties. This directory will be created in the
-            ${buildDirectory}.</td>
-          </tr>
-
-          <tr>
-            <td>timestamp</td>
-
-            <td>A timestamp used to fill in value for buildid in about.mappings
-            files. Also used to name build output directory, i.e.
-            I-build-&lt;timestamp&gt;.</td>
-          </tr>
-
-          <tr>
-            <td rowspan="2">Repository</td>
-
-            <td>mapVersionTag</td>
-
-            <td>Sets the tag attribute in a call to the <a target="extra" href=
-            "http://ant.apache.org/manual/CoreTasks/cvs.html">Ant &lt;cvs&gt;
-            task</a> to check out the map file project.</td>
-          </tr>
-
-          <tr>
-            <td>fetchTag</td>
-
-            <td>Sets the tag or branch when exporting modules used in the
-            build. For example, setting fetchTag=HEAD will fetch the HEAD
-            stream of the source for all features, plug-ins and fragments
-            listed in the map files instead of fetching the tag specified in
-            the map entry for that element. For example this is being used in
-            the eclipse build process to produce the nightly build.</td>
-          </tr>
-
-          <tr>
-            <td rowspan="6">Java Compiler</td>
-
-            <td>bootclasspath</td>
-
-            <td>Sets the value for the attribute "bootclasspath" in calls to
-            the <a target="extra" href=
-            "http://ant.apache.org/manual/CoreTasks/javac.html">Ant
-            &lt;javac&gt; task</a> in a plug-in's build.xml.</td>
-          </tr>
-
-          <tr>
-            <td>javacDebugInfo</td>
-
-            <td>Sets the value for the attribute "debug" in calls to the <a
-            target="extra" href=
-            "http://ant.apache.org/manual/CoreTasks/javac.html">Ant
-            &lt;javac&gt; task</a> in a plug-in's build.xml. Determines if
-            debug info is included in the output jars. Set to on in template
-            build.properties.</td>
-          </tr>
-
-          <tr>
-            <td>javacFailOnError</td>
-
-            <td>Sets the value for the attribute "failonerror" in calls to the
-            <a target="extra" href=
-            "http://ant.apache.org/manual/CoreTasks/javac.html">Ant
-            &lt;javac&gt; task</a> in a plug-in's build.xml. Build will
-            continue even if there are compilation errors when this is set to
-            false.</td>
-          </tr>
-
-          <tr>
-            <td>javacSource</td>
-
-            <td>Sets the value for the attribute "source" in calls to the <a
-            target="extra" href=
-            "http://ant.apache.org/manual/CoreTasks/javac.html">Ant
-            &lt;javac&gt; task</a> in a plug-in's build.xml. Sets the value of
-            the -source command line switch for javac version 1.4. Used when
-            compiling the jars for the plug-ins. Default set to 1.3 in
-            generated build.xml for plug-ins and fragments.</td>
-          </tr>
-
-          <tr>
-            <td>javacTarget</td>
-
-            <td>Sets the value for the attribute "target" in calls to the <a
-            target="extra" href=
-            "http://ant.apache.org/manual/CoreTasks/javac.html">Ant
-            &lt;javac&gt; task</a> in a plug-in's build.xml. Sets the value of
-            the -target command line switch for javac. Used when compiling the
-            jars for the plug-ins. Default set to 1.1 in generated build.xml
-            for plug-ins and fragments.</td>
-          </tr>
-
-          <tr>
-            <td>javacVerbose</td>
-
-            <td>Sets the value for the attribute "verbose" in calls to the <a
-            target="extra" href=
-            "http://ant.apache.org/manual/CoreTasks/javac.html">Ant
-            &lt;javac&gt; task</a> in a plug-in's build.xml. Asks the compiler
-            for verbose output. Default set to true.</td>
-          </tr>
-
-          <tr>
-            <td>misc</td>
-
-            <td>zipargs</td>
-
-            <td>Arguments to send to the zip executable. Setting it to -y on
-            Linux preserves symbolic links.</td>
-          </tr>
-        </tbody>
-      </table>
-
-      <div class="figure-caption">
-        <span class="figure-number">Fig 5</span>. build.properties
-      </div>
-    </div>
-    <br>
-     <br>
-     
-
-    <div class="figure">
-      <img src="buildInteractionDiagram.png"> 
-
-      <div class="figure-caption">
-        <span class="figure-number">Fig 6</span>. Script interaction for the
-        build process<br>
-      </div>
-    </div>
-
-    <h4>PreBuild and Fetch phase</h4>
-
-    <p>Fig. 7 gives an overview of the main activities and the files created
-    from these activities for the complete build process. The getMapFiles and
-    concatenate activities are part of the PreBuild phase; fetch and getFromCVS
-    are part of the Fetch phase.</p>
-
-    <p>The most important task in the PreBuild phase is to retrieve map files,
-    which is implemented in the getMapFiles target in customTargets.xml.
-    Usually the getMapFiles target consists of a CVS command to fetch the map
-    files. A map file is a java property file which contains mappings of
-    elements to their CVS locations and access methods. It consists of one map
-    file entry for each feature being built, its &lt;plugin&gt; elements, and
-    its &lt;includes&gt; elements (i.e. nested features and their plug-ins).
-    Adding a plug-in or fragment to a feature therefore requires updating the
-    map files with the new element.</p>
-
-    <p>Map file entries use the following format:</p>
-<pre>
-feature|fragment|plugin@elementId=&lt;cvs tag&gt;,&lt;access method&gt;:&lt;cvsuser&gt;@&lt;cvs repository&gt;,&lt;cvs password&gt;[,&lt;repository path&gt; (no starting slash) ]
-</pre>
-
-    <p>The &lt;repository path&gt; is only required when the module (or
-    directory) containing the source for the element does not match the
-    elementId or if the directory is not at the root of the repository. Because
-    all the map files are concatenated into a single file called Directory.txt
-    after getMapFiles has finished, the format of directory.txt described in <a
-    href="#pdeHelpGenCommandLine">[4]</a> applies also to the format of a map
-    file.</p>
-
-    <p>The fetch phase starts with the creation of an ant script called
-    retrieve.xml, which contains a build target for fetching the feature.xml.
-    Then this target will be executed and the information about the provided
-    plug-ins of the feature is read in. For every provided plug-in a
-    corresponding build target will be added to the fetch build script. Both
-    files (retrieve.xml and feature.xml) are only temporary. They will be
-    deleted after the fetch build script has been generated.</p>
-
-    <p>The fetch build script is named fetch_&lt;element_id&gt;.xml, where
-    &lt;element_id&gt; is substituted with the feature id read from the
-    feature.xml file (not the property "id" given in customTargets.xml).
-    Running the default target "fetch" of this build script calls the target
-    getFromCVS for the feature itself and all included plug-ins. The sources of
-    the plugins are not fetched again in the case of an existing plugin.xml.
-    So, if you run the full build twice in the same directory, the sources for
-    the plug-ins are not fetched twice. But you need to have a working CVS
-    connection nonetheless, because the retrieve.xml file is created and
-    executed in any case. Therefore you would end up with an incomplete
-    fetch_&lt;element_id&gt;.xml file if you run the fetch phase and did not
-    have CVS connection.</p>
-    <br>
-     <br>
-     
-
-    <div class="figure">
-      <img src="fetchProcessActivity.png" height="780" width="464"> 
-
-      <div class="figure-caption">
-        <span class="figure-number">Fig 7</span>. File flow of the build
-        process
-      </div>
-    </div>
-
-    <h4>Generate Phase</h4>
-
-    <p>After the feature and plug-ins have been copied to the build target
-    directory, the build scripts are generated in the same way as they would be
-    with the PDE GUI (see above). The created files are:</p>
-
-    <ul>
-      <li>a build file in every plug-in directory (unless custom build files
-      are used)</li>
-
-      <li>a build file in the feature directory</li>
-
-      <li>assemble_&lt;element_id&gt;.all.xml and
-      assemble_&lt;element_id&gt;.all.xml</li>
-    </ul>
-
-    <h4>Process and Assemble Phase</h4>
-
-    <p>At this point of the build process the build files are in place and the
-    compilation is started from a call to processElement in genericTargets.xml.
-    This in turn calls the target build.jars in the build.xml file in the
-    feature directory. There the compilation starts and the warning and error
-    messages of the java compiler are collected separately for each jar file.
-    The files are named &lt;jarFileName&gt;.bin.log and reside in a
-    subdirectory "temp.folder". Later these files are gathered and copied to
-    the build output directory.</p>
-
-    <p>The assembly is started from the assembleElement target in
-    genericTargets.xml which then calls a target named assemble.${id} in
-    customTargets.xml. This gives the chance to do some work before or after
-    the assembly, but the main part of the work can just be delegated to the
-    assemble.${id}.all.xml in the build target directory.</p>
-
-    <p>The assemble script copies all the build results to a temporary
-    subdirectory in the build target directory and finally zips them up. The
-    files being collected are feature manifest files (feature.xml), plug-in
-    manifest files (plugin.xml) and the built jar files. The inclusion of
-    arbitrary files can be specified with the bin.includes property of the
-    plug-in's build.properties file <a href=
-    "#pdeHelpBuildProperties">([1]</a>).</p>
-
-    <h4>PostBuild Phase</h4>
-
-    <p>This is a build hook which is empty per default and allows performing
-    actions with the build output. We will use this later for test
-    automation.</p>
-
-    <blockquote>
-      <p><img src="../images/tip.gif" height="13" width="62"> After
-      modifications to the build files you can save time if you run only a
-      particular phase of the build process. E.g. if you changed a property
-      which only affects the process phase, you can run this phase alone by
-      appending process to the -buildfile argument in the command line:</p>
-<pre>
-java org.eclipse.core.launcher.Main -application org.eclipse.ant.core.antRunner -buildfile %buildfile% process
-</pre>
-    </blockquote>
-
-    <h3>How to build your Plug-In</h3>
-
-    <p>Now we have built sdk.examples headless and have an overview of the
-    build process. Build automation for your plug-in is not far away anymore
-    with one constraint: you need to provide a feature project if you want to
-    fully leverage the headless build as you have seen it for sdk.examples. So,
-    if you don't have a feature project created yet, now is the time. With the
-    IDE you can create a feature project with
-    File-&gt;New-&gt;Project...-&gt;Plug-in Development-&gt;Feature Project. In
-    the wizard which opens enter a feature name and then select all the
-    plug-ins you want to include in your build. If you do not want to deploy
-    your plug-in(s) as a feature, you can configure the feature project so that
-    it is only be used to drive the build process but will not be included in
-    the deliverable. Therefore just remove the bin.includes property from the
-    build.properties file of the feature project.</p>
-
-    <p>Using the feature there need to be 4 files defined in order to provide a
-    one step build:</p>
-
-    <ul>
-      <li>a map file for fetching the sources</li>
-
-      <li>customTargets.xml</li>
-
-      <li>build.properties</li>
-
-      <li>a shell script, which starts an Eclipse instance as AntRunner</li>
-    </ul>
-
-    <p>Fig. 8 shows a part of the map file for RDT. The CVS method used is ext,
-    which allows to configure access parameters like user name, password or SSH
-    proxy locally. In the case that pserver should be used, the getMapFiles
-    target of customTargets.xml replaces ext with pserver.</p>
-
-    <div class="figure" style="text-align: left;">
-<pre>
- feature@org.rubypeople.rdt=HEAD,:ext:cvs.sf.net:/cvsroot/rubyeclipse,,org.rubypeople.rdt-feature
- plugin@org.kxml2=HEAD,:ext:cvs.sf.net:/cvsroot/rubyeclipse,
- plugin@org.rubypeople.rdt=HEAD,:ext:cvs.sf.net:/cvsroot/rubyeclipse,
- plugin@org.rubypeople.rdt.core=HEAD,:ext:cvs.sf.net:/cvsroot/rubyeclipse,
-</pre>
-
-      <div class="figure-caption">
-        <span class="figure-number">Fig 8</span>. A section from rdt.map
-      </div>
-    </div>
-
-    <p>As seen above customTargets.xml is the build file which provides hooks
-    to customize the build process. A template for customTargets.xml can be
-    found in <a href="#pdeScripts">[9]</a>. Fig. 9 shows the parts of the
-    customTargets.xml file which have to be modified as a minimum for the build
-    process:</p>
-
-    <ol>
-      <li>Define the Feature to be built in the allElements target. The given
-      id is not the Feature id as defined in the feature manifest but only an
-      identifier for the lookup in the map file.</li>
-
-      <li>Retrieve map files in the getMapFiles target. Usually the map files
-      are fetched from CVS and copied to the maps subdirectory of
-      ${buildDirectory}.</li>
-
-      <li>Provide a target called assemble.&lt;id&gt;. This can just delegate
-      to the assemble script which has been created in the generate phase of
-      the build process.</li>
-    </ol>
-
-    <div class="figure">
-      <div style="text-align: left;">
-<pre>
-&lt;target name="allElements"&gt;
-  &lt;ant antfile="${genericTargets}" target="${target}" &gt;
- &lt;property name="type" value="feature" /&gt;
-  &lt;property name="id" value="org.rubypeople.rdt" /&gt;
- &lt;/ant&gt;
-&lt;/target&gt;
-&lt;target name="getMapFiles"&gt;
-    &lt;property name="cvsRoot" value=":ext:cvs.sf.net:/cvsroot/rubyeclipse" /&gt;
-  &lt;cvs cvsroot="${cvsRoot}"
-    dest="${buildDirectory}/maps"
-   command="export -r ${mapVersionTag} org.rubypeople.rdt.build/map"/&gt;
-&lt;/target&gt;
-&lt;target name="assemble.org.rubypeople.rdt"&gt;
-  &lt;ant antfile="${assembleScriptName}" dir="${buildDirectory}"&gt;
- &lt;property name="zipargs" value="" /&gt;
-  &lt;/ant&gt;
-&lt;/target&gt;
-</pre>
-      </div>
-
-      <div class="figure-caption">
-        <span class="figure-number">Fig 9</span>. Mandatory changes in
-        customTargets.xml
-      </div>
-    </div>
-
-    <h4>Build RDT as example</h4>
-
-    <p>All the files which configure the headless build for RDT can be found in
-    <a href="#buildBootstrapFilesRdt">[10]</a>. In order to build RDT, you must
-    have an Eclipse 3.0.x installation, CVS installed and CVS access to the
-    internet (firewall!). The sources will be fetched from cvs.sf.net, which
-    provides anonymous access.</p>
-
-    <p>First we need to get the bootstrap for the headless build:</p>
-<pre>
-cvs -d :pserver:anonymous@cvs.sf.net:/cvsroot/rubyeclipse export -r R0_5_0 org.rubypeople.rdt.build/bootstrap
-</pre>
-
-    <p>After a successful retrieval you will find the following files: README,
-    run.bat, run.sh, customTargets.xml and build.properties. The map file
-    defines to fetch the HEAD version of all plug-ins. In order to get stable
-    sources, the property fetchTag is set in build.properties and overwrites
-    the settings from the map file. See <a href="#pdeScripts">[9]</a> for a
-    description of the build file options. Now change the variables in the run
-    script (run.bat on windows or run.sh on UNIX) so that they reflect your PCs
-    environment.</p>
-
-    <ul>
-      <li>Adapt eclipseDir and pdeBuildPluginVersion to the Eclipse
-      installation you want to use for the build</li>
-
-      <li>Set the buildDirectory&nbsp;</li>
-
-      <li>The variable docbook.root can be commented out</li>
-
-      <li>The variable pluginAutomaticBuildDir must be set to the absolute path
-      of the bootstrap directory</li>
-
-      <li>If java 1.4.x is not available on the classpath, vm must be set to
-      the location of a java 1.4.x executable.&nbsp;</li>
-    </ul>
-
-    <p>Now the execution of the run script should build RDT. If it does not,
-    test your skills in handling the lengthy Ant stack traces.</p>
-
-    <blockquote>
-      <p><img src="../images/tip.gif" height="13" width="62">The
-      build.properties file which is provided as template in <a href=
-      "#pdeScripts">[9]</a> builds a result zip file which contains paths with
-      "eclipse" prefix, e.g. "eclipse/feature/...". This is inconvenient if the
-      zip file should be extracted into a renamed Eclipse installation
-      directory, e.g. eclipse-3.0.2. Therefore the archive path names should be
-      relative to the eclipse installation directory, which can be achieved by
-      setting the properties collectingFolder and archivePrefix to ".".</p>
-    </blockquote>
-
-    <h4>Debug the Build Process</h4>
-
-    <p>If you reach a point where the error messages during the build are more
-    confusing than helpful, you can debug the build run. A first measure to
-    take is to set the AntRunner to verbose mode: add a "-verbose" behind the
-    AntRunner argument in the java command line. This gives detailed
-    information about which Ant targets are executed. It is particularly useful
-    for debugging problems with accessing CVS. If that does not help, the build
-    run itself can be debugged. Instead of starting the build host from a shell
-    script (.sh or .bat) you can start the build host from the Eclipse IDE with
-    a Run Configuration. The custom Ant Tasks which PDE provides reside in the
-    org.eclipse.pde.build plug-in project and set breakpoints or catch
-    exceptions. Here is a step-by-step guide on how to set up an AntRunner
-    Run-time Workbench:</p>
-
-    <ol>
-      <li>Start Eclipse and switch to an empty workspace</li>
-
-      <li>File&gt;Import, External plug-ins and Fragments</li>
-
-      <li>Select "Projects with source folders"</li>
-
-      <li>Add all plug-ins with org.eclipse.pde.*</li>
-
-      <li>
-        Create a Run-time Workbench run configuration (Run-&gt;Run..., Run-time
-        Workbench) 
-
-        <ol>
-          <li>Choose "org.eclipse.ant.core.antRunner" as "Run an
-          application"</li>
-
-          <li>
-            Add Program Arguments: 
-
-            <ol>
-              <li>-Dbuilder=$builder, where $builder is the directory where
-              your customTargets.xml is located</li>
-
-              <li>-DbaseLocation=$baseLocation, where $baseLocation is the
-              directory of your Eclipse installation (see above)</li>
-            </ol>
-          </li>
-        </ol>
-      </li>
-
-      <li>Add a breakpoint, e.g. in the method "generate" in
-      org.eclipse.pde.build/src-pdebuild/org.eclipse.pde.internal.build.FetchScriptGenerator</li>
-
-      <li>Start the debug session</li>
-    </ol>
-
-    <div class="figure">
-      <img style="width: 794px; height: 605px;" alt=
-      "Run Configuration for building sdk.examples" src=
-      "buildRunConfiguration.png"><br>
-       
-
-      <div class="figure-caption">
-        <span class="figure-number">Fig 10</span>. Run configuration for
-        building sdk.examples<br>
-      </div>
-    </div>
-
-    <p>Fig. 10 shows the Run configuration dialog for building sdk.examples,
-    which we have built from command line above. The full Program Arguments
-    are:</p>
-<pre>
--buildfile "D:\build\org.eclipse.releng.eclipsebuilder\build.xml" -Dcomponent=sdk.examples -Dconfigs="*,*,*"
--Dbaseos=win32 -Dbasews=win32 -Dbasearch=x86 -Djavacfailonerror=true
--Dpde.build.scripts=D:/eclipse/eclipse-3.0.2/plugins/org.eclipse.pde.build_3.0.1/scripts -DbaseLocation=D:\eclipse\eclipse-3.0.2
-</pre>
-
-    <p>Note the location of the build workspace. The log file in
-    D:\build\build-workspace\.metadata\.log often provides useful information
-    if a build fails.</p>
-
-    <h4>Include sources</h4>
-
-    <p>Unfortunately the headless build does not support all of the settings as
-    they are provided by the Feature Export Dialog (Fig. 3). For example, the
-    inclusion of source jar files is not possible. This lack can be
-    circumvented by using a source feature or plug-in. Building a source
-    feature is quite convenient and needs only two entries to be added:</p>
-
-    <ol>
-      <li>
-        Add a Line to build.properties of your feature project: 
-<pre>
-generate.feature@org.rubypeople.rdt.source=org.rubypeople.rdt
-</pre>
-      </li>
-
-      <li>
-        Add an xml element to feature.xml: 
-<pre>
-&lt;includes id="org.rubypeople.rdt.source" version="0.0.0"/&gt;
-</pre>
-        If the version is set to 0.0.0, the version of the containing plug-in
-        will be used.
-      </li>
-    </ol>
-
-    <p>Further customization of the source feature generation can be achieved
-    by creating the subdirectories "sourceTemplatePlugin" and
-    "sourceTemplateFeature" in your feature project. These directories should
-    contain the files that are included in the root of the generated source
-    feature and plug-in. The feature.xml and plugin.xml files are not required
-    since these are generated. A build.properties is required in the
-    sourceTemplatePlugin directory. This should contain a "bin.includes"
-    setting as well as the entry "sourcePlugin = true". The plugin.xml file and
-    src/ directory should be listed in bin.includes.</p>
-
-    <blockquote>
-      <p><img src="../images/tip.gif" height="13" width="62"> If there is an
-      includes tag in feature.xml, building with the Export... button from the
-      Feature Manifest Editor fails (<a href=
-      "#generateSourceFeatureBug">[16]</a>). As a workaround the feature.xml of
-      the RDT project contains only an xml comment. The comment will be
-      replaced with the includes tag in the postFetch target in
-      customTargets.xml. The generate.feature property must be treated in a
-      similar way.</p>
-    </blockquote>
-
-    <h4>Build for Update Site</h4>
-
-    <p>If you want to build files for an update site customTargets.xml can be
-    modified to call the build.update.jar target of the feature build file. The
-    results can then be copied to the update site location. Fig. 11 shows the
-    changes in customTargets.xml, following the idea in <a href=
-    "#discussionUpdateSiteBuild">[11]</a>.</p>
-
-    <div class="figure">
-      <div style="text-align: left;">
-<pre>
-&lt;target name="postBuild"&gt;
-  &lt;property name="UpdateSiteStagingLocation" value="${buildDirectory}/updateSite"/&gt;
-  &lt;property name="sitePackagePrefix" value="org.rubypeople.updatesite"/&gt;
-  &lt;antcall target="generateUpdateSite"/&gt;
-&lt;/target&gt;
-&lt;target name="generateUpdateSite"&gt;
-  &lt;!-- Create the directory structure --&gt;
-  &lt;mkdir dir="${UpdateSiteStagingLocation}"/&gt;
-  &lt;mkdir dir="${UpdateSiteStagingLocation}/features"/&gt;
-  &lt;mkdir dir="${UpdateSiteStagingLocation}/plugins"/&gt;
-  &lt;!-- Build the jar files --&gt;
-  &lt;antcall target="allElements"&gt;
-    &lt;param name="genericTargets" value="${builder}/customTargets.xml"/&gt;
-    &lt;param name="target" value="updateSiteExport"/&gt;
-  &lt;/antcall&gt;
-  &lt;antcall target="copySiteXmlFromCvs"/&gt;
-  &lt;antcall target="createNightlyBuildSiteXml"/&gt;
-&lt;/target&gt;
-&lt;target name="updateSiteExport"&gt;
-  &lt;ant antfile="build.xml" dir="${buildDirectory}/features/${id}/" target="build.update.jar"&gt;
-    &lt;property name="feature.destination" value="${UpdateSiteStagingLocation}/features"/&gt;
-    &lt;property name="plugin.destination" value="${UpdateSiteStagingLocation}/plugins"/&gt;
-  &lt;/ant&gt;
-&lt;/target&gt;
-&lt;target name="copySiteXmlFromCvs" unless="isNightlyBuild"&gt;
-  &lt;!-- connect to CVS and fetch site.xml, copy to ${UpdateSiteStagingLocation}/site.xml afterwards --&gt;
-&lt;/target&gt;
-&lt;target name="createNightlyBuildSiteXml" if="isNightlyBuild"&gt;
-  &lt;!-- create ${UpdateSiteStagingLocation}/site.xml which contains only the nighlty build version --&gt;
-&lt;/target&gt;
-</pre>
-      </div>
-
-      <div class="figure-caption">
-        <span class="figure-number">Fig 11</span>. Building for update site
-      </div>
-    </div>
-
-    <h2>Part 2 - Automated Tests</h2>
-
-    <p>After the deliverable has been created the wish may arise to deploy it
-    and to run a test suite with unit and integration tests. The reasons to do
-    this automatically as well and present the results along with the
-    deliverable are manifold:</p>
-
-    <ul>
-      <li>find integration errors, run the tests in different
-      configurations</li>
-
-      <li>give a hint on the quality of the code, particularly useful for
-      nightly builds</li>
-
-      <li>run the tests in a defined environment as opposed to the workbench of
-      the developer</li>
-    </ul>
-
-    <p>Fortunately, Eclipse provides a framework for test automation, which can
-    also be leveraged for test automation of arbitrary Eclipse features. The
-    test results of every Eclipse build are publicly available in the Eclipse
-    download directories; see <a href="#discussionUpdateSiteBuild">13</a> for
-    the test results of the 3.0.2 build.</p>
-
-    <h3>Eclipse Test Framework</h3>
-
-    <p>For running the tests on your PC, get the
-    eclipse-Automated-Tests-&lt;version&gt;.zip, which contains a zip file with
-    the unit tests (eclipse-junit-tests-&lt;version&gt;.zip), shell scripts,
-    build files and documentation. The steps for running the tests are
-    described in the file testFramework.html (<a href="#testFramework">14</a>).
-    Basically the shell script runtests starts up a new AntRunner Eclipse
-    instance which executes one of the targets of the test.xml build file.
-    Therefore an eclipse installation must exist in the eclipse subdirectory,
-    which is called the build host in the following. If there is no build host
-    installation, the script tries to unzip an SDK zip which it assumes to be
-    the same directory. In addition to that the script extracts the
-    org.eclipse.test plug-in from the eclipse-junit-tests-&lt;version&gt;.zip
-    into the build host installation.<br>
-    <br>
-     In order to run the some of the tests of the JDT, the following steps are
-    necessary:</p>
-
-    <ol>
-      <li>Download eclipse-Automated-Tests-3.0.2.zip (<a href=
-      "#eclipseAutomatedTests">15</a>) and unzip to
-      $ECLIPSE_AUTOMATED_TESTS</li>
-
-      <li>Copy eclipse-SDK-3.0.2 to $ECLIPSE_AUTOMATED_TESTS</li>
-
-      <li>cd to $ECLIPSE_AUTOMATED_TESTS and type "runtests.bat jdtui"</li>
-    </ol>
-
-    <p>The last step executes the non-interactive UI tests for the JDT (there
-    are also interactive UI Tests which require the interaction of a test
-    person to assure the layout and interactive behaviour of dialogs for
-    example). Although the tests are non-interactive you will watch a workbench
-    come up and during the execution of the test suite you can witness projects
-    being created and closed, editors being opened and so on. After the test
-    run has finished, the test results will be placed in
-    $ECLIPSE_AUTOMATED_TESTS/results in html and xml format.<br>
-    <br>
-     While the tests run, we can have look behind the scenes. Fig. 12 lists the
-    build files for test automation; Fig. 13 shows the interaction between
-    them. At first the runtests script creates the build host and launches an
-    Eclipse instance as AntRunner. The AntRunner executes the jdt target of
-    test.xml. During the process another eclipse-installation will take place
-    in $ECLIPSE_AUTOMATED_TESTS/test-eclipse, called the test host in the
-    following. The test host also consists of the provided SDK and the full
-    content of eclipse-junit-tests-3.0.2.zip. A test host instance is then
-    launched, with the application type org.eclipse.test.uitestapplication
-    (target uitest in library.xml, see below). The class name of the test suite
-    is passed to the uitestapplication. After the test suite has completed, the
-    test results can be found in $ECLIPSE_AUTOMATED_TESTS/results.</p>
-
-    <div class="figure">
-      <center style="margin-bottom: 1em;">
-        <table class="contentTable" cellspacing="2">
-          <tbody>
-            <tr>
-              <th>file name</th>
-
-              <th>location</th>
-
-              <th>description</th>
-            </tr>
-
-            <tr>
-              <td><b>test.xml</b></td>
-
-              <td>unzip location of eclipse-Automated-Tests.zip</td>
-
-              <td>This script provides the entry point for testing, the
-              runtests target</td>
-            </tr>
-
-            <tr>
-              <td><b>test.xml</b></td>
-
-              <td>plug-in directory of the test suite to be run</td>
-
-              <td>Must provide a run target. Main purpose is to set properties
-              and delegate to the ui-test target in library.xml. After the
-              tests have run the collect target in library is called to create
-              the result files. A skeleton can be found in <a href=
-              "#testFramework">14.</a> </td>
-            </tr>
-
-            <tr>
-              <td><b>library.xml</b></td>
-
-              <td>plugins/org.eclipse.test, delivered in
-              eclipse-junit-tests-&lt;version&gt;.zip, which itself is part of
-              eclipse-Automated-Tests-&lt;version&gt;.zip</td>
-
-              <td>This build script contains the eclipse-test target which
-              launches a new eclipse instance within which the tests will be
-              executed. Tests can be run with or without UI.</td>
-            </tr>
-          </tbody>
-        </table>
-      </center>
-
-      <div class="figure-caption">
-        <span class="figure-number">Fig 12</span>. Files for controlling the
-        test process
-      </div>
-    </div>
-    <br>
-     <br>
-     <br>
-     
-
-    <div class="figure">
-      <img style="width: 861px; height: 554px;" alt=
-      "Interaction Diagram for the test process" src=
-      "runTestsInteractionDiagram.png"><br>
-       
-
-      <div class="figure-caption">
-        <span class="figure-number">Fig 13</span>. Script interaction for the
-        test process
-      </div>
-    </div>
-
-    <h3>Automate Tests for your Plug-In</h3>
-
-    <p>Now it is time to think about the effort to automate the tests for your
-    plug-in. At the time I automated the tests for RDT, the tests resided in
-    extra plug-ins and there was an AllTests suite, which gathered all the
-    tests. With these preconditions, there were 3 steps on the road to test
-    automation:</p>
-
-    <ul>
-      <li>Build a deployable which includes the tests</li>
-
-      <li>Add a test.xml file in the plug-in, which contains the AllTests
-      suite</li>
-
-      <li>Add post-build behavior in customTargets.xml</li>
-    </ul>
-
-    <h4>Build a deployable which includes the tests</h4>
-
-    <p>Because the deliverable for your plug-in (the zip file or update site
-    files) should not contain the tests, another zip file for the tests must be
-    created, called test deliverable in the following. If you followed the
-    pattern of the Eclipse plug-ins and created a tests plug-in project for
-    each of your plug-ins, this can easily be achieved. If there is more than
-    one test plug-in project, a test feature can be created to bundle them.
-    Therefore you can add a feature project. Alternatively, if you want to keep
-    the number of projects small and do not have the need to create the feature
-    interactively from the feature manifest file, you can add a subdirectory to
-    the existing feature project. The map file can then be used to customize
-    the fetch process to create a feature directory with the content of the
-    subdirectory. An example is given in the first line of Fig. 14.</p>
-
-    <div class="fileContent">
-      feature@org.rubypeople.rdt-tests=HEAD,:ext:cvs.sf.net:/cvsroot/rubyeclipse,,org.rubypeople.rdt-feature/unit-tests-feature<br>
-
-       plugin@org.rubypeople.rdt.ui.tests=HEAD,:ext:cvs.sf.net:/cvsroot/rubyeclipse,<br>
-
-       plugin@org.rubypeople.rdt.debug.core.tests=HEAD,:ext:cvs.sf.net:/cvsroot/rubyeclipse,<br>
-
-       ...<br>
-       
-
-      <div class="figure-caption">
-        <span class="figure-number">Fig 14</span>. Section from rdt.map for
-        test feature
-      </div>
-    </div>
-
-    <p>Building the test deliverable is identical to building the deliverable
-    itself. If you can use the same build properties as for the deliverable,
-    just add an additional entry to the allElements target in
-    customTargets.xml. Fig. 15 shows how the allElements target is adapted for
-    RDT in order to create the deliverable and test deliverable in one
-    step.</p>
-
-    <div class="fileContent">
-<pre>
-&lt;target name="allElements"&gt;&lt;target name="allElements"&gt;
-
-  ...
- 
-  &lt;ant antfile="${genericTargets}" target="${target}" &gt;
-    &lt;property name="type" value="feature" /&gt;
-    &lt;property name="id" value="org.rubypeople.rdt-tests" /&gt;
-  &lt;/ant&gt; 
-&lt;/target&gt;
-&lt;target name="postBuild"&gt; 
-  &lt;antcall target="test"&gt;&lt;/antcall&gt;
-&lt;/target&gt;
-
-&lt;target name="test"&gt;
-  &lt;echo message="Setting up tests in ${eclipseAutomatedTestHome}"/&gt;
-    
-  &lt;copy file="${buildDirectory}/${buildLabel}/org.rubypeople.rdt-${buildId}.zip" tofile="${eclipseAutomatedTestHome}/eclipse-SDK-RDT-${buildId}.zip" /&gt;
-  &lt;copy file="${buildDirectory}/${buildLabel}/org.rubypeople.rdt-tests-${buildId}.zip" tofile="${eclipseAutomatedTestHome}/eclipse-junit-tests-rdt-${buildId}.zip" /&gt;
-
-  &lt;ant antfile="${eclipseAutomatedTestHome}/test.xml" target="runtests" dir="${eclipseAutomatedTestHome}"&gt; 
-    &lt;property name="os" value="${baseos}" /&gt;
-    &lt;property name="ws" value="${basews}" /&gt;
-    &lt;property name="arch" value="${basearch}" /&gt;
-    &lt;property name="testPlugin" value="org.rubypeople.rdt.tests.all_0.5.0" /&gt; 
-    &lt;property name="report" value="org.rubypeople.rdt.tests.all" /&gt; 
-  &lt;/ant&gt; 
-&lt;/target&gt;
-</pre>
-
-      <div class="figure-caption">
-        <span class="figure-number">Fig 15</span>. Targets from
-        customTargets.xml for testing
-      </div>
-    </div>
-
-    <h4>Add a test.xml</h4>
-
-    <p>A test.xml file must exist for every test plug-in you want to run.
-    Because every test run starts up a new eclipse instance, it is convenient
-    to have a plug-in which bundles all the tests into a single AllTests suite.
-    Then there is only one test run and there must only be one test.xml file
-    maintained. A template for such a test.xml file can be found in <a href=
-    "#testFramework">14</a>. Fig. 16 shows important targets of the test.xml
-    for the RDT plug-in containing the AllTests suite. The entry point is the
-    run target, which is called from ${eclipseAutomatedTestHome}/test.xml. Its
-    prerequisites are init, suite and cleanup. The suite target calls ui-test
-    in library.xml with the necessary properties to start up the test host and
-    run TS_RdtAllTests.</p>
-
-    <div class="fileContent">
-<pre>
- &lt;target name="init"&gt;
-    &lt;tstamp/&gt;
-    &lt;delete&gt;
-      &lt;fileset dir="${eclipse-home}" includes="org*.xml"/&gt;
-    &lt;/delete&gt;
-  &lt;/target&gt;
-      
-  &lt;!-- This target defines the tests that need to be run. --&gt;
-  &lt;target name="suite"&gt;
-    &lt;property name="rdt-folder" value="${eclipse-home}/rdt_folder"/&gt;
-    &lt;delete dir="${rdt-tests-workspace}" quiet="true"/&gt;
-    &lt;ant target="ui-test" antfile="${library-file}" dir="${eclipse-home}"&gt;
-      &lt;property name="data-dir" value="${rdt-tests-workspace}"/&gt;
-      &lt;property name="plugin-name" value="${plugin-name}"/&gt;
-      &lt;property name="classname" value="org.rubypeople.rdt.tests.all.TS_RdtAllTests"/&gt;   
-
-      &lt;property name="vmargs" value="-Drdt.rubyInterpreter=&amp;quot;${rdt.rubyInterpreter}&amp;quot;"/&gt;
-
-    &lt;/ant&gt;
-  &lt;/target&gt;
-      
- 
-  &lt;!-- This target holds code to cleanup the testing environment after --&gt;
-  &lt;!-- after all of the tests have been run. You can use this target to --&gt;
-  &lt;!-- delete temporary files that have been created. --&gt;
-  &lt;target name="cleanup"&gt;
-  &lt;/target&gt;
-      
-  &lt;!-- This target runs the test suite. Any actions that need to happen --&gt;
-  &lt;!-- after all the tests have been run should go here. --&gt;
-  &lt;target name="run" depends="init,suite,cleanup"&gt;
-    &lt;ant target="collect" antfile="${library-file}" dir="${eclipse-home}"&gt;
-      &lt;property name="includes" value="org*.xml"/&gt;
-      &lt;property name="output-file" value="${plugin-name}.xml"/&gt;
-    &lt;/ant&gt;
-  &lt;/target&gt;
-</pre>
-
-      <div class="figure-caption">
-        <span class="figure-number">Fig 16</span>. Important targets of
-        org.rubypeople.rdt.tests.all/test.xml<br>
-      </div>
-    </div>
-
-    <h4>Add post-build behavior in customTargets.xml</h4>
-
-    <p>Fig. 15 shows the test target of customTargets.xml, which is executed in
-    the PostBuild phase of the build process. The property
-    eclipseAutomatedTestHome is set to the directory into which
-    eclipse-Automated-Tests-&lt;version&gt;.zip has been extracted. The first
-    step in the test target is to copy the two deliverables into this
-    directory, following a naming schema which is given in
-    ${eclipseAutomatedTestHome}/test.xml. By using these names, the runtests
-    target of test.xml extracts the deliverables into the test host
-    installation (in ${eclipseAutomatedTestHome}/test-eclipse/eclipse). The
-    second step is to call the runtests target of
-    ${eclipseAutomatedTestHome}/test.xml. The property testPlugin defines which
-    tests to run and the report property defines the name of the generated
-    report.</p>
-
-    <p>Compared to the example above, where we ran the tests jdt ui, there is
-    no need to create the build host in $ECLIPSE_AUTOMATED_TESTS/eclipse,
-    because the target runtests in test.xml is directly called from the
-    postbuild target in customTargets.xml. So the build host for the automatic
-    build is reused as build host for the automatic tests. Fig. 17 shows the
-    difference compared to Fig. 13.</p>
-
-    <div class="figure">
-      <img alt="Interaction Diagram for the test process" src=
-      "runTestsRdtInteractionDiagram.png"><br>
-       
-
-      <div class="figure-caption">
-        <span class="figure-number">Fig 17</span>. Script interaction for the
-        test process<br>
-      </div>
-    </div>
-
-    <blockquote>
-      <p><img src="../images/tip.gif" height="13" width="62">PDE JUnit tests
-      open up a workbench window. If you run your tests on a remote *nix box,
-      you can use Xvfb (X virtual frame buffer) to provide a dummy environment
-      for displaying windows.</p>
-    </blockquote>
-
-    <h4>Run the RDT tests</h4>
-
-    <p>If you want to run the RDT tests, follow the instructions above for
-    building RDT and set the following additional properties in run.bat or
-    run.sh:</p>
-
-    <ul>
-      <li>unset dontRunTests</li>
-
-      <li>set eclipseAutomatedTestHome to the directory into which you
-      extracted eclipse-Automated-Tests-3.0.2.zip</li>
-
-      <li>unset rubyInterpreter if you don't have ruby installed (which will
-      result in failed tests)</li>
-    </ul>
-
-    <p>After you call run.bat or run.sh the tests will be executed in the
-    postBuild phase. If you want to run the tests separately, you can insert
-    the build target after the -build property in the antRunner command
-    line:</p>
-<pre>
-%vm% -cp %eclipseDir%\startup.jar ... org.eclipse.core.launcher.Main -application org.eclipse.ant.core.antRunner -buildfile %buildfile% postBuild -data ...
-</pre>
-
-    <h1>Conclusion</h1>
-
-    <p>Hopefully this article could help you in setting up project automation
-    for your Eclipse plug-in project. It has shown the automation mechanisms
-    used in building Eclipse itself and how they are leveraged to build and
-    test arbitrary plug-ins automatically with a single command. Further
-    project automation can be achieved from the inside or from the outside:
-    From the inside by using the hooks provided in the build files for
-    activities like enhanced reporting. From the outside by calling the build
-    command as part of a broader build process from tools like CruiseControl or
-    Maven.<br>
-     For the discussion of questions about this article and experiences with
-    Eclipse build and test automation in general, I'd like to invite you to the
-    RDT developer wiki [<a href="#feedbackPage">17</a>] or to e-mail me [<a
-    href="#mbarchfeContact">18]</a>.</p>
-
-    <h1>Acknowledgments</h1>
-
-    <p>I would like to thank Sonia Dimitrov and Pascal Rapicault for their
-    article draft, which I have weaved into this article. Many thanks also to
-    Pat McCarthy for his valuable comments.</p>
-
-    <h3>Reference</h3>
-
-    <table>
-      <tbody>
-        <tr>
-          <td valign="top"><a name="pdeHelpBuildProperties">[1]</a> </td>
-
-          <td><a href=
-          "http://help.eclipse.org/help30/topic/org.eclipse.pde.doc.user/guide/pde_feature_generating_build.htm"
-           class="referenceLink">PDE Help on build.properties</a>, Eclipse 3.0
-          Help</td>
-        </tr>
-
-        <tr>
-          <td valign="top"><a name="pdeHelpGenAnt">[2]</a> </td>
-
-          <td><a href=
-          "http://help.eclipse.org/help30/topic/org.eclipse.pde.doc.user/guide/pde_feature_generating_ant.htm"
-           class="referenceLink">PDE Help on Generating Build Files</a>,
-          Eclipse 3.0 Help</td>
-        </tr>
-
-        <tr>
-          <td valign="top"><a name="bugsHeadlessInvokation">[3]</a> </td>
-
-          <td><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=65146"
-          class="referenceLink">Generated feature build scripts and headless
-          invokation</a> , Eclipse Bugs</td>
-        </tr>
-
-        <tr>
-          <td valign="top"><a name="pdeHelpGenCommandLine">[4]</a> </td>
-
-          <td><a href=
-          "http://help.eclipse.org/help30/index.jsp?topic=/org.eclipse.pde.doc.user/guide/pde_feature_generating_antcommandline.htm"
-           class="referenceLink">PDE Help on headless build</a> , Eclipse 3.0
-          Help</td>
-        </tr>
-
-        <tr>
-          <td valign="top"><a name="eclipsExamples">[5]</a> </td>
-
-          <td><a href=
-          "http://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops/R-3.0-200406251208/eclipse-examples-3.0-win32.zip"
-           class="referenceLink">eclipse-examples-3.0-win32.zip</a> , Eclipse
-          Download Area</td>
-        </tr>
-
-        <tr>
-          <td valign="top"><a name="eclipsebuilderReadme">[6]</a> </td>
-
-          <td><a href=
-          "http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.releng.eclipsebuilder/readme.html?rev=1.24"
-           class=
-          "referenceLink">org.eclipse.releng.eclipsebuilder/readme.html</a> ,
-          Eclipse CVS</td>
-        </tr>
-
-        <tr>
-          <td valign="top"><a name="sdkExamplesBuildFiles">[7]</a> </td>
-
-          <td><a href=
-          "http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.releng.eclipsebuilder/sdk.examples"
-           class=
-          "referenceLink">org.eclipse.releng.eclipsebuilder/sdk.examples</a>,
-          Eclipse CVS</td>
-        </tr>
-
-        <tr>
-          <td valign="top"><a name="jdtFeature">[8]</a> </td>
-
-          <td><a href=
-          "http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt-feature/"
-          class="referenceLink">JDT feature</a> , Eclipse CVS</td>
-        </tr>
-
-        <tr>
-          <td valign="top"><a name="pdeScripts">[9]</a> </td>
-
-          <td><a href=
-          "http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.pde.build/scripts"
-           class="referenceLink">org.eclipse.pde.build/scripts</a>, Eclipse
-          CVS</td>
-        </tr>
-
-        <tr>
-          <td valign="top"><a name="buildBootstrapFilesRdt">[10]</a> </td>
-
-          <td><a href=
-          "http://cvs.sourceforge.net/viewcvs.py/rubyeclipse/org.rubypeople.rdt.build/bootstrap/">
-          RDT bootstrap files for headless build</a>, RDT CVS</td>
-        </tr>
-
-        <tr>
-          <td valign="top"><a name="discussionUpdateSiteBuild">[11]</a> </td>
-
-          <td><a href=
-          "http://dev.eclipse.org/newslists/news.eclipse.platform/msg25629.html"
-           class="referenceLink">Way to automatically build for update
-          site?</a> , Eclipse News</td>
-        </tr>
-
-        <tr>
-          <td valign="top"><a name="usingPDEBuild">[12]</a> </td>
-
-          <td><a href=
-          "http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.pde.build/notes/usingPDEBuild.html?rev=1.8"
-           class="referenceLink">Using PDE Build</a>, Eclipse CVS</td>
-        </tr>
-
-        <tr>
-          <td valign="top"><a name="eclipseTestResults">[13]</a> </td>
-
-          <td><a href=
-          "ftp://download.eclipse.org/R-3.0.2-200503110845/testresults" class=
-          "referenceLink">Eclipse Test Results for 3.0.2</a>, Eclipse Download
-          Area</td>
-        </tr>
-
-        <tr>
-          <td valign="top"><a name="testFramework">[14]</a> </td>
-
-          <td><a href=
-          "ftp://download.eclipse.org/R-3.0.2-200503110845/testframework.html"
-          class="referenceLink">testframework.html</a>, Eclipse Download
-          Area</td>
-        </tr>
-
-        <tr>
-          <td valign="top"><a name="eclipseAutomatedTests">[15]</a> </td>
-
-          <td><a href=
-          "http://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops/R-3.0-200406251208/eclipse-Automated-Tests-3.0.zip"
-           class="referenceLink">eclipse-Automated-Tests-3.0.2.zip</a>, Eclipse
-          Download Area</td>
-        </tr>
-
-        <tr>
-          <td valign="top"><a name="generateSourceFeatureBug">[16]</a> </td>
-
-          <td><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=86299"
-          class="referenceLink">generate.feature and building using export
-          button in feature.xml</a> , Eclipse Bugs</td>
-        </tr>
-
-        <tr>
-          <td valign="top"><a name="feedbackPage">[17]</a> </td>
-
-          <td><a href="http://213.203.244.123/wiki/Automatic_Build.wiki.phtml"
-          class="referenceLink">feedback page</a>, RDT developer wiki</td>
-        </tr>
-
-        <tr>
-          <td valign="top"><a name="mbarchfeContact">[18]</a> </td>
-
-          <td><a href="http://sourceforge.net/users/mbarchfe/" class=
-          "referenceLink">contact</a>, user page at sf.net</td>
-        </tr>
-      </tbody>
-    </table>
-
-    <p><small>ref: <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=87151">bug
-    87151</a></small></p>
-
-    <p><small>Java and all Java-based trademarks and logos are trademarks or
-    registered trademarks of Sun Microsystems, Inc. in the United States, other
-    countries, or both.</small></p>
-  </body>
-</html>
-
+<head>
+<title>Build and Test Automation for plug-ins and features</title>
+<meta http-equiv="REFRESH" content="0;url=../article.php?file=Article-PDE-Automation/article.html"></HEAD>
+<BODY>
+Redirecting...
+</BODY>
+</HTML>
\ No newline at end of file
diff --git a/Article-PDE-Automation/info.xml b/Article-PDE-Automation/info.xml
new file mode 100644
index 0000000..a3bcc63
--- /dev/null
+++ b/Article-PDE-Automation/info.xml
@@ -0,0 +1,3 @@
+<article>
+	<outdated/>
+</article>
\ No newline at end of file
