#	 ***************************************************************
#	 * Licensed to the Apache Software Foundation (ASF) under one
#	 * or more contributor license agreements.  See the NOTICE file
#	 * distributed with this work for additional information
#	 * regarding copyright ownership.  The ASF licenses this file
#	 * to you 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.
#	 ***************************************************************
lib.dir=${basedir}/lib
src.dir=${basedir}/src/java
test.dir=${basedir}/test/java
build.dir=${basedir}/build
classes.build.dir=${basedir}/build/classes
core.classes.build.dir=${classes.build.dir}/core
ant.classes.build.dir=${classes.build.dir}/ant
optional.classes.build.dir=${classes.build.dir}/optional
test.build.dir=${basedir}/build/test
artifacts.build.dir=${basedir}/build/artifact
distrib.dir=${basedir}/build/distrib
doc.build.dir=${basedir}/build/doc
reports.dir=${doc.build.dir}/reports
test.xml.dir=${build.dir}/test-report
test.report.dir=${reports.dir}/test
coverage.report.dir=${reports.dir}/coverage
javadoc.build.dir=${reports.dir}/api
doc.src.dir=${basedir}/doc
checkstyle.report.dir=${reports.dir}/checkstyle
checkstyle.src.dir=${basedir}/src/etc/checkstyle

ivy.minimum.javaversion=1.4
debug.mode=on
ivy.install.version=1.4.1

status=integration

test.class.pattern = *Test

