#   Copyright 2001-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.

# The home directory for the Commons collection classes distribution
commons-collections.home= ../collections/dist

# The pathname of the collections classes JAR file
commons-collections.jar = ${commons-collections.home}/commons-collections.jar
commons-collections-testframework.jar = ${commons-collections.home}/commons-collections-testframework-3.0-dev.jar

# The home directory for the Commons logging classes distribution
commons-logging.home = ../logging/dist

# The pathname of the Commons Logging JAR file
commons-logging.jar = ${commons-logging.home}/commons-logging.jar

# The directory containing your binary distribution of JUnit, 
# version 3.7 or later
junit.home = /usr/local/junit3.7

# The pathname of the "junit.jar" JAR file
junit.jar = ${junit.home}/junit.jar


# Maven properties (for web site build)
# Those committers using agents may like to use
#maven.username=rdonkin
#beanutils.cvs=lserver:rdonkin@cvs.apache.org:/home/cvs