/*
 * 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.
 */
 ext {
  apacheCommonsCollections4Version = "4.0"
  avroVersion = "1.7.1"
  calciteVersion = "1.17.0"
  commonsCliVersion = "1.2"
  commonsCodecVersion = "1.9"
  commonsCollectionVersion = "3.2.1"
  commonsHttpClientVersion = "3.1"
  commonsLang3Version = "3.4"
  elasticsearchVersion = "2.2.0"
  gsonVersion = "2.8.5"
  guavaVersion = "23.0"
  hamcrestVersion = "1.3"
  httpClientVersion = "4.4.1"
  jacksonVersion = "1.9.13"
  jerseyVersion = "2.22.1"
  jodaTimeVersion = "2.2"
  joptSimpleVersion = "3.2"
  junitVersion = "4.12"
  kafkaVersion = "2.0.1"
  log4jVersion = "1.2.17"
  log4j2Version = "2.11.0"
  metricsVersion = "2.2.0"
  mockitoVersion = "1.10.19"
  powerMockVersion = "1.6.6"
  rocksdbVersion = "5.7.3"
  scalaTestVersion = "3.0.1"
  slf4jVersion = "1.7.7"
  yarnVersion = "2.7.1"
  zkClientVersion = "0.8"
  zookeeperVersion = "3.4.6"
  failsafeVersion = "1.1.0"
  jlineVersion = "3.8.2"
  jnaVersion = "4.5.1"
  couchbaseClientVersion = "2.7.2"
  couchbaseMockVersion = "1.5.22"
}
