#   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.
##########################################################################
# Sample Ant build.properties file
#
# This setup assumes dependent jars are in a local maven 2 repository.
# However the jars are located, the properties ending in ".jar" need to
# expand to full paths to the jars.
##########################################################################

# Repository base path
repository=${user.home}/.m2/repository

# Maven-generated jar to validate in test-jar target
dbcp.jar=./target/commons-dbcp2-2.1.1-SNAPSHOT.jar

# commons-pool.jar - path to commons-pool2 jar
commons-pool.home=${repository}/org/apache/commons/commons-pool2/2.4.2
commons-pool.jar=${commons-pool.home}/commons-pool2-2.4.2.jar

# JUnit
junit.home=${repository}/junit/junit/4.11
junit.jar=${junit.home}/junit-4.11.jar
hamcrest.jar=${repository}/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar

# XML parser
xerces.home=${repository}/xerces/xercesImpl/2.4.0
xerces.jar=${xerces.home}/xercesImpl-2.4.0.jar 

# Tomcat naming jars - needed only for JNDI tests
naming.common.home=${repository}/tomcat/naming-common/5.0.28
naming-common.jar=${naming.common.home}/naming-common-5.0.28.jar
naming.java.home=${repository}/tomcat/naming-java/5.0.28
naming-java.jar=${naming.java.home}/naming-java-5.0.28.jar

# Commons logging - dependency of naming jars
commons-logging.home=${repository}/commons-logging/commons-logging/1.1.3
commons-logging.jar=${commons-logging.home}/commons-logging-1.1.3.jar

# JTA - needed for managed connections
jta-spec.jar=${repository}/org/apache/geronimo/specs/geronimo-jta_1.1_spec/1.1.1/geronimo-jta_1.1_spec-1.1.1.jar
jta-impl.jar=${repository}/org/apache/geronimo/modules/geronimo-transaction/1.2-beta/geronimo-transaction-1.2-beta.jar

# JTA dependencies - required so the test cases run
backport-util-concurrent.jar=${repository}/backport-util-concurrent/backport-util-concurrent/2.2/backport-util-concurrent-2.2.jar
ejb-spec.jar=${repository}/org/apache/geronimo/specs/geronimo-ejb_2.1_spec/1.1/geronimo-ejb_2.1_spec-1.1.jar
