# build.properties.sample
# -----------------------
#
# ==============================================================================
# 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.
# ==============================================================================
#
# This file contains example property settings that you would use to customzie
# your build environment to build the Struts Shale Library from
# source code.  To use this file, make a copy of it in "build.properties" and
# customize the values as required.
#
# $Id:  $
#

# The absolute or relative pathname of the directory containing the
# Jakarta Commons BeanUtils library
beanutils.home = /Developer/Java/Tools/jakarta/commons-beanutils-1.6.1

# The absolute or relative pathname of the directory containing the
# Jakarta Commons Digester library
digester.home = /Developer/Java/Tools/jakarta/commons-digester-1.5

# The absolute or relative pathname of the directory containing the
# Jakarta Commons Logging library
logging.home = /Developer/Java/Tools/jakarta/commons-logging-1.0.3

# The absolute or relative pathname of the directory containing your
# Servlet API classes JAR file (servlet.jar)
server.home = /Developer/Java/Tools/jakarta/jakarta-tomcat-5.0.30

# The absolute or relative pathname of the JavaServer Faces 
# implementation
jsf.home = /Developer/Java/Tools/jsf-1_1_01

# The absolute or relative pathname of the JUnit 3.8.1 JAR
junit.home = /Developer/Java/Tools/junit3.8.1

# The absolute or relative pathname of the JSTL install dir
jstl.home = /Developer/Java/Tools/jakarta/jakarta-taglibs-standard-1.1.0

# The absolute or relative pathname of the JSTL install dir
jstl.home = /Developer/Java/Tools/jakarta/jakarta-taglibs-standard-1.1.0

# The username and password for Tomcat for hot deploys
username=yourUsername
password=yourPassword
manager.url=http://localhost:8080/manager
