<!-- $Id$ -->
<!--
   Copyright 2004 The Apache Software Foundation
  
   Licensed 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.
-->
<appendix id="jars">
	<title>Tapestry JAR files</title>
	
<variablelist>
		
	<varlistentry>
		<term><filename>lib/runtime/<replaceable>*</replaceable>.jar</filename></term>
		<listitem>
		<para>
		Frameworks that are usually needed at runtime (but not at framework build time) and
		are not always supplied by the servlet container.  This currently
		is just the &Log4J; framework.
		</para>
		</listitem>
	</varlistentry>
	

	<varlistentry>
		<term><filename>lib/ext/<replaceable>*</replaceable>.jar</filename></term>
		<listitem>
		<para>
		Frameworks needed when compiling the framework and at runtime.  This is
		several other &Jakarta; frameworks (including &BSF; and &BCEL;), plus
		the &OGNL; framework.
		</para>
		</listitem>
	</varlistentry>


			<varlistentry>
		<term>&TapestryFrameworkJar;</term>
		<listitem>
			<para>
			The main Tapestry framework.  This is needed at compile time and runtime.  At runtime, it is most
			often added to the servlet container's classpath.  The framework release number is
			integrated into the file name.
			</para>
		</listitem>
	</varlistentry>
	
	
	<varlistentry>
		<term>&TapestryContribJar;</term>
		<listitem>
		<para>
		Contains additional components and tools that are not integral to the framework itself, such
		as the &Palette;.  Needed at runtime if any such components are used in an application.
		The framework release number is integrated into the file name.
		</para>
		</listitem>
	</varlistentry>

	

	
</variablelist>

<para>
In addition, Tapestry applications may need the packages
<class>javax.servlet</class> and
<class>javax.xml.</class> at compile time and an XML parser at runtime.  These
are usually provided by the servlet container or application server.
</para>


</appendix>
  
