<?xml version="1.0"?>
<!--
    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.
-->

<document>
    <properties>
        <title>Commons Virtual File System</title>
        <author email="dev@commons.apache.org">Apache Commons Developers</author>
    </properties>

    <body>
        <section name="Commons Virtual File System">

            <p>
                Commons VFS provides a single API for accessing
                various different file systems. It presents a uniform view of
                the files from various different sources, such as the files on
                local disk, on an HTTP server, or inside a Zip archive.
            </p>

            <p>Some of the features of Commons VFS are:</p>
            <ul>
                <li>
                    A single consistent API for accessing files of different
                    types.
                </li>
                <li>Support for numerous
                    <a href="filesystems.html">file system types</a>
                    .
                </li>
                <li>
                    Caching of file information. Caches information in-JVM,
                    and optionally can cache remote file information on the
                    local file system (replicator).
                </li>
                <li>Event delivery.</li>
                <li>
                    Support for logical file systems made up of files from
                    various different file systems.
                </li>
                <li>
                    Utilities for integrating Commons VFS into applications,
                    such as a VFS-aware ClassLoader and URLStreamHandlerFactory.
                </li>
                <li>
                    A set of VFS-enabled<a href="anttasks.html">Ant tasks</a>.
                </li>
            </ul>

        </section>

        <section name="Requirements">
           <p>
            Many of the file systems require that optional components be present in order for the protocol to be 
            enabled. See the <a href="download.html">download and build</a> page for information on the optional 
            dependencies.
          </p>
          <table style="width:100%">
            <tr>
              <th>Apache Commons VFS Version</th>
              <th>Java Version</th>
            </tr>
            <tr>
              <td>2.9.0</td>
              <td>8</td>
            </tr>
            <tr>
              <td>2.8.0</td>
              <td>8</td>
            </tr>
            <tr>
              <td>2.7.0</td>
              <td>8</td>
            </tr>
            <tr>
              <td>2.6.0</td>
              <td>8</td>
            </tr>
            <tr>
              <td>2.5.0</td>
              <td>8</td>
            </tr>
            <tr>
              <td>2.4.x</td>
              <td>8</td>
            </tr>
            <tr>
              <td>2.3</td>
              <td>8</td>
            </tr>
            <tr>
              <td>2.2</td>
              <td>7</td>
            </tr>
            <tr>
              <td>2.1</td>
              <td>6</td>
            </tr>
            <tr>
              <td>2.0</td>
              <td>5</td>
            </tr>
            <tr>
              <td>1.0</td>
              <td>1.3</td>
            </tr>
          </table>          
        </section>

        <section name="News">
          <p>
            Apache Commons VFS 2.5.0 is a new features and bug fix release. Version 2.5.0 adds the modules
            <a href="commons-vfs2-jackrabbit1/index.html"><code>commons-vfs2-jackrabbit1</code></a>
            and 
            <a href="commons-vfs2-jackrabbit2/index.html"><code>commons-vfs2-jackrabbit2</code></a>.
            The module <a href="commons-vfs2-jackrabbit1/index.html"><code>commons-vfs2-jackrabbit1</code></a>
            contains WebDAV classes previously delivered in <a href="commons-vfs2/index.html"><code>commons-vfs2</code></a>
          </p>
          <p>
            Apache Commons VFS 2.4.1 is a bug fix release.
          </p>
          <p>
            Apache Commons VFS 2.4 is a new features and bug fix release.
          </p>
          <p>
            Apache Commons VFS 2.3 is a new features and bug fix release.
          </p>
          <p>
            Apache Commons VFS 2.2 is a new features and bug fix release.
          </p>
          <p>
            Apache Commons VFS 2.1 is a bugfix release to VFS 2.0. If you meet the requirements you should be able 
            to replace 2.0 with 2.1 without the need for changes to API consumers. VFS 2.1 has introduced some now 
            methods for provider interfaces (like <code>FileObject</code>). If you implement a VFS provider and use the
            corresponding <code>Abstract*</code> or <code>Default*</code> classes, there should be no need to modify
            the code or recompile the provider. The TarFileProvider is one known exception to compatibility with 2.0.
            See the <a href="https://dist.apache.org/repos/dist/dev/commons/vfs/RELEASE-NOTES.txt">Release Notes</a> and the
            <a href="commons-vfs2/clirr-report.html">Clirr Report</a> for details. VFS 2.1 adds a new read-only provider
            for the Apache Hadoop (HDFS) File system.
          </p>
          <p>
            Apache Commons VFS 2.0 adds support for FTPS and WebDav have been added in addition to many bugs
            being fixed. Version 2.0 is not binary compatible with version 1.0. To insure that both 1.0 and 2.0 can
            coexist version 2.0 has had its Maven groupId changed to org.apache.commons, its Maven artifact changed
            to commons-vfs2, and the package names are now org.apache.commons.vfs2. The API changes are fairly minor
            and will mostly impact provider implementations.
          </p>
        </section>

    </body>
</document>

