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

# 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=https://repo1.maven.org/maven2/

# hashes of libraries loaded over insecure connections
netrexx.sha256=1f99f054e9b1e412d29823088f3fa7cfce90a7af25d907a60a6d7908a6b97ea4

# 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.4
antlr.version=2.7.7
bcel.version=6.2
bsf.version=2.4.0
bsh.version=2.0b5
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}
jakarta.mail.version=1.6.3
jdepend.version=2.9.1
jruby.version=1.6.8
junit.version=4.12
rhino.version=1.7.10
junit-platform-launcher.version=1.2.0
# Only used for internal tests in Ant project
junit-vintage-engine.version=5.2.0
# Only used for internal tests in Ant project
junit-jupiter-engine.version=5.2.0
jsch.version=0.1.55
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}
