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

# This file declares the libraries for use in a given release of the components

# If you change this, change the checksum to match
m2.version=2.1.3
m2.url=https://archive.apache.org/dist/maven/ant-tasks
m2.artifact-name=maven-ant-tasks
m2.jar.name=${m2.artifact-name}-${m2.version}.jar
#this is the URL of the antlib library, that is pulled down for everything else.
m2.antlib.url=${m2.url}/${m2.version}/binaries/${m2.jar.name}
#this is the sha1 checksum of the artifact
m2.sha1.checksum=b09be554228d66d208e5fef5266844aacf443abc

# Repository to use by default for fetching dependencies.
m2.repo=http://repo1.maven.org/maven2/

# Versions of different libraries. Please keep in alphabetical order, except
# when a specific dependency forces them to be out-of-order
ivy.version=2.4.0
ant-antunit.version=1.3
antlr.version=2.7.7
bcel.version=6.2
bsf.version=2.4.0
bsh.version=2.0b4
bsh-core.version=${bsh.version}
commons-net.version=3.6
commons-logging.version=1.1
commons-logging-api.version=${commons-logging.version}
hamcrest-core.version=1.3
hamcrest-library.version=${hamcrest-core.version}
jai-core.version=1.1.3
jai-codec.version=1.1.3
jakarta-regexp.version=1.4
# Later versions of Tomcat provide a jspc task
jasper-compiler.version=4.1.36
jasper-runtime.version=${jasper-compiler.version}
javax.mail-api.version=1.6.0
jdepend.version=2.9.1
jruby.version=1.6.8
junit.version=4.12
rhino.version=1.7.8
junit-platform-launcher.version=1.1.0
# Only used for internal tests in Ant project
junit-vintage-engine.version=5.1.0
# Only used for internal tests in Ant project
junit-jupiter-engine.version=5.1.0
jsch.version=0.1.54
jython.version=2.7.0
# log4j 1.2.15 requires JMS and a few other Sun jars that are not in the m2 repo
log4j.version=1.2.14
oro.version=2.0.8
servlet-api.version=2.3
which.version=1.0
xalan.version=2.7.2
xml-resolver.version=1.2
xz.version=1.8
# paired
jacl.version=1.2.6
tcljava.version=${jacl.version}
