# 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.0.4
m2.url=http\://repo1.maven.org/maven2
m2.artifact-name=maven-artifact-ant
m2.jar.name=${m2.artifact-name}-${m2.version}-dep.jar
#this is the URL of the antlib library, that is pulled down for everything else.
m2.antlib.url=${m2.url}/org/apache/maven/${m2.artifact-name}/${m2.version}/${m2.jar.name}
#this is the sha1 checksum of the artifact
m2.sha1.checksum=4e7ddfdb91600e9b59bb965ff8eef2f06015df50

# 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
antlr.version=2.7.7
bcel.version=5.1
bsf.version=2.4.0
bsh.version=2.0b4
bsh-core.version=${bsh.version}
commons-net.version=1.4.1
commons-logging.version=1.1
commons-logging-api.version=${commons-logging.version}
jai-core.version=1.1.3
jai-codec.version=1.1.3
jasper-compiler.version=4.1.36
jasper-runtime.version=${jasper-compiler.version}
jdepend.version=2.9.1
jruby.version=0.9.8
junit.version=4.8.1
jsch.version=0.1.42
jython.version=2.1
#log4j 1.2.15 requires JMS and a few other Sun jars that are not in the m2 repo
log4j.version=1.2.14
#js is the javascript implementation of the rhino project
#17R1 is compiled with Java5 so we can't use the jar when building with JDK 1.4
js.version=1.6R7
oro.version=2.0.8
regexp.version=1.3
servlet-api.version=2.3
which.version=1.0
xalan.version=2.7.1
xml-resolver.version=1.2
mail.version=1.4
#paired
jacl.version=1.2.6
tcljava.version=${jacl.version}
