<?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.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>5?</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>

