#	 ***************************************************************
#	 * 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
#	 * 
#	 *   https://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.
#	 ***************************************************************
target.ivy.version=2.6.0
# Following OSGi spec: have to be 3 numbers separated by dots
target.ivy.bundle.version=2.6.0
# in case we want to add a qualifier such as alpha, beta, etc...
# if non empty, add a '_' at the end of the qualifier, so the version would look like 1.2.3.alpha_200901011200
# NB: be careful with naming, OSGi orders version alphabetically. Suggested values: alpha_, beta_, cr1_ (for RC-1), final_
target.ivy.bundle.version.qualifier=alpha_


# Versions of dependencies
#----------------------------------
# 'ant.version' is a built in name containing the version of the current 
# running Ant, so we could not use that name here.
apache-ant.version=1.9.14
ant-contrib.version=1.0b3
bouncycastle.version=1.64
commons-vfs2.version=2.2
hamcrest.version=1.3
httpclient.version=4.5.10
jsch.agentproxy.version=0.0.9
jsch.version=0.1.55
junit.version=4.12
oro.version=2.0.8
xmlunit.version=1.6
