<?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 Autotag:</p>

        <source><![CDATA[
          <dependency>
              <groupId>org.apache.tiles</groupId>
              <artifactId>tiles-autotag-core-runtime</artifactId>
              <version>1.0-SNAPSHOT</version>
          </dependency>
        ]]>
        </source>
        
        <p>Or the maven plugin:</p>
        
        <source><![CDATA[
          <plugin>
              <groupId>org.apache.tiles</groupId>
              <artifactId>maven-autotag-plugin</artifactId>
              <version>1.0-SNAPSHOT</version>
              <configuration>
                  <packageName>...</packageName>
                  <freemarkerRuntime>...</freemarkerRuntime>
                  <jspRuntime>...</jspRuntime>
                  <velocityRuntime>...</velocityRuntime>
              </configuration>
          </plugin>
        ]]>
        </source>

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

</document>
