# 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.5.0
ant-antunit.version=1.4
antlr.version=2.7.7
bcel.version=6.4.1
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}
js.version=20.1.0
js-scriptengine.version=${js.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.mail.version=1.6.4
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}
jdepend.version=2.9.1
jruby.version=1.6.8
junit.version=4.13.1
rhino.version=1.7.11
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}
