<?xml version="1.0"?>
<!--
/*
 * $Id$
 *
 * 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 Tiles</title>
    </properties>

    <body>
        <section name="Apache Tiles&#8482;">
        <subsection name="Snapshots">

        <p>Looking for snapshot builds of the latest version of Tiles?
           Snapshots are occasionally published to Apache's Maven snapshot
           repository, which can be accessed with the following configuration:</p>

        <source>
        <![CDATA[
          <repository>
              <id>apache.snapshots</id>
              <name>Apache Maven Snapshot Repository</name>
              <url>http://repository.apache.org/snapshots</url>
          </repository>
        ]]>
        </source>

        <p>After configuring the repository, declare a dependency on
        Tiles Request:</p>

        <source><![CDATA[
          <dependency>
              <groupId>org.apache.tiles</groupId>
              <artifactId>tiles-request-api</artifactId>
              <version>1.0-SNAPSHOT</version>
          </dependency>
        ]]>
        </source>

    </subsection>
</section>
</body>

</document>
