<?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>
    <parent>
        <groupId>io.atleon</groupId>
        <artifactId>atleon</artifactId>
        <version>0.19.1</version>
    </parent>

    <artifactId>atleon-parent</artifactId>
    <packaging>pom</packaging>

    <properties>
        <amazon-sdk.version>2.17.150</amazon-sdk.version>
        <apache-kafka.version>2.8.1</apache-kafka.version>
        <apache-kafka-doc.version>28</apache-kafka-doc.version>
        <avro.version>1.10.2</avro.version>
        <confluent.version>6.2.2</confluent.version> <!-- https://docs.confluent.io/platform/current/installation/versions-interoperability.html -->
        <guava.version>20.0</guava.version>
        <jackson.version>2.12.3</jackson.version>
        <jetbrains-annotations.version>23.0.0</jetbrains-annotations.version>
        <junit-jupiter.version>5.6.3</junit-jupiter.version>
        <kotlin.version>1.6.21</kotlin.version> <!-- Dictated by kotlinx-coroutines version -->
        <kotlinx-coroutines.version>1.6.4</kotlinx-coroutines.version>
        <micrometer.version>1.0.7</micrometer.version>
        <mockito.version>4.11.0</mockito.version>
        <opentracing.verion>0.32.0</opentracing.verion>
        <protobuf.version>3.11.4</protobuf.version>
        <rabbitmq-amqp-client.version>5.14.2</rabbitmq-amqp-client.version>
        <reactive-streams.version>1.0.4</reactive-streams.version>
        <reactor.version>3.5.3</reactor.version>
        <reactor-kafka.version>1.3.18</reactor-kafka.version>
        <reactor-rabbitmq.version>1.5.6</reactor-rabbitmq.version>
        <scala.version>2.13.6</scala.version>
        <slf4j.version>1.7.36</slf4j.version>
        <spring.version>5.3.7</spring.version>
        <swagger3.version>2.1.13</swagger3.version>
        <testcontainers.version>1.17.6</testcontainers.version>
        <zookeeper.version>3.6.3</zookeeper.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!-- Project Dependencies -->
            <dependency>
                <groupId>io.atleon</groupId>
                <artifactId>atleon-amqp-embedded</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.atleon</groupId>
                <artifactId>atleon-aws-sns</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.atleon</groupId>
                <artifactId>atleon-aws-sqs</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.atleon</groupId>
                <artifactId>atleon-aws-testcontainers</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.atleon</groupId>
                <artifactId>atleon-aws-util</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.atleon</groupId>
                <artifactId>atleon-avro</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.atleon</groupId>
                <artifactId>atleon-core</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.atleon</groupId>
                <artifactId>atleon-kafka</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.atleon</groupId>
                <artifactId>atleon-kafka-avro-embedded</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.atleon</groupId>
                <artifactId>atleon-kafka-embedded</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.atleon</groupId>
                <artifactId>atleon-micrometer</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.atleon</groupId>
                <artifactId>atleon-micrometer-auto</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.atleon</groupId>
                <artifactId>atleon-opentracing</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.atleon</groupId>
                <artifactId>atleon-opentracing-auto</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.atleon</groupId>
                <artifactId>atleon-rabbitmq</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.atleon</groupId>
                <artifactId>atleon-schema</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.atleon</groupId>
                <artifactId>atleon-schema-registry-confluent</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.atleon</groupId>
                <artifactId>atleon-schema-registry-confluent-embedded</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.atleon</groupId>
                <artifactId>atleon-util</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.atleon</groupId>
                <artifactId>atleon-zookeeper-embedded</artifactId>
                <version>${project.version}</version>
            </dependency>

            <!-- Third Party Dependencies -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-core</artifactId>
                <version>${jackson.version}</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>${jackson.version}</version>
            </dependency>
            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <version>${guava.version}</version>
                <!-- We don't use much from Guava, so prefer to exclude rather than manage -->
                <exclusions>
                    <exclusion>
                        <groupId>com.google.code.findbugs</groupId>
                        <artifactId>jsr305</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>com.google.protobuf</groupId>
                <artifactId>protobuf-java</artifactId>
                <version>${protobuf.version}</version>
            </dependency>
            <dependency>
                <groupId>com.rabbitmq</groupId>
                <artifactId>amqp-client</artifactId>
                <version>${rabbitmq-amqp-client.version}</version>
            </dependency>
            <dependency>
                <groupId>io.confluent</groupId>
                <artifactId>kafka-schema-registry-client</artifactId>
                <version>${confluent.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>com.google.guava</groupId>
                        <artifactId>guava</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.kafka</groupId>
                        <artifactId>kafka-clients</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>io.confluent</groupId>
                <artifactId>kafka-schema-serializer</artifactId>
                <version>${confluent.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>com.google.guava</groupId>
                        <artifactId>guava</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>io.micrometer</groupId>
                <artifactId>micrometer-core</artifactId>
                <version>${micrometer.version}</version>
            </dependency>
            <dependency>
                <groupId>io.opentracing</groupId>
                <artifactId>opentracing-api</artifactId>
                <version>${opentracing.verion}</version>
            </dependency>
            <dependency>
                <groupId>io.opentracing</groupId>
                <artifactId>opentracing-mock</artifactId>
                <version>${opentracing.verion}</version>
            </dependency>
            <dependency>
                <groupId>io.opentracing</groupId>
                <artifactId>opentracing-util</artifactId>
                <version>${opentracing.verion}</version>
            </dependency>
            <dependency>
                <groupId>io.projectreactor</groupId>
                <artifactId>reactor-core</artifactId>
                <version>${reactor.version}</version>
            </dependency>
            <dependency>
                <groupId>io.projectreactor</groupId>
                <artifactId>reactor-test</artifactId>
                <version>${reactor.version}</version>
            </dependency>
            <dependency>
                <groupId>io.projectreactor.kafka</groupId>
                <artifactId>reactor-kafka</artifactId>
                <version>${reactor-kafka.version}</version>
            </dependency>
            <dependency>
                <groupId>io.projectreactor.rabbitmq</groupId>
                <artifactId>reactor-rabbitmq</artifactId>
                <version>${reactor-rabbitmq.version}</version>
            </dependency>
            <dependency>
                <groupId>io.swagger.core.v3</groupId>
                <artifactId>swagger-annotations</artifactId>
                <version>${swagger3.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.avro</groupId>
                <artifactId>avro</artifactId>
                <version>${avro.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.kafka</groupId>
                <artifactId>kafka-clients</artifactId>
                <version>${apache-kafka.version}</version>
            </dependency>
            <dependency>
                <groupId>org.jetbrains</groupId>
                <artifactId>annotations</artifactId>
                <version>${jetbrains-annotations.version}</version>
            </dependency>
            <dependency>
                <groupId>org.jetbrains.kotlin</groupId>
                <artifactId>kotlin-stdlib</artifactId>
                <version>${kotlin.version}</version>
            </dependency>
            <dependency>
                <groupId>org.jetbrains.kotlinx</groupId>
                <artifactId>kotlinx-coroutines-core-jvm</artifactId>
                <version>${kotlinx-coroutines.version}</version>
            </dependency>
            <dependency>
                <groupId>org.jetbrains.kotlinx</groupId>
                <artifactId>kotlinx-coroutines-reactive</artifactId>
                <version>${kotlinx-coroutines.version}</version>
            </dependency>
            <dependency>
                <groupId>org.jetbrains.kotlinx</groupId>
                <artifactId>kotlinx-coroutines-reactor</artifactId>
                <version>${kotlinx-coroutines.version}</version>
            </dependency>
            <dependency>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter-api</artifactId>
                <version>${junit-jupiter.version}</version>
            </dependency>
            <dependency>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter-engine</artifactId>
                <version>${junit-jupiter.version}</version>
            </dependency>
            <dependency>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter-params</artifactId>
                <version>${junit-jupiter.version}</version>
            </dependency>
            <dependency>
                <groupId>org.mockito</groupId>
                <artifactId>mockito-core</artifactId>
                <version>${mockito.version}</version>
            </dependency>
            <dependency>
                <groupId>org.reactivestreams</groupId>
                <artifactId>reactive-streams</artifactId>
                <version>${reactive-streams.version}</version>
            </dependency>
            <dependency>
                <groupId>org.scala-lang</groupId>
                <artifactId>scala-library</artifactId>
                <version>${scala.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-simple</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>log4j-over-slf4j</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.testcontainers</groupId>
                <artifactId>localstack</artifactId>
                <version>${testcontainers.version}</version>
            </dependency>
            <dependency>
                <groupId>org.testcontainers</groupId>
                <artifactId>testcontainers</artifactId>
                <version>${testcontainers.version}</version>
            </dependency>
            <dependency>
                <groupId>software.amazon.awssdk</groupId>
                <artifactId>auth</artifactId>
                <version>${amazon-sdk.version}</version>
            </dependency>
            <dependency>
                <groupId>software.amazon.awssdk</groupId>
                <artifactId>regions</artifactId>
                <version>${amazon-sdk.version}</version>
            </dependency>
            <dependency>
                <groupId>software.amazon.awssdk</groupId>
                <artifactId>sns</artifactId>
                <version>${amazon-sdk.version}</version>
            </dependency>
            <dependency>
                <groupId>software.amazon.awssdk</groupId>
                <artifactId>sqs</artifactId>
                <version>${amazon-sdk.version}</version>
            </dependency>
            <dependency>
                <groupId>software.amazon.awssdk</groupId>
                <artifactId>utils</artifactId>
                <version>${amazon-sdk.version}</version>
            </dependency>

            <!-- Third Party Transitive Dependencies (Satisfy Upper Bounds) -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>
                <version>${jackson.version}</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.datatype</groupId>
                <artifactId>jackson-datatype-jdk8</artifactId>
                <version>${jackson.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <version>${zookeeper.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <profiles>
        <!--Activated for Maven Central Release Process-->
        <profile>
            <id>oss-release</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <version>3.0.0</version>
                        <configuration>
                            <source>8</source>
                            <links>
                                <link>https://kafka.apache.org/${apache-kafka-doc.version}/javadoc</link>
                                <link>https://projectreactor.io/docs/core/${reactor.version}/api</link>
                                <link>https://projectreactor.io/docs/kafka/${reactor-kafka.version}/api</link>
                            </links>
                        </configuration>
                        <executions>
                            <execution>
                                <id>attach-javadocs</id>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>