/**
 * 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.13.3')
    dependency('com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.3')
    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_annotations:2.15.0')
    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('net.java.dev.jna:jna:5.11.0')
    dependency('org.hyperledger.besu:bls12-381:0.4.3')
    dependency('org.hyperledger.besu:altbn128:0.4.3')
    dependency('org.hyperledger.besu:secp256k1:0.4.3')

    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-jakarta:2.2.1')
    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.10.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: '11.0.11') {
      entry 'jetty-server'
      entry 'jetty-servlet'
      entry 'jetty-servlets'
      entry 'jetty-util'
    }
    dependencySet(group: 'org.glassfish.jersey.core', version: '3.0.5') {
      entry 'jersey-server'
      entry 'jersey-client'
    }
    dependency('org.glassfish.jersey.containers:jersey-container-servlet:3.0.5')
    dependency('org.glassfish.jersey.inject:jersey-hk2:3.0.5')
    dependency('org.glassfish.jersey.media:jersey-media-json-jackson:3.0.5')
    dependency('javax.xml.bind:jaxb-api:2.3.1')
    dependency('org.flywaydb:flyway-core:7.8.1')

    dependency('org.openlabtesting.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.6.20') {
      entry 'kotlin-reflect'
      entry 'kotlin-stdlib'
      entry 'kotlin-stdlib-jdk8'
    }
    dependencySet(group: 'org.jetbrains.kotlinx', version: '1.6.0') {
      entry 'kotlinx-coroutines-core'
      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:7.3.1')
    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.8.4')
  }
}
