<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
 Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "document-v11.dtd">
<document>

  <header>
    
    <title>Apache Gump&#x2122;</title>
  	<authors>
  	<person name="Sam Ruby" email="rubys@us.ibm.com"/>
  	<person name="Adam R. B. Jack" email="ajack@apache.org"/>
  	</authors>
  </header>

<body>

  <section><title>More on builders</title>

    <p>Apache Gump supports building projects with a wide variety of tools.
    These tools are described using their own elements, all of them
    support a common set of attributes and nested elements.  The
    common structure is described in the next section, followed by
    tool-specific sections later on.</p>
  </section>

  <section><title>Generic Builder</title>
    <p>Specifies the arguments to be passed to all builders</p>

    <table>
      <tr>
        <th>Attribute</th>
        <th>Description</th>
        <th>Required?</th>
      </tr>
      <tr>
        <td>basedir</td>
        <td>The base directory in which the build is executed.  The generated
          build script will make this directory the current working directory
          prior to invoking the real builder.
        </td>
        <td>No. Defaults to <em>project basedir</em>.</td>
      </tr>
      <tr>
        <td>debug (Ant/Maven/NAnt/Gradle/MSBuild only)</td>
        <td>Set to "true" to turn on debugging.</td>
        <td>No</td>
      </tr>
      <tr>
        <td>timeout</td>
        <td>Timeout after which a build is terminated if it doesn't
        complete. Given in seconds</td>
        <td>No. Defaults to 60 minutes.</td>
      </tr>
    </table>
    
    <section><title>property/arg</title>

      <p>Java Property overrides to be passed to the Ant/Maven/Gradle command
      or command line arguments passed to Script/Configure/Make.  The
      Java builders Ant, Maven, MSBuild and Gradle as well as NAnt use &lt;property&gt;
      while Script, Configure and Make use &lt;arg&gt; as the name of
      the nested element.</p>

      <table>
        <tr>
          <th>Attribute</th>
          <th>Description</th>
          <th>Required?</th>
        </tr>
        <tr>
          <td>name</td>
          <td>Name of the property to set.</td>
          <td>Yes</td>
        </tr>
        <tr>
          <td>value</td>
          <td>Desired value</td>
          <td>No</td>
        </tr>
        <tr>
          <td>project</td>
          <td>The name of the referenced project.  Required if the
          reference attribute is "home", "jar", "jarpath", "output",
          "outputpath", or "srcdir".</td>
          <td>No</td>
        </tr>
        <tr>
          <td>reference</td>
          <td>
            One of the following values:<br/>
            <strong>home:</strong> the home directory for the referenced project<br/>
            <strong>output:</strong> the simple name (path relative to home) of the output in a
              referenced project.<br/>

            <strong>jar:</strong> the simple name (path relative to
              home) of the jar in a referenced project.  This is
              similar to outputpath with a outputtype attribute of
              "jar" but also applies to outputs of type "boot" and
              "testsjar".<br/>

            <strong>outputpath:</strong> the fully qualified path of the output in a referenced
              project.<br/>

            <strong>jarpath:</strong> the fully qualified path of the
              jar in a referenced project.  This is similar to
              outputpath with a outputtype attribute of "jar" but also
              applies to outputs of type "boot" and "testsjar".<br/>

            <strong>srcdir:</strong> the srcdir for the module containing the project.<br/>
          </td>
          <td>No</td>
        </tr>
        <tr>
          <td>path</td>
          <td>a path which is to be interpreted relative to the srcdir for the module containing 
          	the project if specified, or this project otherwise.  This option is 
          ignored if reference is specified.</td>
          <td>No</td>
        </tr>
        <tr>
          <td>id</td>
          <td>Specifies which output is desired.  Required only for projects which
          define more than one output of the same type.</td>
          <td>No</td>
        </tr>
        <tr>
          <td>outputtype</td>
          <td>Specifies which type of output is desired.  Required only if the
          reference attribute is "output" or "outputpath".</td>
          <td>No</td>
        </tr>
      </table>
    </section>

    <section><title>depend</title>
      <p>This is equivalent to a property reference="jarpath" as well as a
      dependency element in the enclosing project.  This was introduced as
      that has become a common enough practice that it makes sense to
      introduce this element.</p>

      <p>Depend is only supported by the Java builders Ant, Maven
        (any version) and Gradle.</p>

      <table>
        <tr>
          <th>Attribute</th>
          <th>Description</th>
          <th>Required?</th>
        </tr>
        <tr>
          <td>property</td>
          <td>The name of the property which will receive the full jarpath
          of the specified jar.</td>
          <td>Yes</td>
        </tr>
        <tr>
          <td>project</td>
          <td>The name of the project depended on.</td>
          <td>Yes</td>
        </tr>
        <tr>
          <td>id</td>
          <td>Specifies which jar is desired.  Required only for projects which
          define more than one jar.</td>
          <td>No</td>
        </tr>
        <tr>
          <td>runtime</td>
          <td>Specifies whether this dependency is needed at runtime.
          Choices are "true" and "false" with the default being false.</td>
          <td>No</td>
        </tr>
      </table>
    </section>

    <section><title>jvmarg</title>
      <p>Additional command line parameters to pass to the Java
      Virtual Machine running Ant, Maven (any version) and Gradle.  Doesn't
      have any effect on any of the other builders.</p>

      <table>
        <tr>
          <th>Attribute</th>
          <th>Description</th>
          <th>Required?</th>
        </tr>
        <tr>
          <td>value</td>
          <td>The parameter to pass to the command line.  This will be
            passed verbatim without any additional quotes.</td>
          <td>Yes</td>
        </tr>
      </table>
    </section>

    <section><title>sysproperty</title>
      <p>Java system property to be passed to the Java Virtual Machine.</p>

      <p>Sysproperty is only supported by the Ant and Gradle builders.</p>

      <table>
        <tr>
          <th>Attribute</th>
          <th>Description</th>
          <th>Required?</th>
        </tr>
        <tr>
          <td>name</td>
          <td>Name of the property to set.</td>
          <td>Yes</td>
        </tr>
        <tr>
          <td>value</td>
          <td>Desired value</td>
          <td>No</td>
        </tr>
        <tr>
          <td>project</td>
          <td>The name of the referenced project.  Required if the reference
          attribute is "home", "jar", "jarpath", or "srcdir".</td>
          <td>No</td>
        </tr>
        <tr>
          <td>reference</td>
          <td>
            One of the following values:<br/>
            <strong>home:</strong> the home directory for the referenced project<br/>
            <strong>jar:</strong> the simple name (path relative to home) of the jar in a
              referenced project.<br/>
            <strong>jarpath:</strong> the fully qualified path of the jar in a referenced
              project.<br/>
            <strong>srcdir:</strong> the srcdir for the module containing the project.<br/>
          </td>
          <td>No</td>
        </tr>
        <tr>
          <td>path</td>
          <td>a path which is to be interpreted relative to the srcdir for the module containing 
          	the project if specified, or this project otherwise.  This option is 
          ignored if reference is specified.</td>
          <td>No</td>
        </tr>
        <tr>
          <td>id</td>
          <td>Specifies which jar is desired.  Required only for projects which
          define more than one jar.</td>
          <td>No</td>
        </tr>
      </table>
    </section>

  </section>

  <section><title>ant</title>
    <p>Specifies the arguments to be passed to <fork
    href="https://ant.apache.org/">Apache Ant</fork>.</p>

    <table>
      <tr>
        <th>Attribute</th>
        <th>Description</th>
        <th>Required?</th>
      </tr>
      <tr>
        <td>buildfile</td>
        <td>The ant build file to execute.  Defaults to
        <strong>build.xml</strong>.
        </td>
        <td>No Defaults to <strong>build.xml</strong>.</td>
      </tr>
      <tr>
        <td>target</td>
        <td>The ant target to invoke. <em>This can be a comma
        separated list. Spaces are preserved.</em></td>
        <td>No. Defaults to the default target defined by the build file.</td>
      </tr>
    </table>
  </section>

  <section><title>mvn1</title>
    <p>Specifies the arguments to be passed to <fork
    href="https://maven.apache.org/">Apache Maven 1.x</fork>.</p>
    
    <p>The <fork href="https://maven.apache.org/">Maven 1.x</fork>
    component of Gump (&lt;mvn1&gt;) uses a
    <strong>pre-installed</strong> version of <fork
    href="https://maven.apache.org">Maven</fork>, it does
    <strong>NOT</strong> bootstrap Maven from svn trunk.</p>
    
    <p>Gump generates a <strong>build.properties</strong> file for
    Maven, in which it specifies the jar <link
    href="https://maven.apache.org/reference/user-guide.html#Overriding_Stated_Dependencies">overrides</link>,
    and also any <link href="project.html#property">properties</link>
    that are passes into the &lt;maven&gt; element.</p>
    
    <p>Gump does <strong>not</strong> read the Maven
    project.xml (POM) to attempt to determine dependencies, the Gump
    descriptor needs to have them. The 'gump' goal in Maven ought
    generate such a file.</p>
    
    <p>The element name <strong>maven</strong> can be used as an alias
      for <strong>mvn1</strong>.</p>

    <table>
      <tr>
        <th>Attribute</th>
        <th>Description</th>
        <th>Required?</th>
      </tr>
      <tr>
        <td>goal</td>
        <td>The Maven goal to invoke.  <em>This can be a comma
        separated list. Spaces are preserved.</em></td>
        <td>No. Defaults to <strong>jar</strong>.</td>
      </tr>
    </table>
  </section>

  <section><title>mvn2</title>
    <p>Specifies the arguments to be passed to <fork
    href="https://maven.apache.org/">Apache Maven 2.x</fork>.</p>
    
    <p>The <fork href="https://maven.apache.org/">Maven 2.x</fork>
    component of Gump (&lt;mvn2&gt;) uses a
    <strong>pre-installed</strong> version of <fork
    href="https://maven.apache.org">Maven 2.x</fork>, it does
    <strong>NOT</strong> bootstrap Maven from svn trunk.</p>
    
    <p>
      First of all, all mvn built projects use the same local
      repository for artifacts they've downloaded and this local
      repository is wiped out after each Gump run.  This can be
      overriden on a per build basis, see below.
    </p>

    <p>
      When Gump starts up, it starts a web application on the build
      server that acts as a proxy for mvn repository requests.
      Whenever a project has been built successfully Gump registers
      the created artifacts with this proxy.  When the proxy is asked
      for a jar artifact and a jar with matching group and artifact id
      has been registered, the proxy will completely ignore the
      specified version and serve the Gump built jar file - and
      calculate SHA1 as well as MD5 checksums for them on the fly as
      needed.  Any other request that is unknown to the proxy will be
      passed on to the central mvn repository, in particular the proxy
      will never serve POMs itself.
    </p>  

    <p>
      Technically it is not necessary to declare the dependencies of a
      mvn built project since artifacts will be retrieved from the
      proxy even if Gump doesn't know about the dependency.  This can
      only work if the dependency has already been built, though, so
      it is still better to list all dependencies inside the Gump
      descriptor in order to maintain correct build order.
    </p>

    <p>
      Maven 2.x and some of its plugins will also download jars even if
      the project itself doesn't need them.  It is a good practice to
      watch the log file of the repository proxy and add the jars that
      have been obtained from the central repository as explicit
      dependencies to the projects that have asked for them.
    </p>

    <p>
      Sometimes a project simply cannot depend on another project
      built by Gump since it would cause a dependency cycle.  One such
      example is BCEL, which is needed by Xalan and thus transitively
      by a lot of other projects.  BCEL is built using Maven 2.x and
      uses a plugin that depends on JMock and commons-lang, both of
      which transitively depend on BCEL.  The way around this is to
      allow BCEL to obtain those jars from the central repository (by
      being built first) but make it use a separate local repository
      so that subsequent requests for JMock and commons-lang by other
      projects will use Gump's versions instead of the released ones.
    </p>

    <p>The element name <strong>mvn</strong> can be used as an alias
      for <strong>mvn2</strong>.</p>

    <table>
      <tr>
        <th>Attribute</th>
        <th>Description</th>
        <th>Required?</th>
      </tr>
      <tr>
        <td>goal</td>
        <td>The Maven goal to invoke.  <em>This can be a comma
        separated list. Spaces are preserved.</em></td>
        <td>No. Defaults to <strong>package</strong>.</td>
      </tr>
      <tr>
        <td>profile</td>
        <td>The Maven profile to activate.</td>
        <td>No. Gump will use the default profile if the attribute has
        not been set.</td>
      </tr>
      <tr>
        <td>separateLocalRepository</td>
        <td>Normally all &lt;mvn&gt; builds share the same local
          repository that will be removed after each complete Gump run.
          Sometimes a project needs to use a separate local repository
          from the others, the most common case is that a project needs
          to be built against a released dependency instead of a Gump
          built one in order to break a dependency cycle.<br/>
          The value of this attribute can be a boolean or an
          identifier.  If you use a boolean it simply en- or
          disables a local repository separate from the other
          directories and Gump will choose a directory name (if the
          value is true).  If several projects are tightly related
          and should share the same local repository different from
          the other projects you can use an id instead of a boolean
          and use the same id for each project.
        </td>
        <td>No. Defaults to <strong>false</strong>.</td>
      </tr>
    </table>
  </section>

  <section><title>mvn2install</title>
    <p>Installs a file into the local Maven 2.x+ repository using the
      mvn2 install plugin.</p>

    <p>This element is a shortcut for a common use case of the mvn
      builder which would otherwise involve several nested property
      elements.  It uses mvn's "install:install-file" goal to install
      the file given by the file attribute using the groupId of the
      current project (or workspace) and the given or implied
      artifactId.</p>
    
    <p>If the artifact to install is a POM, Gump can try to parse the
      file for the version number.  Gump's parser isn't complete and
      may be unable to extract the proper version - for example, Gump
      will not support property references - in which case the version
      must be specified explicitly.</p>

    <p>The element name <strong>mvninstall</strong> can be used as an
      alias for <strong>mvn2install</strong>.</p>

    <table>
      <tr>
        <th>Attribute</th>
        <th>Description</th>
        <th>Required?</th>
      </tr>
      <tr>
        <td>version</td>
        <td>The version of the artifact to install.</td>
        <td>Yes if <code>packaging</code> is different from "pom" or
          the version inside the POM uses property references.</td>
      </tr>
      <tr>
        <td>file</td>
        <td>The file to install (relative to basedir).</td>
        <td>No. Defaults to "pom.xml".</td>
      </tr>
      <tr>
        <td>packaging</td>
        <td>The type of artifact to install.</td>
        <td>No. Defaults to "pom".</td>
      </tr>
      <tr>
        <td>artifactId</td>
        <td>The id of the artifact to install.</td>
        <td>No. Defaults to project's name.</td>
      </tr>
      <tr>
        <td>profile</td>
        <td>The Maven profile to activate.</td>
        <td>No. Gump will use the default profile if the attribute has
        not been set.</td>
      </tr>
      <tr>
        <td>separateLocalRepository</td>
        <td>Normally all &lt;mvn&gt; builds share the same local
          repository that will be removed after each complete Gump run.
          Sometimes a project needs to use a separate local repository
          from the others, the most common case is that a project needs
          to be built against a released dependency instead of a Gump
          built one in order to break a dependency cycle.<br/>
          The value of this attribute can be a boolean or an
          identifier.  If you use a boolean it simply en- or
          disables a local repository separate from the other
          directories and Gump will choose a directory name (if the
          value is true).  If several projects are tightly related
          and should share the same local repository different from
          the other projects you can use an id instead of a boolean
          and use the same id for each project.
        </td>
        <td>No. Defaults to <strong>false</strong>.</td>
      </tr>
    </table>

    <source><![CDATA[
<project name="foo" groupId="bar">
  <mvn2install version="1.0"/>
</project>]]></source>

    <p>is completely equivalent to</p>

    <source><![CDATA[
<project name="foo" groupId="bar">
  <mvn2 goal="install:install-file">
    <property name="groupId" value="bar"/>
    <property name="artifactId" value="foo"/>
    <property name="packaging" value="pom"/>
    <property name="file" value="pom.xml"/>
    <property name="version" value="1.0"/>
  </mvn2>
</project>]]></source>

  </section>

  <section><title>mvn3</title>
    <p>Specifies the arguments to be passed to <fork
    href="https://maven.apache.org/">Apache Maven 3.x</fork>.</p>
    
    <p>The <fork href="https://maven.apache.org/">Maven 3.x</fork>
    component of Gump (&lt;mvn3&gt;) uses a
    <strong>pre-installed</strong> version of <fork
    href="https://maven.apache.org">Maven 3.x</fork>, it does
    <strong>NOT</strong> bootstrap Maven from svn trunk.</p>

    <p>The mvn3 builder works the same way as
      the <link href="#mvn2">mvn2</link> builder and supports all the
      same attributes and nested elements.</p>
  </section>
    
  <section><title>mvn3install</title>
    <p>Installs a file into the local Maven 2.x+ repository using the
      mvn3 install plugin.</p>

    <p>This builder is identical to
      the <link href="#mvn2install">mvn2install</link> builder but uses
      Maven 3.x rather than 2.x to invoke the install plugin.</p>

    <source><![CDATA[
<project name="foo" groupId="bar">
  <mvn3install version="1.0"/>
</project>]]></source>

    <p>is completely equivalent to</p>

    <source><![CDATA[
<project name="foo" groupId="bar">
  <mvn3 goal="install:install-file">
    <property name="groupId" value="bar"/>
    <property name="artifactId" value="foo"/>
    <property name="packaging" value="pom"/>
    <property name="file" value="pom.xml"/>
    <property name="version" value="1.0"/>
  </mvn3>
</project>]]></source>

  </section>

  <section><title>gradle</title>

    <p><strong>The Gradle builder is a work in progress and may not be
    working correctly.</strong></p>

    <p>The <fork href="https://gradle.org/">Gradle</fork>
    component of Gump (&lt;gradle&gt;) uses a
    <strong>pre-installed</strong> version of <fork
    href="https://gradle.org">Gradle</fork>, it does
    <strong>NOT</strong> bootstrap Gradle itself.</p>
    
    <p>
      All gradle builds use the same local repository as the Maven
      builds and are told to always refresh the dependency cache.
      This can be overriden on a per build basis, see below.  The
      local repository is wiped out after each Gump run.
    </p>

    <p>
      All gradle builds are run using a special init script that adds
      all snapshot repositories known to Gump as well as the local
      maven repository as repositories and changes the version of all
      dependencies to <code>integration.latest</code>.  This means the
      build will most likely use the latest SNAPSHOT build published
      by the dependency - in general this is not the version just
      built by Gump.
    </p>  

    <p>
      Technically it is not necessary to declare the dependencies of a
      gradle built project since artifacts will be retrieved even if
      Gump doesn't know about the dependency.  Still it is better to
      list all dependencies inside the Gump descriptor in order to
      maintain correct build order.
    </p>

    <table>
      <tr>
        <th>Attribute</th>
        <th>Description</th>
        <th>Required?</th>
      </tr>
      <tr>
        <td>task</td>
        <td>The Gradle task to invoke.  <em>This can be a comma
        separated list. Spaces are preserved.</em></td>
        <td>No. Defaults to <strong>build</strong>.</td>
      </tr>
      <tr>
        <td>separateLocalRepository</td>
        <td>Normally all &lt;mvn&gt; and &lt;gradle&gt; builds share the same local
          repository that will be removed after each complete Gump run.
          Sometimes a project needs to use a separate local repository
          from the others, the most common case is that a project needs
          to be built against a released dependency instead of a Gump
          built one in order to break a dependency cycle.<br/>
          The value of this attribute can be a boolean or an
          identifier.  If you use a boolean it simply en- or
          disables a local repository separate from the other
          directories and Gump will choose a directory name (if the
          value is true).  If several projects are tightly related
          and should share the same local repository different from
          the other projects you can use an id instead of a boolean
          and use the same id for each project.
        </td>
        <td>No. Defaults to <strong>false</strong>.</td>
      </tr>
    </table>
  </section>

  <section><title>script</title>

    <p>Specifies a script to be executed in order to make build a
    project.</p>

    <p>The assumption is that the script can be invoked in a platform
    independent manner, though the contents of the script may be
    platform specific.  Specifically, if the name of the script is
    "name" and no file with the name "name" exists in the project's
    basedir, it will be invoked as follows:</p>

    <ul>
      <li>On Windows/batch, "call .\name.bat"</li>
      <li>On Unix/bash, "./name.sh"</li>
    </ul>

    <table>
      <tr>
        <th>Attribute</th>
        <th>Description</th>
        <th>Required?</th>
      </tr>
      <tr>
        <td>name</td>
        <td>The name of the script to execute.</td>
        <td>Yes</td>
      </tr>
    </table>

    <p>Additional command line arguments can be specified using nested
    &lt;arg&gt; elements.  If the name of an arg start with "--" or
    doesn't start with "-", then a single argument gets created from
    one &lt;arg&gt; element, using "=" to join name and value.  If it
    starts with a single "-", two arguments get created, one for the
    name and one for the value.  For example:</p>

    <source>
      &lt;script name="foo"&gt;
        &lt;arg name="--double-dash" value="1"/&gt;
        &lt;arg name="-single-dash" value="2"/&gt;
        &lt;arg name="no-dash" value="3"/&gt;
      &lt;/script&gt;
    </source>
      <p>becomes</p>
    <source>
      ./foo --double-dash=1 -single-dash 2 no-dash=3
    </source>
  </section>

  <section><title>configure</title>

    <p>Is a specialized version of <link href="#script">script</link>
    with the fixed script name of "configure".</p>

  </section>

  <section><title>make</title>

    <p>Specifies the arguments to be passed to make.</p>

    <table>
      <tr>
        <th>Attribute</th>
        <th>Description</th>
        <th>Required?</th>
      </tr>
      <tr>
        <td>makefile</td>
        <td>The make file to execute.  Defaults to <strong>Makefile</strong>.
        </td>
        <td>No Defaults to <strong>Makefile</strong>.</td>
      </tr>
      <tr>
        <td>target</td>
        <td>The make target to invoke. <em>This can be a comma
        separated list. Spaces are preserved.</em></td>
        <td>No. Defaults to <strong>ALL</strong>.</td>
      </tr>
    </table>
  </section>

  <section><title>nant</title>
    <p>Specifies the arguments to be passed to <fork
    href="https://nant.sourceforge.org/">NAnt</fork>.</p>

    <table>
      <tr>
        <th>Attribute</th>
        <th>Description</th>
        <th>Required?</th>
      </tr>
      <tr>
        <td>buildfile</td>
        <td>The NAnt build file to execute.  Defaults to
        <strong>NAnt.build</strong>.
        </td>
        <td>No Defaults to <strong>NAnt.build</strong>.</td>
      </tr>
      <tr>
        <td>target</td>
        <td>The NAnt target to invoke. <em>This can be a comma
        separated list. Spaces are preserved.</em></td>
        <td>No. Defaults to the default target defined by the build file.</td>
      </tr>
    </table>
  </section>

  <section><title>nuget</title>

    <p><strong>Currenty the nuget builder will fetch what has been
    specified in the <code>packages.config</code> rather than
    replacing things with the latest version - which would be more in
    line with Gump's purpose..</strong></p>

    <p>The <fork href="https://nuget.org/">NuGet</fork> component of
    Gump (&lt;nuget&gt;) uses a <strong>pre-installed</strong> version
    of nuget.</p>
    
    <table>
      <tr>
        <th>Attribute</th>
        <th>Description</th>
        <th>Required?</th>
      </tr>
      <tr>
        <td>command</td>
        <td>The nuget command to execute.</td>
        <td>No. Defaults to <strong>restore</strong>.</td>
      </tr>
      <tr>
        <td>solution</td>
        <td>The solution holding the package configuration.</td>
        <td>Yes</td>
      </tr>
    </table>
  </section>

  <section><title>msbuild</title>
    <p>Specifies the arguments to be passed to MSBuild or xbuild.
    Gump will automatically detect whether MSBuild or xbuild is
    present and run the appropriate tool - preferring MSBuild.</p>

    <table>
      <tr>
        <th>Attribute</th>
        <th>Description</th>
        <th>Required?</th>
      </tr>
      <tr>
        <td>buildfile</td>
        <td>The MSBuild build file/project/solution to execute.
        </td>
        <td>No</td>
      </tr>
      <tr>
        <td>target</td>
        <td>The MSBuild target to invoke. <em>This can be a comma
        separated list. Spaces are preserved.</em></td>
        <td>No. Defaults to the default target defined by the build file.</td>
      </tr>
    </table>
  </section>

</body>
</document>
