<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.trib3</groupId>
    <artifactId>parent-pom</artifactId>
    <version>2.0.4255</version>
    <packaging>pom</packaging>

    <name>Trib3 parent pom</name>
    <description>Parent pom for downstream projects</description>
    <url>https://github.com/trib3/leakycauldron/tree/HEAD/parent-pom</url>

    <licenses>
        <license>
            <name>The Apache License, Version 2.0</name>
            <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
        </license>
    </licenses>

    <developers>
        <developer>
            <organization>Tribe Dynamics</organization>
            <organizationUrl>https://www.tribedynamics.com</organizationUrl>
        </developer>
    </developers>

    <scm>
        <url>https://github.com/trib3/leakycauldron</url>
        <developerConnection>scm:git:.</developerConnection>
        <connection>scm:git:git://github.com/trib3/leakycauldron.git</connection>
    </scm>

    <properties>
        <kotlin.compiler.incremental>true</kotlin.compiler.incremental>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <skip.checks>false</skip.checks>
        <skip.docs>false</skip.docs>
        <skip.source>false</skip.source>
        <skip.tests>false</skip.tests>

        <version.activation>1.2.2</version.activation>
        <version.annotation>1.3.5</version.annotation>
        <version.ant>1.10.13</version.ant>
        <version.argparse4j>0.9.0</version.argparse4j>
        <version.assertk>0.25</version.assertk>
        <version.aws.java>2.20.38</version.aws.java>
        <version.byte-buddy>1.14.3</version.byte-buddy>
        <version.caffeine>3.1.5</version.caffeine>
        <version.checker-qual>3.33.0</version.checker-qual>
        <version.classgraph>4.8.157</version.classgraph>
        <version.commons-codec>1.15</version.commons-codec>
        <version.commons-compress>1.23.0</version.commons-compress>
        <version.commons-io>2.11.0</version.commons-io>
        <version.commons-lang3>3.12.0</version.commons-lang3>
        <version.commons-text>1.10.0</version.commons-text>
        <version.config4k>0.5.0</version.config4k>
        <version.detekt>1.22.0</version.detekt>
        <version.dokka>1.8.10</version.dokka>
        <version.dropwizard>3.0.0</version.dropwizard>
        <version.dropwizard.hocon>0.5.1</version.dropwizard.hocon>
        <version.dropwizard.metrics>4.2.18</version.dropwizard.metrics>
        <version.dropwizard.metrics.cloudwatch>2.0.8</version.dropwizard.metrics.cloudwatch>
        <version.dropwizard.metrics.guice>4.0.0</version.dropwizard.metrics.guice>
        <version.easymock>5.1.0</version.easymock>
        <version.flyway>9.16.1</version.flyway>
        <version.graphql-kotlin>6.4.0</version.graphql-kotlin>
        <version.graphql-java>20.2</version.graphql-java>
        <version.graphql-java-extended-scalars>20.0</version.graphql-java-extended-scalars>
        <version.graphql-java.dataloader>3.2.0</version.graphql-java.dataloader>
        <version.guava>31.1-jre</version.guava>
        <version.guice>5.1.0</version.guice>
        <version.hibernate.validator>6.2.5.Final</version.hibernate.validator>
        <version.hikaricp>5.0.1</version.hikaricp>
        <version.hk2>2.6.1</version.hk2>
        <version.httpcomponents.client>5.2.1</version.httpcomponents.client>
        <version.httpcomponents.core>5.2.1</version.httpcomponents.core>
        <version.jackson>2.14.2</version.jackson>
        <version.jackson.hocon>1.1.0</version.jackson.hocon>
        <version.jacoco>0.8.9</version.jacoco>
        <version.jakarta.inject>1.0.5</version.jakarta.inject>
        <version.java.release>17</version.java.release>
        <version.jaxb>2.3.3</version.jaxb>
        <version.jaxrs>2.1.6</version.jaxrs>
        <version.jersey>2.39.1</version.jersey>
        <version.jetbrains.annotations>13.0</version.jetbrains.annotations>
        <version.jetty>10.0.14</version.jetty>
        <version.jna>5.13.0</version.jna>
        <version.joda>2.12.5</version.joda>
        <version.jooq>3.18.2</version.jooq>
        <version.jsr305>3.0.2</version.jsr305>
        <version.junit>4.13.2</version.junit>
        <version.kotlin>1.8.20</version.kotlin>
        <version.kotlin.coroutines>1.6.4</version.kotlin.coroutines>
        <version.kotlin.guice>1.6.0</version.kotlin.guice>
        <version.kotlin.logging>3.0.5</version.kotlin.logging>
        <version.ktlint>0.48.2</version.ktlint>
        <version.leakycauldron>${project.version}</version.leakycauldron>
        <version.logback>1.3.6</version.logback>
        <version.maven.antrun>3.1.0</version.maven.antrun>
        <version.maven.assembly>3.5.0</version.maven.assembly>
        <version.maven.buildhelper>3.3.0</version.maven.buildhelper>
        <version.maven.clean>3.2.0</version.maven.clean>
        <version.maven.compiler>3.11.0</version.maven.compiler>
        <version.maven.dependency>3.5.0</version.maven.dependency>
        <version.maven.dependencyscope>0.10</version.maven.dependencyscope>
        <version.maven.deploy>3.1.1</version.maven.deploy>
        <version.maven.enforcer>3.0.0-M3</version.maven.enforcer>
        <version.maven.failsafe>3.0.0</version.maven.failsafe>
        <version.maven.git>4.9.10</version.maven.git>
        <version.maven.gpg>3.0.1</version.maven.gpg>
        <version.maven.install>3.1.1</version.maven.install>
        <version.maven.jar>3.3.0</version.maven.jar>
        <version.maven.properties>1.1.0</version.maven.properties>
        <version.maven.resources>3.3.1</version.maven.resources>
        <version.maven.shade>3.4.1</version.maven.shade>
        <version.maven.source>3.2.1</version.maven.source>
        <version.maven.surefire>3.0.0</version.maven.surefire>
        <version.netty>4.1.91.Final</version.netty>
        <version.postgres>42.6.0</version.postgres>
        <version.reactivestreams>1.0.4</version.reactivestreams>
        <version.redshift>2.1.0.13</version.redshift>
        <version.servlet>4.0.4</version.servlet>
        <version.slf4j>2.0.7</version.slf4j>
        <version.snakeyaml>2.0</version.snakeyaml>
        <version.swagger>2.2.9</version.swagger>
        <version.testcontainers>1.17.6</version.testcontainers>
        <version.testng>7.7.1</version.testng>
        <version.threeten>1.7.2</version.threeten>
        <version.typesafe.config>1.4.2</version.typesafe.config>
        <version.validation>2.0.2</version.validation>
    </properties>

    <repositories>
        <repository>
            <id>central</id>
            <url>https://repo.maven.apache.org/maven2</url>
            <layout>default</layout>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>jcenter</id>
            <url>https://jcenter.bintray.com/</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>central</id>
            <url>https://repo.maven.apache.org/maven2</url>
            <layout>default</layout>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
            <releases>
                <updatePolicy>never</updatePolicy>
            </releases>
        </pluginRepository>
        <pluginRepository>
            <id>jcenter</id>
            <url>https://jcenter.bintray.com/</url>
        </pluginRepository>
    </pluginRepositories>

    <dependencyManagement>
        <dependencies>
            <!-- kotlin -->
            <dependency>
                <groupId>org.jetbrains.kotlin</groupId>
                <artifactId>kotlin-bom</artifactId>
                <version>${version.kotlin}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.jetbrains</groupId>
                <artifactId>annotations</artifactId>
                <version>${version.jetbrains.annotations}</version>
            </dependency>

            <!-- logging -->
            <dependency>
                <groupId>io.github.microutils</groupId>
                <artifactId>kotlin-logging-jvm</artifactId>
                <version>${version.kotlin.logging}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.jetbrains.kotlin</groupId>
                        <artifactId>kotlin-stdlib-common</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>${version.slf4j}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>jcl-over-slf4j</artifactId>
                <version>${version.slf4j}</version>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>${version.logback}</version>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
                <version>${version.logback}</version>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-access</artifactId>
                <version>${version.logback}</version>
            </dependency>

            <!-- utils -->
            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <version>${version.guava}</version>
                <exclusions>
                    <exclusion>
                        <groupId>com.google.errorprone</groupId>
                        <artifactId>error_prone_annotations</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>com.github.ben-manes.caffeine</groupId>
                <artifactId>caffeine</artifactId>
                <version>${version.caffeine}</version>
            </dependency>
            <dependency>
                <groupId>net.bytebuddy</groupId>
                <artifactId>byte-buddy</artifactId>
                <version>${version.byte-buddy}</version>
            </dependency>
            <dependency>
                <groupId>net.sourceforge.argparse4j</groupId>
                <artifactId>argparse4j</artifactId>
                <version>${version.argparse4j}</version>
            </dependency>
            <dependency>
                <groupId>org.threeten</groupId>
                <artifactId>threeten-extra</artifactId>
                <version>${version.threeten}</version>
            </dependency>
            <dependency>
                <groupId>org.checkerframework</groupId>
                <artifactId>checker-qual</artifactId>
                <version>${version.checker-qual}</version>
            </dependency>

            <!-- dropwizard -->
            <dependency>
                <groupId>io.dropwizard</groupId>
                <artifactId>dropwizard-core</artifactId>
                <version>${version.dropwizard}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.glassfish.hk2.external</groupId>
                        <artifactId>jakarta.inject</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>javax.validation</groupId>
                        <artifactId>validation-api</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>io.dropwizard</groupId>
                <artifactId>dropwizard-configuration</artifactId>
                <version>${version.dropwizard}</version>
            </dependency>
            <dependency>
                <groupId>io.dropwizard</groupId>
                <artifactId>dropwizard-auth</artifactId>
                <version>${version.dropwizard}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.glassfish.hk2.external</groupId>
                        <artifactId>jakarta.inject</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>io.dropwizard</groupId>
                <artifactId>dropwizard-metrics</artifactId>
                <version>${version.dropwizard}</version>
            </dependency>
            <dependency>
                <groupId>io.dropwizard</groupId>
                <artifactId>dropwizard-jersey</artifactId>
                <version>${version.dropwizard}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.glassfish.hk2.external</groupId>
                        <artifactId>aopalliance-repackaged</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.glassfish.hk2.external</groupId>
                        <artifactId>jakarta.inject</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>javax.xml.bind</groupId>
                        <artifactId>jaxb-api</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.hibernate.validator</groupId>
                        <artifactId>hibernate-validator</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>javax.validation</groupId>
                        <artifactId>validation-api</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>javax.servlet</groupId>
                        <artifactId>javax.servlet-api</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>javax.activation</groupId>
                        <artifactId>javax.activation-api</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>jakarta.activation</groupId>
                        <artifactId>jakarta.activation-api</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>io.dropwizard</groupId>
                <artifactId>dropwizard-jackson</artifactId>
                <version>${version.dropwizard}</version>
            </dependency>
            <dependency>
                <groupId>io.dropwizard</groupId>
                <artifactId>dropwizard-jetty</artifactId>
                <version>${version.dropwizard}</version>
            </dependency>
            <dependency>
                <groupId>io.dropwizard</groupId>
                <artifactId>dropwizard-logging</artifactId>
                <version>${version.dropwizard}</version>
            </dependency>
            <dependency>
                <groupId>io.dropwizard</groupId>
                <artifactId>dropwizard-request-logging</artifactId>
                <version>${version.dropwizard}</version>
            </dependency>
            <dependency>
                <groupId>io.dropwizard</groupId>
                <artifactId>dropwizard-servlets</artifactId>
                <version>${version.dropwizard}</version>
            </dependency>
            <dependency>
                <groupId>io.dropwizard</groupId>
                <artifactId>dropwizard-testing</artifactId>
                <version>${version.dropwizard}</version>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>junit</groupId>
                        <artifactId>junit</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.objenesis</groupId>
                        <artifactId>objenesis</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.glassfish.hk2.external</groupId>
                        <artifactId>jakarta.inject</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>jakarta.activation</groupId>
                        <artifactId>jakarta.activation-api</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>io.dropwizard</groupId>
                <artifactId>dropwizard-validation</artifactId>
                <version>${version.dropwizard}</version>
            </dependency>
            <dependency>
                <groupId>io.dropwizard.metrics</groupId>
                <artifactId>metrics-healthchecks</artifactId>
                <version>${version.dropwizard.metrics}</version>
            </dependency>
            <dependency>
                <groupId>io.dropwizard.metrics</groupId>
                <artifactId>metrics-annotation</artifactId>
                <version>${version.dropwizard.metrics}</version>
            </dependency>
            <dependency>
                <groupId>io.dropwizard.metrics</groupId>
                <artifactId>metrics-core</artifactId>
                <version>${version.dropwizard.metrics}</version>
            </dependency>
            <dependency>
                <groupId>io.dropwizard.metrics</groupId>
                <artifactId>metrics-jvm</artifactId>
                <version>${version.dropwizard.metrics}</version>
            </dependency>
            <dependency>
                <groupId>io.dropwizard.metrics</groupId>
                <artifactId>metrics-json</artifactId>
                <version>${version.dropwizard.metrics}</version>
            </dependency>
            <dependency>
                <groupId>io.dropwizard.metrics</groupId>
                <artifactId>metrics-servlets</artifactId>
                <version>${version.dropwizard.metrics}</version>
                <exclusions>
                    <exclusion>
                        <groupId>joda-time</groupId>
                        <artifactId>joda-time</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>com.sun.activation</groupId>
                <artifactId>jakarta.activation</artifactId>
                <version>${version.activation}</version>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>jakarta.xml.bind</groupId>
                <artifactId>jakarta.xml.bind-api</artifactId>
                <version>${version.jaxb}</version>
                <scope>runtime</scope>
                <exclusions>
                    <exclusion>
                        <groupId>jakarta.activation</groupId>
                        <artifactId>jakarta.activation-api</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.glassfish.jaxb</groupId>
                <artifactId>jaxb-runtime</artifactId>
                <version>${version.jaxb}</version>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>jakarta.annotation</groupId>
                <artifactId>jakarta.annotation-api</artifactId>
                <version>${version.annotation}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.glassfish.hk2.external</groupId>
                        <artifactId>jakarta.inject</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>jakarta.ws.rs</groupId>
                <artifactId>jakarta.ws.rs-api</artifactId>
                <version>${version.jaxrs}</version>
            </dependency>
            <dependency>
                <groupId>jakarta.validation</groupId>
                <artifactId>jakarta.validation-api</artifactId>
                <version>${version.validation}</version>
            </dependency>
            <dependency>
                <groupId>jakarta.servlet</groupId>
                <artifactId>jakarta.servlet-api</artifactId>
                <version>${version.servlet}</version>
            </dependency>
            <dependency>
                <groupId>com.palominolabs.metrics</groupId>
                <artifactId>metrics-guice</artifactId>
                <version>${version.dropwizard.metrics.guice}</version>
            </dependency>
            <dependency>
                <groupId>org.hibernate.validator</groupId>
                <artifactId>hibernate-validator</artifactId>
                <version>${version.hibernate.validator}</version>
                <exclusions>
                    <exclusion>
                        <groupId>com.fasterxml</groupId>
                        <artifactId>classmate</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <!-- jersey (and hk2) -->
            <dependency>
                <groupId>org.glassfish.hk2</groupId>
                <artifactId>hk2-api</artifactId>
                <version>${version.hk2}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.glassfish.hk2.external</groupId>
                        <artifactId>aopalliance-repackaged</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.glassfish.jersey.core</groupId>
                <artifactId>jersey-common</artifactId>
                <version>${version.jersey}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.glassfish.hk2.external</groupId>
                        <artifactId>aopalliance-repackaged</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.glassfish.hk2.external</groupId>
                        <artifactId>jakarta.inject</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.glassfish.jersey.inject</groupId>
                <artifactId>jersey-hk2</artifactId>
                <version>${version.jersey}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.javassist</groupId>
                        <artifactId>javassist</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.glassfish.jersey.core</groupId>
                <artifactId>jersey-server</artifactId>
                <version>${version.jersey}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.glassfish.hk2.external</groupId>
                        <artifactId>aopalliance-repackaged</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.glassfish.hk2.external</groupId>
                        <artifactId>jakarta.inject</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.javassist</groupId>
                        <artifactId>javassist</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>javax.validation</groupId>
                        <artifactId>validation-api</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.glassfish.jersey.ext</groupId>
                <artifactId>jersey-bean-validation</artifactId>
                <version>${version.jersey}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.hibernate.validator</groupId>
                        <artifactId>hibernate-validator</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.glassfish.hk2.external</groupId>
                        <artifactId>jakarta.inject</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>javax.validation</groupId>
                        <artifactId>validation-api</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.glassfish</groupId>
                        <artifactId>jakarta.el</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.glassfish.jersey.containers</groupId>
                <artifactId>jersey-container-servlet-core</artifactId>
                <version>${version.jersey}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.glassfish.hk2.external</groupId>
                        <artifactId>jakarta.inject</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.glassfish.jersey.containers</groupId>
                <artifactId>jersey-container-jetty-http</artifactId>
                <version>${version.jersey}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.glassfish.hk2.external</groupId>
                        <artifactId>jakarta.inject</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.glassfish.jersey.containers</groupId>
                <artifactId>jersey-container-jetty-servlet</artifactId>
                <version>${version.jersey}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.glassfish.hk2.external</groupId>
                        <artifactId>jakarta.inject</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.eclipse.jetty</groupId>
                        <artifactId>jetty-util</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.eclipse.jetty</groupId>
                        <artifactId>jetty-continuation</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.eclipse.jetty</groupId>
                        <artifactId>jetty-webapp</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.glassfish.jersey.core</groupId>
                <artifactId>jersey-client</artifactId>
                <version>${version.jersey}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.glassfish.hk2.external</groupId>
                        <artifactId>jakarta.inject</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.glassfish.jersey.media</groupId>
                <artifactId>jersey-media-sse</artifactId>
                <version>${version.jersey}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.glassfish.hk2.external</groupId>
                        <artifactId>jakarta.inject</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.glassfish.jersey.test-framework</groupId>
                <artifactId>jersey-test-framework-core</artifactId>
                <version>${version.jersey}</version>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.glassfish.hk2.external</groupId>
                        <artifactId>jakarta.inject</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.glassfish.jersey.test-framework.providers</groupId>
                <artifactId>jersey-test-framework-provider-inmemory</artifactId>
                <version>${version.jersey}</version>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.glassfish.hk2.external</groupId>
                        <artifactId>jakarta.inject</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.glassfish.jersey.test-framework.providers</groupId>
                <artifactId>jersey-test-framework-provider-grizzly2</artifactId>
                <version>${version.jersey}</version>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.glassfish.hk2.external</groupId>
                        <artifactId>jakarta.inject</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.glassfish.jersey.test-framework.providers</groupId>
                <artifactId>jersey-test-framework-provider-jetty</artifactId>
                <version>${version.jersey}</version>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.glassfish.hk2.external</groupId>
                        <artifactId>jakarta.inject</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <!-- jetty -->
            <dependency>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-bom</artifactId>
                <version>${version.jetty}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-server</artifactId>
                <version>${version.jetty}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.eclipse.jetty.toolchain</groupId>
                        <artifactId>jetty-servlet-api</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.eclipse.jetty.websocket</groupId>
                <artifactId>websocket-jetty-server</artifactId>
                <version>${version.jetty}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.eclipse.jetty.toolchain</groupId>
                        <artifactId>jetty-servlet-api</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <!-- swagger -->
            <dependency>
                <groupId>io.swagger.core.v3</groupId>
                <artifactId>swagger-models</artifactId>
                <version>${version.swagger}</version>
            </dependency>
            <dependency>
                <groupId>io.swagger.core.v3</groupId>
                <artifactId>swagger-annotations</artifactId>
                <version>${version.swagger}</version>
            </dependency>
            <dependency>
                <groupId>io.swagger.core.v3</groupId>
                <artifactId>swagger-integration</artifactId>
                <version>${version.swagger}</version>
                <exclusions>
                    <exclusion>
                        <groupId>com.fasterxml.jackson.dataformat</groupId>
                        <artifactId>jackson-dataformat-yaml</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>com.fasterxml.jackson.datatype</groupId>
                        <artifactId>jackson-datatype-jsr310</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>com.fasterxml.jackson.jaxrs</groupId>
                        <artifactId>jackson-jaxrs-json-provider</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>javax.xml.bind</groupId>
                        <artifactId>jaxb-api</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>javax.validation</groupId>
                        <artifactId>validation-api</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>io.swagger.core.v3</groupId>
                <artifactId>swagger-jaxrs2</artifactId>
                <version>${version.swagger}</version>
                <exclusions>
                    <exclusion>
                        <groupId>com.fasterxml.jackson.dataformat</groupId>
                        <artifactId>jackson-dataformat-yaml</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>com.fasterxml.jackson.datatype</groupId>
                        <artifactId>jackson-datatype-jsr310</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>com.fasterxml.jackson.jaxrs</groupId>
                        <artifactId>jackson-jaxrs-json-provider</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.javassist</groupId>
                        <artifactId>javassist</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>


            <!-- jackson -->
            <dependency>
                <groupId>com.fasterxml.jackson</groupId>
                <artifactId>jackson-bom</artifactId>
                <version>${version.jackson}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.datatype</groupId>
                <artifactId>jackson-datatype-joda</artifactId>
                <exclusions>
                    <exclusion>
                        <groupId>joda-time</groupId>
                        <artifactId>joda-time</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>joda-time</groupId>
                <artifactId>joda-time</artifactId>
                <version>${version.joda}</version>
            </dependency>
            <dependency>
                <groupId>org.yaml</groupId>
                <artifactId>snakeyaml</artifactId>
                <version>${version.snakeyaml}</version>
            </dependency>

            <!-- AWS -->
            <dependency>
                <groupId>software.amazon.awssdk</groupId>
                <artifactId>bom</artifactId>
                <version>${version.aws.java}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>software.amazon.awssdk</groupId>
                <artifactId>cloudwatch</artifactId>
                <version>${version.aws.java}</version>
                <exclusions>
                    <exclusion>
                        <groupId>commons-logging</groupId>
                        <artifactId>commons-logging</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>software.amazon.awssdk</groupId>
                <artifactId>kms</artifactId>
                <version>${version.aws.java}</version>
                <exclusions>
                    <exclusion>
                        <groupId>commons-logging</groupId>
                        <artifactId>commons-logging</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.reactivestreams</groupId>
                        <artifactId>reactive-streams</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>com.typesafe.netty</groupId>
                        <artifactId>netty-reactive-streams-http</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>software.amazon.awssdk</groupId>
                <artifactId>s3</artifactId>
                <version>${version.aws.java}</version>
                <exclusions>
                    <exclusion>
                        <groupId>commons-logging</groupId>
                        <artifactId>commons-logging</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.reactivestreams</groupId>
                        <artifactId>reactive-streams</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>com.typesafe.netty</groupId>
                        <artifactId>netty-reactive-streams-http</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>software.amazon.awssdk</groupId>
                <artifactId>sts</artifactId>
                <version>${version.aws.java}</version>
                <exclusions>
                    <exclusion>
                        <groupId>commons-logging</groupId>
                        <artifactId>commons-logging</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.apache.httpcomponents.core5</groupId>
                <artifactId>httpcore5</artifactId>
                <version>${version.httpcomponents.core}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.httpcomponents.client5</groupId>
                <artifactId>httpclient5</artifactId>
                <version>${version.httpcomponents.client}</version>
            </dependency>
            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-bom</artifactId>
                <version>${version.netty}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>io.github.azagniotov</groupId>
                <artifactId>dropwizard-metrics-cloudwatch</artifactId>
                <version>${version.dropwizard.metrics.cloudwatch}</version>
            </dependency>

            <!-- commons -->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>${version.commons-lang3}</version>
            </dependency>
            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>${version.commons-io}</version>
            </dependency>
            <dependency>
                <groupId>commons-codec</groupId>
                <artifactId>commons-codec</artifactId>
                <version>${version.commons-codec}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-compress</artifactId>
                <version>${version.commons-compress}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-text</artifactId>
                <version>${version.commons-text}</version>
            </dependency>

            <!-- guice -->
            <dependency>
                <groupId>com.google.inject</groupId>
                <artifactId>guice</artifactId>
                <version>${version.guice}</version>
                <exclusions>
                    <exclusion>
                        <groupId>javax.inject</groupId>
                        <artifactId>javax.inject</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>com.google.inject.extensions</groupId>
                <artifactId>guice-assistedinject</artifactId>
                <version>${version.guice}</version>
            </dependency>
            <dependency>
                <groupId>jakarta.inject</groupId>
                <artifactId>jakarta.inject-api</artifactId>
                <version>${version.jakarta.inject}</version>
            </dependency>
            <dependency>
                <groupId>dev.misfitlabs.kotlinguice4</groupId>
                <artifactId>kotlin-guice</artifactId>
                <version>${version.kotlin.guice}</version>
            </dependency>
            <dependency>
                <groupId>com.google.code.findbugs</groupId>
                <artifactId>jsr305</artifactId>
                <version>${version.jsr305}</version>
            </dependency>

            <!-- hocon config -->
            <dependency>
                <groupId>io.github.config4k</groupId>
                <artifactId>config4k</artifactId>
                <version>${version.config4k}</version>
            </dependency>
            <dependency>
                <groupId>com.typesafe</groupId>
                <artifactId>config</artifactId>
                <version>${version.typesafe.config}</version>
            </dependency>
            <dependency>
                <groupId>com.jasonclawson.dropwizardry</groupId>
                <artifactId>dropwizardry-config-hocon</artifactId>
                <version>${version.dropwizard.hocon}</version>
                <exclusions>
                    <exclusion>
                        <groupId>com.jasonclawson</groupId>
                        <artifactId>jackson-dataformat-hocon</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>io.dropwizard</groupId>
                        <artifactId>dropwizard-core</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>com.jasonclawson</groupId>
                <artifactId>jackson-dataformat-hocon</artifactId>
                <version>${version.jackson.hocon}</version>
            </dependency>

            <!-- reactive -->
            <dependency>
                <groupId>org.reactivestreams</groupId>
                <artifactId>reactive-streams</artifactId>
                <version>${version.reactivestreams}</version>
            </dependency>

            <!-- coroutines -->
            <dependency>
                <groupId>org.jetbrains.kotlinx</groupId>
                <artifactId>kotlinx-coroutines-bom</artifactId>
                <version>${version.kotlin.coroutines}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>net.java.dev.jna</groupId>
                <artifactId>jna</artifactId>
                <version>${version.jna}</version>
            </dependency>
            <dependency>
                <groupId>net.java.dev.jna</groupId>
                <artifactId>jna-platform</artifactId>
                <version>${version.jna}</version>
            </dependency>

            <!-- db -->
            <dependency>
                <groupId>org.jooq</groupId>
                <artifactId>jooq</artifactId>
                <version>${version.jooq}</version>
                <exclusions>
                    <exclusion>
                        <groupId>javax.xml.bind</groupId>
                        <artifactId>jaxb-api</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.jooq</groupId>
                <artifactId>jooq-meta</artifactId>
                <version>${version.jooq}</version>
            </dependency>
            <dependency>
                <groupId>org.jooq</groupId>
                <artifactId>jooq-codegen</artifactId>
                <version>${version.jooq}</version>
            </dependency>
            <dependency>
                <groupId>com.zaxxer</groupId>
                <artifactId>HikariCP</artifactId>
                <version>${version.hikaricp}</version>
            </dependency>
            <dependency>
                <groupId>org.flywaydb</groupId>
                <artifactId>flyway-core</artifactId>
                <version>${version.flyway}</version>
            </dependency>

            <!-- jdbc drivers -->
            <dependency>
                <groupId>com.amazon.redshift</groupId>
                <artifactId>redshift-jdbc42</artifactId>
                <version>${version.redshift}</version>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.postgresql</groupId>
                <artifactId>postgresql</artifactId>
                <version>${version.postgres}</version>
                <scope>runtime</scope>
            </dependency>

            <!-- testing -->
            <dependency>
                <groupId>org.testng</groupId>
                <artifactId>testng</artifactId>
                <version>${version.testng}</version>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>com.google.inject</groupId>
                        <artifactId>guice</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.yaml</groupId>
                        <artifactId>snakeyaml</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${version.junit}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.ant</groupId>
                <artifactId>ant</artifactId>
                <version>${version.ant}</version>
            </dependency>
            <dependency>
                <groupId>com.willowtreeapps.assertk</groupId>
                <artifactId>assertk-jvm</artifactId>
                <version>${version.assertk}</version>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.jetbrains.kotlin</groupId>
                        <artifactId>kotlin-stdlib-common</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.jetbrains.kotlin</groupId>
                        <artifactId>kotlin-stdlib-jdk8</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.easymock</groupId>
                <artifactId>easymock</artifactId>
                <version>${version.easymock}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>com.trib3</groupId>
                <artifactId>testing</artifactId>
                <version>${version.leakycauldron}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.testcontainers</groupId>
                <artifactId>postgresql</artifactId>
                <version>${version.testcontainers}</version>
                <scope>test</scope>
            </dependency>

            <!-- graphQL -->
            <dependency>
                <groupId>com.graphql-java</groupId>
                <artifactId>graphql-java</artifactId>
                <version>${version.graphql-java}</version>
                <exclusions>
                    <exclusion>
                        <groupId>com.fasterxml.jackson.datatype</groupId>
                        <artifactId>jackson-datatype-jdk8</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>com.graphql-java</groupId>
                <artifactId>graphql-java-extended-scalars</artifactId>
                <version>${version.graphql-java-extended-scalars}</version>
            </dependency>
            <dependency>
                <groupId>com.graphql-java</groupId>
                <artifactId>java-dataloader</artifactId>
                <version>${version.graphql-java.dataloader}</version>
            </dependency>
            <dependency>
                <groupId>com.expediagroup</groupId>
                <artifactId>graphql-kotlin-schema-generator</artifactId>
                <version>${version.graphql-kotlin}</version>
            </dependency>
            <dependency>
                <groupId>com.expediagroup</groupId>
                <artifactId>graphql-kotlin-federation</artifactId>
                <version>${version.graphql-kotlin}</version>
            </dependency>
            <dependency>
                <groupId>com.expediagroup</groupId>
                <artifactId>graphql-kotlin-dataloader</artifactId>
                <version>${version.graphql-kotlin}</version>
            </dependency>
            <dependency>
                <groupId>com.expediagroup</groupId>
                <artifactId>graphql-kotlin-dataloader-instrumentation</artifactId>
                <version>${version.graphql-kotlin}</version>
            </dependency>
            <dependency>
                <groupId>com.expediagroup</groupId>
                <artifactId>graphql-kotlin-client</artifactId>
                <version>${version.graphql-kotlin}</version>
            </dependency>
            <dependency>
                <groupId>com.expediagroup</groupId>
                <artifactId>graphql-kotlin-server</artifactId>
                <version>${version.graphql-kotlin}</version>
            </dependency>
            <dependency>
                <groupId>io.github.classgraph</groupId>
                <artifactId>classgraph</artifactId>
                <version>${version.classgraph}</version>
            </dependency>
        </dependencies>

    </dependencyManagement>

    <!-- dependencies that all modules should have -->
    <dependencies>
        <!-- kotlin -->
        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-stdlib</artifactId>
        </dependency>
        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-reflect</artifactId>
        </dependency>
        <dependency>
            <groupId>org.jetbrains</groupId>
            <artifactId>annotations</artifactId>
        </dependency>

        <!-- logging -->
        <dependency>
            <groupId>io.github.microutils</groupId>
            <artifactId>kotlin-logging-jvm</artifactId>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
        </dependency>
        <dependency>
            <groupId>com.trib3</groupId>
            <artifactId>build-resources</artifactId>
            <version>${version.leakycauldron}</version>
            <scope>test</scope>
        </dependency>

        <!-- testing -->
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
        </dependency>
        <dependency>
            <groupId>com.willowtreeapps.assertk</groupId>
            <artifactId>assertk-jvm</artifactId>
        </dependency>
        <dependency>
            <groupId>org.easymock</groupId>
            <artifactId>easymock</artifactId>
        </dependency>
    </dependencies>

    <build>
        <resources>
            <resource>
                <filtering>true</filtering>
                <directory>src/main/meta-resources</directory>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>${version.maven.clean}</version>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>properties-maven-plugin</artifactId>
                    <version>${version.maven.properties}</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>set-system-properties</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <properties>
                            <!-- quiet dokka-maven-plugin logs a little bit -->
                            <property>
                                <name>org.slf4j.simpleLogger.log.org.jetbrains.dokka</name>
                                <value>WARN</value>
                            </property>
                        </properties>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-enforcer-plugin</artifactId>
                    <version>${version.maven.enforcer}</version>
                    <executions>
                        <execution>
                            <id>enforcer</id>
                            <phase>validate</phase>
                            <goals>
                                <goal>enforce</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <skip>${skip.checks}</skip>
                        <rules>
                            <dependencyConvergence/>
                            <bannedDependencies>
                                <excludes>
                                    <exclude>org.glassfish.hk2.external</exclude>
                                    <exclude>commons-logging:commons-logging</exclude>
                                    <exclude>org.apache.logging.log4j:log4j-core</exclude>
                                    <exclude>com.google.inject.extensions:guice-multibindings</exclude>
                                    <exclude>com.authzee.kotlinguice4:*</exclude>
                                    <!-- use jakarta apis instead of javax apis/jetty toolchains for the following: -->
                                    <exclude>javax.inject:javax.inject</exclude>
                                    <exclude>javax.xml.bind:jaxb-api</exclude>
                                    <exclude>javax.annotation:javax.annotation-api</exclude>
                                    <exclude>javax.activation:javax.activation-api</exclude>
                                    <exclude>javax.ws.rs:javax.ws.rs-api</exclude>
                                    <exclude>javax.servlet:javax.servlet-api</exclude>
                                    <exclude>javax.validation:validation-api</exclude>
                                    <exclude>javax.el:javax.el-api</exclude>
                                    <exclude>org.eclipse.jetty.toolchain:jetty-servlet-api</exclude>
                                    <exclude>org.glassfish:javax.el</exclude>
                                    <!-- el impl includes el-api -->
                                    <exclude>jakarta.el:jakarta.el-api</exclude>
                                    <!-- use com.sun -->
                                    <exclude>jakarta.activation:jakarta.activation-api</exclude>
                                    <!-- use org.glassfish.jaxb:jaxb-runtime -->
                                    <exclude>com.sun.xml.bind:jaxb-impl</exclude>
                                </excludes>
                            </bannedDependencies>
                        </rules>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>pl.project13.maven</groupId>
                    <artifactId>git-commit-id-plugin</artifactId>
                    <version>${version.maven.git}</version>
                    <configuration>
                        <generateGitPropertiesFile>true</generateGitPropertiesFile>
                        <generateGitPropertiesFilename>
                            ${project.build.outputDirectory}/${project.groupId}/${project.artifactId}.git.properties
                        </generateGitPropertiesFilename>
                    </configuration>
                    <executions>
                        <execution>
                            <id>get-git-info</id>
                            <goals>
                                <goal>revision</goal>
                            </goals>
                            <phase>initialize</phase>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>${version.maven.resources}</version>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>build-helper-maven-plugin</artifactId>
                    <version>${version.maven.buildhelper}</version>

                    <executions>
                        <execution>
                            <id>kotlin-sources</id>
                            <phase>initialize</phase>
                            <goals>
                                <goal>add-source</goal>
                            </goals>
                            <configuration>
                                <sources>
                                    <source>src/main/kotlin</source>
                                </sources>
                            </configuration>
                        </execution>
                        <execution>
                            <id>kotlin-test-sources</id>
                            <phase>initialize</phase>
                            <goals>
                                <goal>add-test-source</goal>
                            </goals>
                            <configuration>
                                <sources>
                                    <source>src/test/kotlin</source>
                                </sources>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>

                <plugin>
                    <groupId>org.flywaydb</groupId>
                    <artifactId>flyway-maven-plugin</artifactId>
                    <version>${version.flyway}</version>
                    <executions>
                        <execution>
                            <phase>generate-sources</phase>
                            <goals>
                                <goal>migrate</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.jooq</groupId>
                    <artifactId>jooq-codegen-maven</artifactId>
                    <version>${version.jooq}</version>
                    <executions>
                        <execution>
                            <id>jooq-codegen</id>
                            <phase>generate-sources</phase>
                            <goals>
                                <goal>generate</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <generator>
                            <name>org.jooq.codegen.DefaultGenerator</name>
                            <database>
                                <outputSchemaToDefault>true</outputSchemaToDefault>
                                <inputSchema>public</inputSchema>
                            </database>
                            <generate>
                                <javaTimeTypes>true</javaTimeTypes>
                                <generatedAnnotationType>JAVAX_ANNOTATION_GENERATED</generatedAnnotationType>
                            </generate>
                        </generator>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <version>${version.maven.antrun}</version>
                    <executions>
                        <execution>
                            <id>detekt</id>
                            <phase>verify</phase>
                            <goals>
                                <goal>run</goal>
                            </goals>
                            <configuration>
                                <skip>${skip.checks}</skip>
                                <target name="detekt">
                                    <property name="compile_classpath" refid="maven.compile.classpath"/>
                                    <java taskname="detekt" dir="${basedir}"
                                          fork="true"
                                          failonerror="true"
                                          classname="io.gitlab.arturbosch.detekt.cli.Main"
                                          classpathref="maven.plugin.classpath">

                                        <arg value="--build-upon-default-config"/>
                                        <arg value="--input"/>
                                        <arg value="${basedir}/src/main/kotlin"/>
                                        <arg value="--excludes"/>
                                        <arg value=".*/target/.*,.*/resources/.*"/>
                                        <arg value="--config-resource"/>
                                        <arg value="detekt-config.yml"/>
                                        <arg value="--jvm-target"/>
                                        <arg value="${version.java.release}"/>
                                        <arg value="--classpath"/>
                                        <arg value="${compile_classpath}"/>
                                    </java>
                                </target>
                            </configuration>
                        </execution>
                        <!--
                        run ktlint through antrun plugin to allow setting add-opens
                        without setting it on the full build.  This works around
                        https://github.com/pinterest/ktlint/issues/1391
                        -->
                        <execution>
                            <id>ktlint</id>
                            <phase>process-sources</phase>
                            <goals>
                                <goal>run</goal>
                            </goals>
                            <configuration>
                                <skip>${skip.checks}</skip>
                                <target name="ktlint">
                                    <property name="compile_classpath" refid="maven.compile.classpath"/>
                                    <java taskname="ktlint" dir="${basedir}"
                                          fork="true"
                                          failonerror="true"
                                          classname="com.pinterest.ktlint.Main"
                                          classpathref="maven.plugin.classpath">
                                        <jvmarg value="--add-opens=java.base/java.lang=ALL-UNNAMED"/>
                                        <arg value="-F"/>
                                    </java>
                                </target>
                            </configuration>
                        </execution>
                    </executions>
                    <dependencies>
                        <dependency>
                            <groupId>io.gitlab.arturbosch.detekt</groupId>
                            <artifactId>detekt-cli</artifactId>
                            <version>${version.detekt}</version>
                        </dependency>
                        <dependency>
                            <groupId>com.trib3</groupId>
                            <artifactId>build-resources</artifactId>
                            <version>${version.leakycauldron}</version>
                        </dependency>
                        <dependency>
                            <groupId>org.jetbrains.kotlin</groupId>
                            <artifactId>kotlin-stdlib</artifactId>
                            <version>${version.kotlin}</version>
                        </dependency>
                        <dependency>
                            <groupId>org.apache.ant</groupId>
                            <artifactId>ant</artifactId>
                            <version>${version.ant}</version>
                        </dependency>
                        <dependency>
                            <groupId>com.pinterest</groupId>
                            <artifactId>ktlint</artifactId>
                            <version>${version.ktlint}</version>
                        </dependency>
                    </dependencies>
                </plugin>
                <plugin>
                    <groupId>org.jetbrains.kotlin</groupId>
                    <artifactId>kotlin-maven-plugin</artifactId>
                    <version>${version.kotlin}</version>
                    <configuration>
                        <jvmTarget>${version.java.release}</jvmTarget>
                        <args>
                            <arg>-Werror</arg>
                        </args>
                    </configuration>
                    <executions>
                        <execution>
                            <id>compile</id>
                            <goals>
                                <goal>compile</goal>
                            </goals>
                        </execution>

                        <execution>
                            <id>test-compile</id>
                            <goals>
                                <goal>test-compile</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>${version.maven.compiler}</version>
                    <configuration>
                        <release>${version.java.release}</release>
                    </configuration>
                    <executions>
                        <execution>
                            <id>default-compile</id>
                            <phase>none</phase>
                        </execution>
                        <execution>
                            <id>default-testCompile</id>
                            <phase>none</phase>
                        </execution>
                        <execution>
                            <id>java-compile</id>
                            <phase>compile</phase>
                            <goals>
                                <goal>compile</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>java-test-compile</id>
                            <phase>test-compile</phase>
                            <goals>
                                <goal>testCompile</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.jacoco</groupId>
                    <artifactId>jacoco-maven-plugin</artifactId>
                    <version>${version.jacoco}</version>
                    <executions>
                        <execution>
                            <id>default-prepare-agent</id>
                            <goals>
                                <goal>prepare-agent</goal>
                            </goals>
                            <configuration>
                                <propertyName>jacocoArgLineUnit</propertyName>
                            </configuration>
                        </execution>
                        <execution>
                            <id>default-prepare-agent-integration</id>
                            <goals>
                                <goal>prepare-agent-integration</goal>
                            </goals>
                            <configuration>
                                <propertyName>jacocoArgLineIntegration</propertyName>
                            </configuration>
                        </execution>
                        <execution>
                            <id>default-report</id>
                            <goals>
                                <goal>report</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>default-report-integration</id>
                            <goals>
                                <goal>report-integration</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>default-check</id>
                            <goals>
                                <goal>check</goal>
                            </goals>
                            <configuration>
                                <rules>
                                    <rule>
                                        <element>BUNDLE</element>
                                        <limits>
                                            <limit>
                                                <counter>LINE</counter>
                                                <value>COVEREDRATIO</value>
                                                <minimum>0.60</minimum>
                                            </limit>
                                        </limits>
                                    </rule>
                                </rules>
                            </configuration>
                        </execution>
                    </executions>
                    <configuration>
                        <skip>${skip.tests}</skip>
                        <excludes>
                            <exclude>**/jooq/**/*.class</exclude>
                        </excludes>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>${version.maven.surefire}</version>
                    <dependencies>
                        <dependency>
                            <groupId>org.apache.maven.surefire</groupId>
                            <artifactId>surefire-testng</artifactId>
                            <version>${version.maven.surefire}</version>
                        </dependency>
                    </dependencies>
                    <configuration>
                        <skip>${skip.tests}</skip>
                        <argLine>
                            ${jacocoArgLineUnit}
                        </argLine>
                        <parallel>methods</parallel>
                        <threadCount>10</threadCount>
                        <trimStackTrace>false</trimStackTrace>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.jetbrains.dokka</groupId>
                    <artifactId>dokka-maven-plugin</artifactId>
                    <version>${version.dokka}</version>
                    <executions>
                        <execution>
                            <phase>process-sources</phase>
                            <goals>
                                <goal>dokka</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <skip>${skip.docs}</skip>
                        <reportNotDocumented>false</reportNotDocumented>
                        <jdkVersion>${version.java.release}</jdkVersion>
                        <perPackageOptions>
                            <packageOption>
                                <matchingRegex>com\..*</matchingRegex>
                                <includeNonPublic>true</includeNonPublic>
                            </packageOption>
                        </perPackageOptions>
                        <sourceDirectories>
                            <dir>${project.basedir}/src/main/kotlin</dir>
                        </sourceDirectories>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>${version.maven.jar}</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>test-jar</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>dokka-jar</id>
                            <phase>package</phase>
                            <goals>
                                <goal>jar</goal>
                            </goals>
                            <configuration>
                                <classifier>javadoc</classifier>
                                <classesDirectory>${project.build.directory}/dokka</classesDirectory>
                                <skipIfEmpty>true</skipIfEmpty>
                            </configuration>
                        </execution>
                    </executions>
                    <configuration>
                        <archive>
                            <manifest>
                                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                            </manifest>
                            <manifestEntries>
                                <Build-Time>${git.build.time}</Build-Time>
                                <Git-Commit-Id>${git.commit.id}</Git-Commit-Id>
                                <Git-Commit-Time>${git.commit.time}</Git-Commit-Time>
                                <Implementation-Version>${git.commit.id.describe}</Implementation-Version>
                                <Specification-Version>${project.version}</Specification-Version>
                                <Multi-Release>true</Multi-Release>
                            </manifestEntries>
                        </archive>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-shade-plugin</artifactId>
                    <version>${version.maven.shade}</version>
                    <configuration>
                        <createDependencyReducedPom>false</createDependencyReducedPom>
                        <shadedArtifactAttached>true</shadedArtifactAttached>
                        <artifactSet>
                            <excludes>
                                <exclude>com.trib3:build-resources</exclude>
                            </excludes>
                        </artifactSet>
                        <filters>
                            <filter>
                                <artifact>*:*</artifact>
                                <excludes>
                                    <exclude>META-INF/*.SF</exclude>
                                    <exclude>META-INF/*.DSA</exclude>
                                    <exclude>META-INF/*.RSA</exclude>
                                </excludes>
                            </filter>
                        </filters>
                    </configuration>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>shade</goal>
                            </goals>
                            <configuration>
                                <transformers>
                                    <transformer
                                            implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                        <resource>reference.conf</resource>
                                    </transformer>
                                    <transformer
                                            implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                                    <transformer
                                            implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                        <mainClass>com.trib3.server.TribeApplicationKt</mainClass>
                                    </transformer>
                                </transformers>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <version>${version.maven.assembly}</version>
                    <dependencies>
                        <dependency>
                            <groupId>com.trib3</groupId>
                            <artifactId>build-resources</artifactId>
                            <version>${version.leakycauldron}</version>
                        </dependency>
                    </dependencies>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>single</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <descriptorRefs>
                            <descriptorRef>elasticbeanstalk</descriptorRef>
                        </descriptorRefs>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>com.hubspot.maven.plugins</groupId>
                    <artifactId>dependency-scope-maven-plugin</artifactId>
                    <version>${version.maven.dependencyscope}</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>check</goal>
                            </goals>
                            <configuration>
                                <skip>${skip.checks}</skip>
                                <fail>true</fail>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <version>${version.maven.dependency}</version>
                    <configuration>
                        <skip>${skip.checks}</skip>
                        <failOnWarning>true</failOnWarning>
                        <ignoreNonCompile>true</ignoreNonCompile>
                        <!-- deps that we pull into all projects -->
                        <ignoredUnusedDeclaredDependencies>
                            <ignoredUnusedDeclaredDependency>
                                org.jetbrains.kotlin:kotlin-stdlib
                            </ignoredUnusedDeclaredDependency>
                            <ignoredUnusedDeclaredDependency>
                                org.jetbrains.kotlin:kotlin-reflect
                            </ignoredUnusedDeclaredDependency>
                            <ignoredUnusedDeclaredDependency>
                                org.jetbrains:annotations
                            </ignoredUnusedDeclaredDependency>
                            <ignoredUnusedDeclaredDependency>
                                io.github.microutils:kotlin-logging-jvm
                            </ignoredUnusedDeclaredDependency>
                        </ignoredUnusedDeclaredDependencies>
                        <!-- workaround for https://issues.apache.org/jira/browse/MDEP-791 -->
                        <ignoredNonTestScopedDependencies>
                            <ignoredNonTestScopedDependency>*</ignoredNonTestScopedDependency>
                        </ignoredNonTestScopedDependencies>
                    </configuration>
                    <executions>
                        <execution>
                            <id>analyze</id>
                            <phase>verify</phase>
                            <goals>
                                <goal>analyze-only</goal>
                                <goal>analyze-duplicate</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-failsafe-plugin</artifactId>
                    <version>${version.maven.failsafe}</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>integration-test</goal>
                                <goal>verify</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <skip>${skip.checks}</skip>
                        <argLine>
                            ${jacocoArgLineIntegration}
                        </argLine>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-source-plugin</artifactId>
                    <version>${version.maven.source}</version>
                    <executions>
                        <execution>
                            <id>attach-sources</id>
                            <phase>verify</phase>
                            <goals>
                                <goal>jar-no-fork</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <skipSource>${skip.source}</skipSource>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>${version.maven.install}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>${version.maven.deploy}</version>
                </plugin>
                <plugin>
                    <groupId>com.expediagroup</groupId>
                    <artifactId>graphql-kotlin-maven-plugin</artifactId>
                    <version>${version.graphql-kotlin}</version>
                </plugin>
            </plugins>
        </pluginManagement>

        <!-- plugins that all modules should invoke -->
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>properties-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>pl.project13.maven</groupId>
                <artifactId>git-commit-id-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>com.hubspot.maven.plugins</groupId>
                <artifactId>dependency-scope-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <profile>
            <id>enable-kotlin-compilation</id>
            <activation>
                <file>
                    <exists>src/main/kotlin</exists>
                </file>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-antrun-plugin</artifactId>
                    </plugin>
                    <plugin>
                        <groupId>org.jetbrains.kotlin</groupId>
                        <artifactId>kotlin-maven-plugin</artifactId>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-failsafe-plugin</artifactId>
                    </plugin>
                    <plugin>
                        <groupId>org.jetbrains.dokka</groupId>
                        <artifactId>dokka-maven-plugin</artifactId>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>CI</id>
            <activation>
                <property>
                    <name>env.GPG_KEY</name>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-gpg-plugin</artifactId>
                        <version>${version.maven.gpg}</version>
                        <executions>
                            <execution>
                                <id>sign-artifacts</id>
                                <phase>verify</phase>
                                <goals>
                                    <goal>sign</goal>
                                </goals>
                            </execution>
                        </executions>
                        <configuration>
                            <keyname>noreply@trib3.com</keyname>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>fast</id>
            <activation>
                <property>
                    <name>fast</name>
                </property>
            </activation>
            <properties>
                <skip.docs>true</skip.docs>
                <skip.source>true</skip.source>
            </properties>
        </profile>
        <profile>
            <id>faster</id>
            <activation>
                <property>
                    <name>faster</name>
                </property>
            </activation>
            <properties>
                <skip.docs>true</skip.docs>
                <skip.source>true</skip.source>
                <skip.checks>true</skip.checks>
            </properties>
        </profile>
        <profile>
            <id>fastest</id>
            <activation>
                <property>
                    <name>fastest</name>
                </property>
            </activation>
            <properties>
                <skip.docs>true</skip.docs>
                <skip.source>true</skip.source>
                <skip.checks>true</skip.checks>
                <skip.tests>true</skip.tests>
                <maven.test.skip>true</maven.test.skip>
            </properties>
        </profile>
    </profiles>

</project>
