/**
 * 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.
 */
dependencyManagement {
  dependencies {
    dependency('commons-codec:commons-codec:1.12')
    dependency('com.fasterxml.jackson.core:jackson-databind:2.9.5')
    dependency('com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.9.8')
    dependency('com.github.jnr:jnr-ffi:2.1.9')
    dependency('com.github.kstyrc:embedded-redis:0.6')
    dependency('com.google.code.findbugs:jsr305:3.0.2')
    dependency('com.google.errorprone:error_prone_core:2.3.2')
    dependency('com.google.errorprone:javac:9+181-r4173-1')
    dependency('com.google.guava:guava:27.0.1-jre')
    dependency('com.h2database:h2:1.4.197')
    dependency('com.jolbox:bonecp:0.8.0.RELEASE')
    dependency('com.squareup.okhttp3:okhttp:3.12.0')
    dependency('com.winterbe:expekt:0.5.0')
    dependency('dnsjava:dnsjava:2.1.8')
    dependency('info.picocli:picocli:4.0.0-alpha-2')
    dependency('io.lettuce:lettuce-core:5.1.3.RELEASE')
    dependency('io.vertx:vertx-core:3.6.2')
    dependency('javax.persistence:javax.persistence-api:2.2')
    dependencySet(group: 'org.antlr', version: '4.7.1') {
      entry 'antlr4'
      entry 'antlr4-runtime'
    }
    dependency('org.apache.lucene:lucene-core:7.6.0')
    dependency('org.assertj:assertj-core:3.11.1')
    dependencySet(group: 'org.bouncycastle', version: '1.60') {
      entry 'bcpkix-jdk15on'
      entry 'bcprov-jdk15on'
    }
    dependency('org.fusesource.leveldbjni:leveldbjni-all:1.8')
    dependencySet(group: 'org.junit.jupiter', version: '5.3.2') {
      entry 'junit-jupiter-api'
      entry 'junit-jupiter-engine'
      entry 'junit-jupiter-params'
    }
    dependency('org.infinispan:infinispan-core:9.4.5.Final')
    dependency('org.jetbrains:annotations:16.0.3')
    dependencySet(group: 'org.jetbrains.kotlin', version: '1.3.20') {
      entry 'kotlin-reflect'
      entry 'kotlin-stdlib'
      entry 'kotlin-stdlib-jdk8'
    }
    dependencySet(group: 'org.jetbrains.kotlinx', version: '1.1.1') {
      entry 'kotlinx-coroutines-core'
      entry 'kotlinx-coroutines-guava'
      entry 'kotlinx-coroutines-jdk8'
    }
    dependencySet(group: 'org.jetbrains.spek', version: '1.1.5') {
      entry 'spek-api'
      entry 'spek-junit-platform-engine'
    }
    dependencySet(group: 'org.logl', version: '0.3.1') {
      entry 'logl-api'
      entry 'logl-logl'
      entry 'logl-vertx'
    }
    dependency('org.mapdb:mapdb:3.0.7')
    dependency('org.miracl.milagro.amcl:milagro-crypto-java:0.4.0')
    dependency('org.rocksdb:rocksdbjni:5.17.2')
    dependency('org.xerial.snappy:snappy-java:1.1.7.2')
  }
}
