<?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>Apache Commons VFS Sandbox</title>
        <author email="dev@commons.apache.org">Apache Commons Developers</author>
    </properties>

    <body>

      <section name="About Apache Commons VFS Sandbox">
        <p>
          This sandbox module contains VFS packages (<a href="../filesystems.html">filesystem
          providers</a>) which cannot be shipped with the official Apache release.
          This includes experimental code as well as components which have 
          <a href="dependencies.html">dependencies</a> not compatible with the 
          <a href="http://www.apache.org/legal/resolved.html#category-x">ASF redistribution policy
          (especially LGPL)</a>.
        </p><p>
          To build the sandbox binaries, see the <a href="../download.html">download and build
          instructions</a>.
          Make sure to enable the sandbox maven profile with <code>-Pinclude-sandbox</code>.
          If you use <code>mvn install</code> the sandbox binary archive can be used from
          the local repository. If you are not using the released source archive, you may have
          to adjust the parent-version and version-numbers if you want to avoid SNAPSHOT
          artifacts.
        </p>
      </section>

    </body>
</document>
