/**
 * 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('ch.qos.logback:logback-classic:1.2.3')
    dependency('commons-codec:commons-codec:1.14')
    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.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0')
    dependency('com.squareup.okhttp3:okhttp:3.12.0')
    dependency('com.winterbe:expekt:0.5.0')
    dependency('dnsjava:dnsjava:3.0.2')
    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.apache.openjpa:openjpa:3.1.0')
    dependency('org.assertj:assertj-core:3.11.1')
    dependencySet(group: 'org.bouncycastle', version: '1.60') {
      entry 'bcpkix-jdk15on'
      entry 'bcprov-jdk15on'
    }
    dependencySet(group: 'org.eclipse.jetty', version: '9.4.0.v20161208') {
      entry 'jetty-server'
      entry 'jetty-servlet'
      entry 'jetty-util'
    }
    dependency('org.ethereum:evmc:7.4.0.3')
    dependencySet(group: 'org.glassfish.jersey.core', version: '2.31') {
      entry 'jersey-server'
      entry 'jersey-client'
    }
    dependency('org.glassfish.jersey.containers:jersey-container-servlet:2.31')
    dependency('org.glassfish.jersey.inject:jersey-hk2:2.31')
    dependency('javax.xml.bind:jaxb-api:2.3.1')

    dependency('org.fusesource.leveldbjni:leveldbjni-all:1.8')
    dependencySet(group: 'org.junit.jupiter', version: '5.6.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'
    }
    dependency('org.mapdb:mapdb:3.0.7')
    dependency('org.miracl.milagro.amcl:milagro-crypto-java:0.4.0')
    dependency('org.mockito:mockito-junit-jupiter:3.3.3')

    dependency('org.rocksdb:rocksdbjni:5.17.2')
    dependency('org.slf4j:slf4j-api:1.7.30')

    dependency('org.xerial.snappy:snappy-java:1.1.7.2')
  }
}
