<?xml version="1.0" encoding="UTF-8"?>
<!--
  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.
-->
<!DOCTYPE document [
  <!ENTITY project SYSTEM "project.xml">
]>
<document url="installation.html">

  &project;

  <properties>
    <author email="craigmcc@apache.org">Craig R. McClanahan</author>
    <author email="yoavs@apache.org">Yoav Shapira</author>
    <title>Installation</title>
  </properties>

<body>


<section name="Installation">

<p>In order to use Tomcat for developing web applications, you must first
install it (and the software it depends on).  The required steps are outlined
in the following subsections.</p>

<subsection name="JDK">

<p>Tomcat <version-major-minor/> was designed to run on Java SE 7.
</p>

<p>Compatible JDKs for many platforms (or links to where they can be found)
are available at
<a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">http://www.oracle.com/technetwork/java/javase/downloads/index.html</a>.</p>

</subsection>

<subsection name="Tomcat">

<p>Binary downloads of the <strong>Tomcat</strong> server are available from
<a href="http://tomcat.apache.org/">http://tomcat.apache.org/</a>.
This manual assumes you are using the most recent release
of Tomcat <version-major/>.  Detailed instructions for downloading and installing
Tomcat are available <a href="../setup.html">here</a>.</p>

<p>In the remainder of this manual, example shell scripts assume that you have
set an environment variable <code>CATALINA_HOME</code> that contains the
pathname to the directory in which Tomcat has been installed. Optionally, if
Tomcat has been configured for multiple instances, each instance will have its
own <code>CATALINA_BASE</code> configured.</p>

</subsection>


<subsection name="Ant">

<p>Binary downloads of the <strong>Ant</strong> build tool are available from
<a href="http://ant.apache.org/">http://ant.apache.org/</a>.
This manual assumes you are using Ant 1.8 or later.  The instructions may
also be compatible with other versions, but this has not been tested.</p>

<p>Download and install Ant.
Then, add the <code>bin</code> directory of the Ant distribution to your
<code>PATH</code> environment variable, following the standard practices for
your operating system platform.  Once you have done this, you will be able to
execute the <code>ant</code> shell command directly.</p>

</subsection>


<subsection name="CVS">

<p>Besides the required tools described above, you are strongly encouraged
to download and install a <em>source code control</em> system, such as the
<strong>Concurrent Version System</strong> (CVS), to maintain historical
versions of the source files that make up your web application.  Besides
the server, you will also need appropriate client
tools to check out source code files, and check in modified versions.</p>

<p>Detailed instructions for installing and using source code control
applications is beyond the scope of this manual.  However, CVS server and
client tools for many platforms (along with documentation) can be downloaded
from <a href="http://www.cvshome.org/">http://www.cvshome.org/</a>.</p>

</subsection>


</section>


</body>
</document>
