/**
 * 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('commons-net:commons-net:3.8.0')
    dependency('com.fasterxml.jackson.core:jackson-databind:2.11.0')
    dependency('com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.11.0')
    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.9.0')
    dependency('com.google.guava:guava:31.0.1-jre')
    dependency('com.h2database:h2:1.4.197')
    dependency('com.jolbox:bonecp:0.8.0.RELEASE')
    dependency('com.netflix.concurrency-limits:concurrency-limits-core:0.3.6')
    dependency('com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0')
    dependency('com.opentable.components:otj-pg-embedded:0.13.3')
    dependency('com.squareup.okhttp3:okhttp:3.12.0')
    dependency('com.winterbe:expekt:0.5.0')
    dependency('com.zaxxer:HikariCP:4.0.3')
    dependency('dnsjava:dnsjava:3.3.1')
    dependency('info.picocli:picocli:4.0.0-alpha-2')
    dependency('io.grpc:grpc-netty-shaded:1.38.0')
    dependency('io.ktor:ktor-client-core:1.4.2')
    dependency('io.ktor:ktor-client-json:1.4.2')
    dependency('io.ktor:ktor-client-serialization:1.4.2')
    dependency('io.ktor:ktor-client-cio:1.4.2')
    dependency('io.ktor:ktor-network:1.4.2')
    dependency('io.ktor:ktor-server-core:1.4.2')
    dependency('io.ktor:ktor-server-netty:1.4.2')
    dependency('org.springframework.boot:spring-boot-starter-thymeleaf:2.4.1')

    dependency('io.opentelemetry:opentelemetry-api:1.2.0')
    dependency('io.opentelemetry:opentelemetry-api-metrics:1.2.0-alpha')
    dependency('io.opentelemetry:opentelemetry-exporter-otlp-metrics:1.2.0-alpha')
    dependency('io.opentelemetry:opentelemetry-exporter-otlp:1.2.0')
    dependency('io.opentelemetry:opentelemetry-exporter-prometheus:1.2.0-alpha')
    dependency('io.opentelemetry:opentelemetry-extension-trace-propagators:1.2.0')
    dependency('io.opentelemetry:opentelemetry-proto:1.2.0-alpha')
    dependency('io.opentelemetry:opentelemetry-sdk:1.2.0')
    dependency('io.opentelemetry:opentelemetry-sdk-trace:1.2.0')
    dependency('io.opentelemetry:opentelemetry-sdk-metrics:1.2.0-alpha')
    dependency('io.opentelemetry:opentelemetry-semconv:1.2.0-alpha')
    dependency('io.prometheus:simpleclient:0.8.1')
    dependency('io.prometheus:simpleclient_httpserver:0.8.1')
    dependency('io.lettuce:lettuce-core:5.1.3.RELEASE')
    dependency('io.swagger.core.v3:swagger-jaxrs2:2.1.9')
    dependency('org.webjars:swagger-ui:3.50.0')

    dependencySet(group: 'io.vertx', version: '4.1.2') {
      entry 'vertx-core'
      entry 'vertx-lang-kotlin'
      entry 'vertx-lang-kotlin-coroutines'
      entry 'vertx-opentelemetry'
      entry 'vertx-web'
      entry 'vertx-web-client'
    }

    dependency('javax.servlet:javax.servlet-api:4.0.1')
    dependency('javax.persistence:javax.persistence-api:2.2')
    dependencySet(group: 'org.antlr', version: '4.7.1') {
      entry 'antlr4'
      entry 'antlr4-runtime'
    }
    dependency('javax.ws.rs:javax.ws.rs-api:2.1.1')
    dependency('javax.servlet:javax.servlet-api:4.0.1')
    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.66') {
      entry 'bcpkix-jdk15on'
      entry 'bcprov-jdk15on'
    }
    dependencySet(group: 'org.eclipse.jetty', version: '10.0.5') {
      entry 'jetty-server'
      entry 'jetty-servlet'
      entry 'jetty-servlets'
      entry 'jetty-util'
    }
    dependencySet(group: 'org.glassfish.jersey.core', version: '2.34') {
      entry 'jersey-server'
      entry 'jersey-client'
    }
    dependency('org.glassfish.jersey.containers:jersey-container-servlet:2.34')
    dependency('org.glassfish.jersey.inject:jersey-hk2:2.34')
    dependency('javax.xml.bind:jaxb-api:2.3.1')
    dependency('org.flywaydb:flyway-core:7.8.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'
      entry 'junit-jupiter-migrationsupport'
    }
    dependency('org.infinispan:infinispan-core:12.1.3.Final')
    dependency('org.infinispan:infinispan-cachestore-rocksdb:12.1.3.Final')


    dependency('org.jetbrains:annotations:16.0.3')
    dependencySet(group: 'org.jetbrains.kotlin', version: '1.5.31') {
      entry 'kotlin-reflect'
      entry 'kotlin-stdlib'
      entry 'kotlin-stdlib-jdk8'
    }
    dependencySet(group: 'org.jetbrains.kotlinx', version: '1.5.2') {
      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.postgresql:postgresql:42.2.19')

    dependency('org.rocksdb:rocksdbjni:5.17.2')
    dependency('org.slf4j:slf4j-api:1.7.30')
    dependency('org.connid:framework:1.3.2')
    dependency('org.connid:framework-internal:1.3.2')

    dependency('org.webjars:bootstrap:4.1.3')
    dependency('org.webjars:webjars-locator:0.40')

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