<document>

    <properties>
        <title>Download</title>
        <author email="adammurdoch@apache.org">Adam Murdoch</author>
    </properties>

    <body>
        <section name="Download">
            <p>
                Nightly builds of Commons VFS can be found
                <a href="http://cvs.apache.org/builds/jakarta-commons/nightly/commons-vfs/">here</a>
                .
            </p>
            <p>
                You will also need to download the jars used by Commons VFS.
                These are listed below:
            </p>
            <table>
                <tr>
                    <th>Dependency</th>
                    <th>Required For</th>
                </tr>
                <tr>
                    <td>
                        Jakarta
                        <a href="http://jakarta.apache.org/commons/logging/">Commons Logging</a>
                        Version 1.0.4 or later.
                    </td>
                    <td>All</td>
                </tr>
                <tr>
                    <td>
                        Jakarta
                        <a href="http://jakarta.apache.org/commons/collections/">Commons Collections</a>
                        Version 3.1
                    </td>
                    <td>LRU Cache (optional)</td>
                </tr>
                <tr>
                    <td>
                        Jakarta
                        <a href="http://jakarta.apache.org/commons/net/">Commons Net</a>
                        Version 1.4.0 or later.
                    </td>
                    <td rowspan="2">FTP</td>
                </tr>
                <tr>
                    <td>
                        Jakarta
                        <a href="http://jakarta.apache.org/oro/">ORO</a>
                        Version 2.0.8
                    </td>
                </tr>
                <tr>
                    <td>
                        Jakarta
                        <a href="http://jakarta.apache.org/commons/httpclient/">Commons Httpclient</a>
                        .
                        Version 2.0.
                    </td>
                    <td>
                        WebDAV
                        <br/>
                        HTTP, URI Utils
                    </td>
                </tr>
                <tr>
                    <td>
                        jdom.org
                        <a href="http://www.jdom.org">JDom</a>
                        .
                        Version 1.0.
                        <br/>
                        Only needed if you use webdav 2.2+
                    </td>
                    <td>
                        WebDAV
                    </td>
                </tr>
                <tr>
                    <td>
                        Jakarta
                        <a href="http://jakarta.apache.org/slide/">Slide</a>
                        Version 2.2pre1 (20050629.002841)
                        <br/>
                        You only need this bleeding edge version if you would like to use the RandomAccessContent with
                        webdav
                    </td>
                    <td>WebDAV</td>
                </tr>
                <tr>
                    <td>
                        <a href="http://jcifs.samba.org/">jCIFS</a>
                        Version 0.8.3 or later.
                    </td>
                    <td>CIFS</td>
                </tr>
                <tr>
                    <td>
                        <a href="http://www.jcraft.com/jsch/">JSch</a>
                        Version 0.1.17 or later.
                    </td>
                    <td>SFTP</td>
                </tr>
                <tr>
                    <td>
                        <a href="http://jakarta.apache.org/commons/sandbox/compress/">Commons Compress</a>
                        Nightly build 20050911
                        <br/>
                        There are no other nightlies than the one I created for maven, so please download it from the
                        link below until this changes:
                        <br/>
                        <a href="http://www.ibiblio.org/maven/commons-compress/jars/commons-compress-20050911.jar">
                            http://www.ibiblio.org/maven/commons-compress/jars/commons-compress-20050911.jar</a>
                    </td>
                    <td>tar, bz2</td>
                </tr>
            </table>
        </section>
        <section name="Building Commons VFS">
            <p>
                To obtain the Commons VFS source, you can either:
            </p>
            <ul>
                <li>
                    Check the source out of SVN using:
                    <br/>
                    HEAD:
                    <code>svn co http://svn.apache.org/repos/asf/jakarta/commons/proper/vfs/trunk vfs</code>
                    <br/>
                    For a certain version please look at
                    <a href="http://svn.apache.org/repos/asf/jakarta/commons/proper/vfs/tags">
                        http://svn.apache.org/repos/asf/jakarta/commons/proper/vfs/tags</a>
                </li>
                <li>
                    Download a nightly source snapshot from
                    <a href="http://cvs.apache.org/builds/jakarta-commons/nightly/commons-vfs/">here</a>
                    .
                </li>
            </ul>
            <p>
                To build Commons VFS, you can either:
            </p>
            <ul>
                <li>
                    Use
                    <a href="http://ant.apache.org">Ant</a>
                    1.6.2 or later.
                    Use the
                    <code>build.xml</code>
                    file in the root source
                    directory. The default target downloads the dependencies
                    used to build Commons VFS, and then builds the jar file
                    into the
                    <code>target</code>
                    directory.
                </li>
                <li>
                    Use
                    <a href="http://maven.apache.org">Maven</a>
                    1.0.2 or later. Use the
                    <code>jar</code>
                    goal to download
                    the dependencies, and build the VFS jar. Maven builds the
                    jar file into the
                    <code>target</code>
                    directory.
                </li>
            </ul>
        </section>
    </body>
</document>