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

# Dependency versions
antlr.version = 2.7.7
assertj-core.version = 3.6.2
awaitility.version = 2.0.0
bcel.version = 6.0
catch-exception.version = 1.4.4
catch-throwable.version = 1.4.4
cglib.version = 3.2.4
commons-collections.version = 3.2.2
commons-configuration.version = 1.10
commons-fileupload.version = 1.3.2
commons-io.version = 2.5
commons-lang.version = 2.6
commons-logging.version = 1.2
commons-modeler.version = 2.0.1
commons-beanutils.version = 1.9.3
commons-digester.version=2.1
commons-exec.version=1.3
derby.version = 10.13.1.1
dom4j.version = 1.6.1
fast-classpath-scanner.version=2.0.11
fastutil.version = 7.1.0
google-gson.version=2.8.0
guava.version = 21.0
hamcrest-all.version = 1.3
httpclient.version = 4.5.3
httpcore.version = 4.4.6
httpunit.version = 1.7.2
jackson.version = 2.8.6
jackson-module-scala_2.10.version = 2.8.6
jansi.version = 1.14
javassist.version = 3.21.0-GA
javax.ejb-api.version = 3.0
javax.jsr250-api.version = 1.0
javax.mail-api.version = 1.4.7
javax.persistence-api.version = 2.1.1
javax.resource-api.version = 1.7
javax.servlet-api.version = 3.1.0
javax.transaction-api.version = 1.2
jedis.version = 2.9.0
jetty.version = 9.3.10.v20160621
jgroups.version = 3.6.10.Final
jmock.version = 2.8.2
jna.version = 4.0.0
jopt-simple.version = 5.0.3
json-path.version = 2.2.0
json-path-assert.version = 2.2.0
junit.version = 4.12
junit-quickcheck.version = 0.7
JUnitParams.version = 1.0.6
log4j.version = 2.7
lucene.version = 6.4.1
codec.version = 1.10
mockito-core.version = 1.10.19
mockrunner.version = 1.1.2
mortbay-jetty-servlet-api.version=3.0.20100224
multithreadedtc.version = 1.01
mx4j.version = 3.0.1
mx4j-remote.version = 3.0.1
mx4j-tools.version = 3.0.1
netty-all.version = 4.1.8.Final
open-json.version = 1.8
phantomjsdriver.version=1.3.0
powermock.version = 1.6.6
selenium.version=3.0.1
shiro.version=1.3.2
slf4j-api.version = 1.7.23
snappy-java.version=0.4
spring-hateoas.version = 0.23.0.RELEASE
spring-shell.version = 1.2.0.RELEASE
spring-ldap-core.version = 2.3.1.RELEASE
spring-security.version = 4.2.1.RELEASE
spring-tx.version = 4.3.6.RELEASE
springframework.version = 4.3.6.RELEASE
stephenc-findbugs.version = 1.3.9-1
spymemcached.version = 2.12.2
springfox.version=2.6.1
system-rules.version = 1.16.1
tempus-fugit.version = 1.1
tomcat6.version = 6.0.37
tomcat7.version = 7.0.73
tomcat8.version = 8.5.9
