<?xml version="1.0"?>
<!--
Copyright 2006 The Apache Software Foundation.
 
Licensed 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 iouage governing permissions and
limitations under the License.
-->
<document>
 <properties>
  <title>Building</title>
  <author email="commons-dev@jakarta.apache.org">Commons Documentation Team</author>
 </properties>
<body>
<!-- ================================================== -->
<section name="Building Commons CLI">
<p>
  Commons CLI uses <a href="http://maven.apache.org">Maven</a> as its
  primary build system.
</p>
<p>
  You may also be interested in the release notes:<br />
  <a href="release_1_0.html">Release 1.0</a><br />
</p>
</section>
<!-- ================================================== -->
<!--<section name="Ant Goals">
  <p>
    To build a jar file, change into Collection's root directory and run "ant jar".
    The result will be in the "build" subdirectory.
  </p>
  <p>
    To build the Javadocs, run "ant javadoc".
    The result will be in "build/docs/apidocs".
  </p>
</section>-->
<!-- ================================================== -->
<!--<section name="Maven Goals">
  <p>
    To build the Javadocs, change into Collection's root directory and run "maven javadoc".
    The result will be in "target/docs/apidocs".
  </p>
  <p>
    To build the full website, run "maven site".
    The result will be in "target/docs".
  </p>
</section>-->
<!-- ================================================== -->
<section name="Versions and Branches">
  <p>
    There are various active versions and branches of commons CLI:
  </p>
  <table>
    <tr>
      <th>Name</th>
      <th>Description</th>
	</tr>
	<tr>
      <td><code>CLI_1_0</code></td>
      <td>Released CLI v1.0</td>
    </tr>
	<tr>
	  <td><code>CLI_1_0_BETA_1</code></td>
	  <td>First beta release of CLI 1.0.</td>
	</tr>
	<tr>
	  <td><code>CLI_2_DEV_BRANCH</code></td>
	  <td>Development branch for jkeyes's CLI 2 code</td>
	</tr>
	<tr>
	  <td><code>RESEARCH_CLI_2_ROXSPRING</code></td>
	  <td>Development branch for roxspring's CLI 2 code</td>
	</tr>
  </table>
</section>
<!-- ================================================== -->
</body>
</document>
