<?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.46.0</version>
    </parent>

    <artifactId>atleon-parent</artifactId>
    <packaging>pom</packaging>
    <name>${project.groupId}:${project.artifactId}</name>

    <properties>
        <amazon-sdk.version>2.21.3</amazon-sdk.version>
        <apache-kafka.version>3.9.2</apache-kafka.version>
        <apache-kafka-doc.version>39</apache-kafka-doc.version>
        <avro.version>1.12.1</avro.version>
        <bucket4j.version>8.17.0</bucket4j.version>
        <bytebuddy.version>1.18.3</bytebuddy.version>
        <confluent.version>7.9.5</confluent.version> <!-- https://docs.confluent.io/platform/current/installation/versions-interoperability.html -->
        <jackson.version>2.22.1</jackson.version>
        <jspecify.version>1.0.0</jspecify.version>
        <junit-jupiter.version>5.12.2</junit-jupiter.version>
        <kotlin.version>1.9.21</kotlin.version> <!-- Dictated by kotlinx-coroutines version -->
        <kotlinx-coroutines.version>1.8.0</kotlinx-coroutines.version>
        <micrometer.version>1.15.12</micrometer.version>
        <mockito.version>4.11.0</mockito.version>
        <netty.version>4.1.136.Final</netty.version>
        <opentelemetry.version>1.62.0</opentelemetry.version>
        <opentracing.verion>0.32.0</opentracing.verion>
        <protobuf.version>3.25.5</protobuf.version>
        <rabbitmq.version>5.18.0</rabbitmq.version>
        <reactive-streams.version>1.0.4</reactive-streams.version>
        <reactor.version>3.5.14</reactor.version>
        <reactor-pool.version>1.0.5</reactor-pool.version>
        <scala.version>2.13.17</scala.version>
        <slf4j.version>2.0.18</slf4j.version>
        <spring.version>6.2.19</spring.version>
        <spring-boot.version>3.5.14</spring-boot.version>
        <swagger3.version>2.2.29</swagger3.version>
        <testcontainers.version>1.21.4</testcontainers.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!-- Project Dependencies -->
            <dependency>
                <groupId>io.atleon</groupId>
                <artifactId>atleon-application</artifactId>
                <version>${project.version}</version>
            </dependency>
            <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-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-opentelemetry</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>io.atleon</groupId>
                <artifactId>atleon-opentelemetry-tracing-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-util</artifactId>
                <version>${project.version}</version>
            </dependency>

            <!-- Third Party Dependencies -->
            <dependency>
                <groupId>com.bucket4j</groupId>
                <artifactId>bucket4j_jdk17-core</artifactId>
                <version>${bucket4j.version}</version>
            </dependency>
            <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.protobuf</groupId>
                <artifactId>protobuf-java</artifactId>
                <version>${protobuf.version}</version>
            </dependency>
            <dependency>
                <groupId>com.rabbitmq</groupId>
                <artifactId>amqp-client</artifactId>
                <version>${rabbitmq.version}</version>
            </dependency>
            <dependency>
                <groupId>io.confluent</groupId>
                <artifactId>kafka-schema-registry-client</artifactId>
                <version>${confluent.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.apache.commons</groupId>
                        <artifactId>commons-compress</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>
            </dependency>
            <dependency>
                <groupId>io.micrometer</groupId>
                <artifactId>micrometer-commons</artifactId>
                <version>${micrometer.version}</version>
            </dependency>
            <dependency>
                <groupId>io.micrometer</groupId>
                <artifactId>micrometer-core</artifactId>
                <version>${micrometer.version}</version>
            </dependency>
            <dependency>
                <groupId>io.micrometer</groupId>
                <artifactId>micrometer-observation</artifactId>
                <version>${micrometer.version}</version>
            </dependency>
            <dependency>
                <groupId>io.micrometer</groupId>
                <artifactId>micrometer-observation-test</artifactId>
                <version>${micrometer.version}</version>
            </dependency>
            <dependency>
                <groupId>io.opentelemetry</groupId>
                <artifactId>opentelemetry-api</artifactId>
                <version>${opentelemetry.version}</version>
            </dependency>
            <dependency>
                <groupId>io.opentelemetry</groupId>
                <artifactId>opentelemetry-context</artifactId>
                <version>${opentelemetry.version}</version>
            </dependency>
            <dependency>
                <groupId>io.opentelemetry</groupId>
                <artifactId>opentelemetry-sdk</artifactId>
                <version>${opentelemetry.version}</version>
            </dependency>
            <dependency>
                <groupId>io.opentelemetry</groupId>
                <artifactId>opentelemetry-sdk-testing</artifactId>
                <version>${opentelemetry.version}</version>
            </dependency>
            <dependency>
                <groupId>io.opentelemetry</groupId>
                <artifactId>opentelemetry-sdk-trace</artifactId>
                <version>${opentelemetry.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.addons</groupId>
                <artifactId>reactor-pool</artifactId>
                <version>${reactor-pool.version}</version>
            </dependency>
            <dependency>
                <groupId>io.swagger.core.v3</groupId>
                <artifactId>swagger-annotations</artifactId>
                <version>${swagger3.version}</version>
            </dependency>
            <dependency>
                <groupId>net.bytebuddy</groupId>
                <artifactId>byte-buddy</artifactId>
                <version>${bytebuddy.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.apache.kafka</groupId>
                <artifactId>kafka-server</artifactId>
                <version>${apache-kafka.version}</version>
            </dependency>
            <dependency>
                <groupId>org.jetbrains.kotlin</groupId>
                <artifactId>kotlin-stdlib</artifactId>
                <version>${kotlin.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.jetbrains</groupId>
                        <artifactId>annotations</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.jetbrains.kotlinx</groupId>
                <artifactId>kotlinx-coroutines-core-jvm</artifactId>
                <version>${kotlinx-coroutines.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.jetbrains</groupId>
                        <artifactId>annotations</artifactId>
                    </exclusion>
                </exclusions>
            </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.jspecify</groupId>
                <artifactId>jspecify</artifactId>
                <version>${jspecify.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.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot</artifactId>
                <version>${spring-boot.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-autoconfigure</artifactId>
                <version>${spring-boot.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-test</artifactId>
                <version>${spring-boot.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>aws-core</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>sdk-core</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>sts</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>io.netty</groupId>
                <artifactId>netty-buffer</artifactId>
                <version>${netty.version}</version>
            </dependency>
            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-codec</artifactId>
                <version>${netty.version}</version>
            </dependency>
            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-common</artifactId>
                <version>${netty.version}</version>
            </dependency>
            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-handler</artifactId>
                <version>${netty.version}</version>
            </dependency>
            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-resolver</artifactId>
                <version>${netty.version}</version>
            </dependency>
            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-transport</artifactId>
                <version>${netty.version}</version>
            </dependency>
            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-transport-classes-epoll</artifactId>
                <version>${netty.version}</version>
            </dependency>
            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-transport-native-unix-common</artifactId>
                <version>${netty.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.11.2</version>
                        <configuration>
                            <source>${java.version}</source>
                            <links>
                                <link>https://docs.spring.io/spring-framework/docs/${spring.version}/javadoc-api</link>
                                <link>https://javadoc.io/doc/org.reactivestreams/reactive-streams/${reactive-streams.version}</link>
                                <link>https://kafka.apache.org/${apache-kafka-doc.version}/javadoc</link>
                                <link>https://projectreactor.io/docs/core/${reactor.version}/api</link>
                            </links>
                        </configuration>
                        <executions>
                            <execution>
                                <id>attach-javadocs</id>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>