<?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 Autotag</title>
    </properties>

    <body>
        <section name="Building the Autotag project">
          <subsection name="Prerequisites">
            <p>For all the next instructions, we assume that you downloaded and
            installed <a href="http://maven.apache.org/">Maven</a>.</p>
            <p>To download packages from the source repository, you need to
            download and install <a href="http://subversion.tigris.org/">
            Subversion</a>.</p>
            <p>If you want to build something including JavaDocs (assemblies,
            sites and JavaDoc report itself) you need to install
            <a href="http://www.graphviz.org/">GraphViz</a>, otherwise you will
            notice missing pictures inside JavaDocs pages.</p>
          </subsection>
          <subsection name="Building main packages">
            <p>To build the Autotag project from source you need to:</p>
            <ul>
            <li><p><a href="../../download.html">download</a> the source
            distribution, or checkout the latest version:</p>
            <p><source>svn co http://svn.apache.org/repos/asf/tiles/framework/trunk/tiles-autotag</source></p></li>
            <li><p>go into the source directory and type:</p>
            <p><source>mvn package</source></p></li>
            </ul>
            <p>You will find the generated JARs under:</p>
            <ul>
            <li>{autotag-dir}/maven-autotag-plugin/target/maven-autotag-plugin-${version}.jar</li>
            <li>{autotag-dir}/tiles-autotag-core/target/tiles-autotag-core-${version}.jar</li>
            <li>{autotag-dir}/tiles-autotag-core-runtime/target/tiles-autotag-core-runtime-${version}.jar</li>
            <li>{autotag-dir}/tiles-autotag-freemarker/target/tiles-autotag-freemarker-${version}.jar</li>
            <li>{autotag-dir}/tiles-autotag-jsp/target/tiles-autotag-jsp-${version}.jar</li>
            <li>{autotag-dir}/tiles-autotag-velocity/target/tiles-autotag-velocity-${version}.jar</li>
            </ul>
          </subsection>
        </section>
        <section name="Building the websites">
          <p>There are four Tiles websites: the main website and the projects
          websites (tiles-request, tiles-autotag and framework).</p>
          <subsection name="Building the main website">
            <p>To build the main website:</p>
            <ul>
            <li><p>checkout the site from the source repository:</p>
            <p><source>svn co http://svn.apache.org/repos/asf/tiles/site/</source></p></li>
            <li><p>go into the site directory and type:</p>
            <p><source>mvn clean site site:stage</source></p></li>
            </ul>
            <p>You will find the generated distribution under
            <code>{tiles-site-dir}/target/staging</code>.</p>
          </subsection>
          <subsection name="Building the tiles-autotag website">
            <p>To build a project's website:</p>
            <ul>
            <li><p><a href="../../download.html">download</a> the source
            distribution, or checkout the latest version:</p>
            <p><source>svn co http://svn.apache.org/repos/asf/tiles/framework/trunk/tiles-autotag</source></p></li>
            <li><p>go into the source directory and type:</p>
            <p><source>mvn clean site site:stage</source></p></li>
            </ul>
            <p>You will find the generated website under:</p>
            <ul>
            <li>{tiles-autotag-dir}/target/staging</li>
            </ul>
          </subsection>
        </section>
    </body>

</document>
