# -----------------------------------------------------------------------------
# build.properties.sample
#
# This is an example "build.properties" file, used to customize building Struts
# for your local environment.  Make any changes you need, and rename this file
# to "build.properties" in the same directory that contains the Struts
# "build.xml" file.
#
# $Id: build.properties.sample,v 1.4 2001/05/06 12:07:31 vmassol Exp $
# -----------------------------------------------------------------------------

# WARNING:  The relative paths below assume that the build.xml file is in the
# top-level directory of the jakarta-struts source distribution (as it still
# is at the moment).  If build.xml moves to under the "build" subdirectory,
# we will need to add an extra level of "../" to each of these paths.

# The directory containing your binary distribution of Tomcat 4.0 ("Catalina"
# is the servlet container part of this distribution), from CVS module
# "jakarta-tomcat-4.0" at jakarta.apache.org).  This is only required
# if you are going to execute the "deploy.catalina" target.
catalina.home=../jakarta-tomcat-4.0/build

# The JAR file containing the JDBC 2.0 Optional Package extensions API
# (javax.sql).  This file will automatically be added to your class path
# when you compile Struts
jdbc20ext.jar=../jdbc20/jdbc2_0-stdext.jar

# The JAR file containing the Servlet API classes to compile against (either
# version 2.2 or 2.3)
servlet.jar=../jakarta-servletapi/lib/servlet.jar

# The directory containing your binary distribution of Tomcat 3.2, from CVS
# module "jakarta-tomcat" (and branch "TOMCAT_32") at jakarta.apache.org.
# This is only required if you are going to execute the "deploy.tomcat" target.
tomcat.home=../build/tomcat

# The JAR file containing the Xerces parser.  This is only required if you are
# going to execute the "deploy.catalina" target.
xerces.jar=../xml-xerces/xerces.jar

# Properties related to Struts unit testing
# -----------------------------------------

# Cactus jar for the Servlet API corresponding to the servlet.jar file
# selected above (either 2.2 or 2.3)
cactus.jar = ../jakarta-commons/cactus/out/servlet22/dist/lib/commons-cactus.jar 

# Cactus Ant custom tasks jar
cactus.ant.jar = ../jakarta-commons/cactus/out/servlet22/dist/lib/commons-cactus-ant.jar

# JUnit jar file
junit.jar = f:/applis/jakarta-ant-1.4alpha/lib/junit.jar

# Servlet engine locations for the tests

# Note: If you don't want to run the test on a given servlet engine, just
#       comment it's home property. For example, if you don't want to run the
#       tests on Tomcat 4.0, comment the "tomcat.home.40" property.

tomcat.home.32 = f:/applis/jakarta-tomcat-3.2.1
tomcat.home.40 = f:/applis/jakarta-tomcat-4.0-b1
