ext {
  slf4jVersion = '1.7.36'
  guiceVersion = '5.0.1'
  resteasyVersion = '4.7.9.Final'

  jacksonVersion = '2.13.4'

  legmanVersion = '2.0.1'

  mapstructVersion = '1.3.1.Final'
  jaxbVersion = '2.3.3'
  shiroVersion = '1.12.0'
  sspVersion = '1.3.0'
  jjwtVersion = '0.11.5'
  bouncycastleVersion = '1.75'
  jettyVersion = '9.4.51.v20230217'
  luceneVersion = '8.9.0'

  junitJupiterVersion = '5.9.3'
  hamcrestVersion = '2.1'
  mockitoVersion = '3.6.28'
  jerseyClientVersion = '1.19.4'
  micrometerVersion = '1.6.4'

  nodeVersion = '16.14.2'
  yarnVersion = '1.22.18'

  libraries = [
    // lombok
    lombok: 'org.projectlombok:lombok:1.18.28',

    // servlet api
    servletApi: 'javax.servlet:javax.servlet-api:3.1.0',

    // logging
    slf4jApi: "org.slf4j:slf4j-api:${slf4jVersion}",
    slf4jJcl: "org.slf4j:jcl-over-slf4j:${slf4jVersion}",
    logback: 'ch.qos.logback:logback-classic:1.2.9',

    // injection
    guice: "com.google.inject:guice:${guiceVersion}",
    guiceServlet: "com.google.inject.extensions:guice-servlet:${guiceVersion}",
    guiceThrowingproviders: "com.google.inject.extensions:guice-throwingproviders:${guiceVersion}",
    guiceAssistedinject: "com.google.inject.extensions:guice-assistedinject:${guiceVersion}",

    // rest api
    jaxRs: 'javax.ws.rs:javax.ws.rs-api:2.1.1',
    resteasyCore: "org.jboss.resteasy:resteasy-core:${resteasyVersion}",
    resteasyJaxbProvider: "org.jboss.resteasy:resteasy-jaxb-provider:${resteasyVersion}",
    resteasyJackson2Provider: "org.jboss.resteasy:resteasy-jackson2-provider:${resteasyVersion}",
    resteasyMultiartProvider: "org.jboss.resteasy:resteasy-multipart-provider:${resteasyVersion}",
    resteasyGuice: "org.jboss.resteasy:resteasy-guice:${resteasyVersion}",
    resteasyServletInitializer: "org.jboss.resteasy:resteasy-servlet-initializer:${resteasyVersion}",
    resteasyValidatorProvider: "org.jboss.resteasy:resteasy-validator-provider:${resteasyVersion}",

    // cli
    picocli: 'info.picocli:picocli:4.6.3',

    // json
    jacksonCore: "com.fasterxml.jackson.core:jackson-core:${jacksonVersion}!!",
    jacksonAnnotations: "com.fasterxml.jackson.core:jackson-annotations:${jacksonVersion}!!",
    jacksonDatabind: "com.fasterxml.jackson.core:jackson-databind:${jacksonVersion}!!",
    jacksonJaxbAnnotations: "com.fasterxml.jackson.module:jackson-module-jaxb-annotations:${jacksonVersion}",
    jacksonJaxRsBase: "com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:${jacksonVersion}",
    jacksonJaxRsJsonProvider: "com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:${jacksonVersion}",
    jacksonDatatypeJdk8: "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:${jacksonVersion}",
    jacksonDatatypeJsr310: "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:${jacksonVersion}",

    // hypermedia
    edison: 'de.otto.edison:edison-hal:2.1.0',

    // openapi
    swaggerJaxRs: 'io.swagger.core.v3:swagger-jaxrs2:2.1.12',

    // dto mapping
    mapstruct: "org.mapstruct:mapstruct-jdk8:${mapstructVersion}",
    mapstructProcessor: "org.mapstruct:mapstruct-processor:${mapstructVersion}",

    // events
    legman: "com.cloudogu.legman:core:${legmanVersion}",
    legmanShiro: "com.cloudogu.legman.support:shiro:${legmanVersion}",
    legmanMicrometer: "com.cloudogu.legman.support:micrometer:${legmanVersion}",

    // xml binding
    jaxbApi: "jakarta.xml.bind:jakarta.xml.bind-api:${jaxbVersion}",
    jaxbRuntime: "org.glassfish.jaxb:jaxb-runtime:${jaxbVersion}",

    // validation
    validator: 'org.hibernate.validator:hibernate-validator:6.1.6.Final',
    elApi: 'javax.el:javax.el-api:3.0.0',
    elRuntime: 'org.glassfish:javax.el:3.0.1-b11',

    // utils
    guava: 'com.google.guava:guava:32.0.1-jre',
    commonsLang: 'commons-lang:commons-lang:2.6',
    commonsCompress: 'org.apache.commons:commons-compress:1.23.0',
    commonsIo: 'commons-io:commons-io:2.13.0',
    commonsLang3: 'org.apache.commons:commons-lang3:3.13.0',

    // security
    shiroCore: "org.apache.shiro:shiro-core:${shiroVersion}",
    shiroWeb: "org.apache.shiro:shiro-web:${shiroVersion}",
    shiroGuice: "org.apache.shiro:shiro-guice:${shiroVersion}",

    ssp: "com.github.sdorra:ssp-lib:${sspVersion}",
    sspProcessor: "com.github.sdorra:ssp-processor:${sspVersion}",

    shiroUnit: 'com.github.sdorra:shiro-unit:1.0.2',
    shiroExtension: 'com.github.sdorra:junit-shiro-extension:1.0.1',

    // jwt
    jjwtApi: "io.jsonwebtoken:jjwt-api:${jjwtVersion}",
    jjwtRuntime: "io.jsonwebtoken:jjwt-impl:${jjwtVersion}",
    jjwtJackson: "io.jsonwebtoken:jjwt-jackson:${jjwtVersion}",

    // gpg
    bouncycastlePg: "org.bouncycastle:bcpg-jdk15to18:${bouncycastleVersion}",
    bouncycastleProv: "org.bouncycastle:bcprov-jdk15to18:${bouncycastleVersion}",
    bouncycastlePkix: "org.bouncycastle:bcpkix-jdk15to18:${bouncycastleVersion}",

    // service registration
    metainfServices: 'org.kohsuke.metainf-services:metainf-services:1.8',

    // cron expression
    cronUtils: 'com.cronutils:cron-utils:9.1.+',

    // templates
    mustache: 'com.github.spullara.mustache.java:compiler:0.9.10',

    // static resources
    webResources: 'com.github.sdorra:web-resources:1.1.1',

    // content type detection
    spotter: 'com.cloudogu.spotter:spotter-core:4.0.0',
    tika: 'org.apache.tika:tika-core:1.28.5',

    // restart on unix
    akuma: 'org.kohsuke:akuma:1.10',

    // native access
    jna: 'net.java.dev.jna:jna:5.6.0',

    // daemonize scm-manager on unix systems
    commonsDaemon: 'commons-daemon:commons-daemon:1.3.4',
    jsvc: 'commons-daemon:commons-daemon-native:1.1.0@tar.gz',

    // yaml
    snakeYml: 'org.yaml:snakeyaml:1.21',

    // jetty
    jettyServer: "org.eclipse.jetty:jetty-server:${jettyVersion}",
    jettyWebapp: "org.eclipse.jetty:jetty-webapp:${jettyVersion}",
    jettyJmx: "org.eclipse.jetty:jetty-jmx:${jettyVersion}",
    jettyClient: "org.eclipse.jetty:jetty-client:${jettyVersion}",

    // search
    luceneCore: "org.apache.lucene:lucene-core:${luceneVersion}",
    luceneQueryParser: "org.apache.lucene:lucene-queryparser:${luceneVersion}",
    luceneHighlighter: "org.apache.lucene:lucene-highlighter:${luceneVersion}",
    luceneAnalyzersCommon: "org.apache.lucene:lucene-analyzers-common:${luceneVersion}",

    // tests
    junitJupiterApi: "org.junit.jupiter:junit-jupiter-api:${junitJupiterVersion}",
    junitJupiterParams: "org.junit.jupiter:junit-jupiter-params:${junitJupiterVersion}",
    junitJupiterEngine: "org.junit.jupiter:junit-jupiter-engine:${junitJupiterVersion}",

    // junit 4 support
    junitVintageEngine: "org.junit.vintage:junit-vintage-engine:${junitJupiterVersion}",
    junit: 'junit:junit:4.13.2',

    // junit 5 extensions
    junitPioneer: 'org.junit-pioneer:junit-pioneer:2.0.1',

    // assertions
    hamcrestCore: "org.hamcrest:hamcrest-core:${hamcrestVersion}",
    hamcrestLibrary: "org.hamcrest:hamcrest-library:${hamcrestVersion}",
    assertj: 'org.assertj:assertj-core:3.18.1',

    // mocking
    mockitoCore: "org.mockito:mockito-core:${mockitoVersion}",
    mockitoJunitJupiter: "org.mockito:mockito-junit-jupiter:${mockitoVersion}",

    // testing async code
    awaitility: 'org.awaitility:awaitility:4.0.2',

    // rest api client for testing
    jerseyClientApi: "com.sun.jersey:jersey-client:${jerseyClientVersion}",
    jerseyClientRuntime: "com.sun.jersey.contribs:jersey-apache-client:${jerseyClientVersion}",

    // metrics
    micrometerCore: "io.micrometer:micrometer-core:${micrometerVersion}",
    micrometerExtra: "io.github.mweirauch:micrometer-jvm-extras:0.2.2"
  ]
}
