# 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 your
# Servlet API classes JAR file (servlet.jar)
server.home = /usr/local/jakarta-tomcat-5.0.28

# The absolute or relative pathname of the JavaServer Faces 
# implementation
jsf.home = /usr/local/jsf-1_1_01

# The absolute or relative pathname of the Apache Struts 
# distribution
struts.home = /usr/local/jakarta-struts

# The absolute or relative pathname of the JUnit 3.8.1 JAR
junit.home = /usr/local/junit-3.8.1
