# 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.11
jsch.version=0.1.50
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}
