<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://maven.apache.org/POM/4.0.0"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.cmile.common</groupId>
    <artifactId>java-common</artifactId>
    <version>1.0.0.Build-11</version>
    <packaging>pom</packaging>
    <description>A set of common java utilities that can be used as an entry point for creating integrations with GCP services including authentication, bigquery, logging, cache management, secretmanager, pub/sub, postgresql, storage, metrics and mongo.  There is also a test framework for producing JUnit test cases using testcontainers to mock external services.</description>
    <url>https://cmile.com</url>
    <licenses>
        <license>
            <name>Apache License, Version 2.0</name>
            <url>http://www.apache.org/licenses/LICENSE-2.0</url>
            <distribution>repo</distribution>
            <comments>
            Copyright 2024 cmile inc.

            Licensed under the Apache License, Version 2.0 (the "License");
            you may not use this file except in compliance with the License.
            You may obtain a copy of the License at:

            http://www.apache.org/licenses/LICENSE-2.0

            Unless required by applicable law or agreed to in writing, software
            distributed under the License is distributed on an "AS IS" BASIS,
            WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
            See the License for the specific language governing permissions and
            limitations under the License.
        </comments>
        </license>
    </licenses>
    <developers>
        <developer>
            <id>nishant-pentapalli</id>
            <name>Nishant Pentapalli</name>
            <email>nishant@cmile.com</email>
        </developer>
        <developer>
            <id>balaji-natanam</id>
            <name>Balaji Natarajan</name>
            <email>balaji@cmile.com</email>
        </developer>
        <developer>
            <id>pfaiola</id>
            <name>Pat Faiola</name>
            <email>pat@cmile.com</email>
        </developer>
        <developer>
            <id>nishant-pentapalli</id>
            <name>Nishant Pentapalli</name>
            <email>nishant@cmile.com</email>
        </developer>
        <developer>
            <id>mamthacmile</id>
            <name>Mamta K</name>
            <email>mamta@cmile.com</email>
        </developer>
        <developer>
            <id>Dustygnome421</id>
            <name>Aman Gupta</name>
            <email>aman@cmile.com</email>
        </developer>
    </developers>
    <scm>
        <url>https://github.com/cmile-inc/lib-common</url>
        <connection>scm:git:git://github.com/cmile-inc/lib-common.git</connection>
        <developerConnection>scm:git:ssh://github.com/cmile-inc/lib-common.git</developerConnection>
    </scm>
    <properties>
        <owner.name>cmile-inc</owner.name>
        <repo.name>lib-common</repo.name>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <java.version>17</java.version>
        <junit-jupiter-engine.version>5.11.0-M2</junit-jupiter-engine.version>
        <spring-boot.version>3.3.1</spring-boot.version>
        <junit-jupiter.version>5.10.2</junit-jupiter.version>
        <mockito.version>5.7.0</mockito.version>
        <mockwebserver.version>4.12.0</mockwebserver.version>
        <hibernate.version>6.5.2.Final</hibernate.version>
        <spring-webflux.version>6.2.0</spring-webflux.version>
        <spring-web.version>6.1.12</spring-web.version>
        <slf4j-api.version>2.0.13</slf4j-api.version>
        <logback-classic.version>1.5.6</logback-classic.version>
        <javax.servlet-api.version>4.0.1</javax.servlet-api.version>
        <jsonschema-generator.version>4.35.0</jsonschema-generator.version>
        <json-schema-validator.version>1.4.0</json-schema-validator.version>
        <google-guava.version>33.2.1-jre</google-guava.version>
        <apache-commons-lang3.version>3.14.0</apache-commons-lang3.version>
        <jackson.version>2.17.1</jackson.version>
        <jknack-handlebars.version>4.4.0</jknack-handlebars.version>
        <retrofit2-retrofit.version>2.11.0</retrofit2-retrofit.version>
        <jsonschema2pojo-maven-plugin.version>1.2.1</jsonschema2pojo-maven-plugin.version>
        <reactor-core.version>3.6.7</reactor-core.version>
        <reactor-test.version>3.6.7</reactor-test.version>
        <reactor-extra.version>3.5.1</reactor-extra.version>
        <jakarta-validation.version>3.1.0</jakarta-validation.version>
        <jakarta-annotation.version>3.0.0</jakarta-annotation.version>
        <jakarta-servlet-api.version>6.1.0</jakarta-servlet-api.version>
        <jwt.version>0.12.6</jwt.version>
        <postgres.version>42.7.3</postgres.version>
        <liquibase.version>4.28.0</liquibase.version>
        <hibernate-core.version>6.5.2.Final</hibernate-core.version>
        <gcp-firebase.version>9.3.0</gcp-firebase.version>
        <gcp-cloud-logging.version>5.3.0</gcp-cloud-logging.version>
        <gcp-cloud-logback>0.131.7-alpha</gcp-cloud-logback>
        <gcp.version>5.5.0</gcp.version>
        <caffeine.version>3.1.8</caffeine.version>
        <mapstruct.version>1.5.5.Final</mapstruct.version>
        <lombok.version>1.18.32</lombok.version>
        <mongo.version>5.1.3</mongo.version>
        <springboot-mongo.version>3.3.2</springboot-mongo.version>
        <postgress.version>42.7.3</postgress.version>
        <spotless-formatter.version>2.24</spotless-formatter.version>
        <mockito-inline-version>5.2.0</mockito-inline-version>
        <auth0.version>4.2.1</auth0.version>
        <swagger-models.version>2.2.22</swagger-models.version>
        <micrometer.version>1.13.4</micrometer.version>
        <maven-surefire-plugin.version>3.5.1</maven-surefire-plugin.version>
        <wiremock.version>3.9.1</wiremock.version>
        <jacoco.version>0.8.12</jacoco.version>
        <bigquery.version>2.40.0</bigquery.version>
        <bigquerytransfer.version>2.44.0</bigquerytransfer.version>
        <testcontainers.gcs-server.version>0.1.0</testcontainers.gcs-server.version>
        <swagger-annotations.version>2.2.22</swagger-annotations.version>
        <spring-integration-core.version>6.4.0</spring-integration-core.version>
        <spring-context.version>6.0.0</spring-context.version>
    </properties>

    <modules>
        <module>common-service-util</module>
        <module>common-test-util</module>
    </modules>

    <build>
        <plugins>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>${jacoco.version}</version> <!-- Use the latest version -->
                <configuration>
                    <excludes>
                        <exclude>**/generated/**</exclude>
                        <exclude>**/*Generated*.class</exclude>
                    </excludes>
                </configuration>
                <executions>
                    <execution>
                        <id>prepare-agent</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>post-unit-test</id>
                        <phase>test</phase>
                        <goals>
                            <goal>report-aggregate</goal>
                        </goals>

                        <configuration>
                            <excludes>
                                <exclude>**/generated/**</exclude>
                                <exclude>**/*Generated*.class</exclude>
                            </excludes>
                            <outputDirectory>${project.build.directory}/jacoco-aggregate-report</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-gpg-plugin</artifactId>
                <version>3.0.1</version>
                <executions>
                    <execution>
                        <id>sign-artifacts</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>sign</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <version>3.0.0-M1</version>
                <configuration>
                    <goals>deploy</goals>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.sonatype.central</groupId>
                <artifactId>central-publishing-maven-plugin</artifactId>
                <version>0.6.0</version>
                <extensions>true</extensions>
                <configuration>
                    <publishingServerId>central</publishingServerId>
                </configuration>
            </plugin>
        </plugins>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.jacoco</groupId>
                    <artifactId>jacoco-maven-plugin</artifactId>
                    <version>${jacoco.version}</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
    <reporting>
        <plugins>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.12</version>
                <configuration>
                    <outputDirectory>${project.reporting.outputDirectory}/jacoco-aggregate</outputDirectory>
                </configuration>
                <reportSets>
                    <reportSet>
                        <reports>
                            <report>report-aggregate</report>
                        </reports>
                    </reportSet>
                </reportSets>
            </plugin>
        </plugins>
    </reporting>
    <dependencyManagement>

        <dependencies>
            <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>${spring-boot.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
            <!--
            https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-validation -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-validation</artifactId>
                <version>${spring-boot.version}</version>
            </dependency>


            <!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>${spring-web.version}</version>
            </dependency>

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-cache</artifactId>
                <version>${spring-boot.version}</version>
            </dependency>

            <!--
            https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-test -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <version>${spring-boot.version}</version>
                <scope>test</scope>
            </dependency>

            <dependency>
                <groupId>org.springframework.integration</groupId>
                <artifactId>spring-integration-core</artifactId>
                <version>${spring-integration-core.version}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.wiremock/wiremock -->
            <dependency>
                <groupId>org.wiremock</groupId>
                <artifactId>wiremock-standalone</artifactId>
                <version>${wiremock.version}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/com.github.victools/jsonschema-generator -->
            <dependency>
                <groupId>com.github.victools</groupId>
                <artifactId>jsonschema-generator</artifactId>
                <version>${jsonschema-generator.version}</version>
                <scope>provided</scope>
            </dependency>

            <!-- https://mvnrepository.com/artifact/com.networknt/json-schema-validator -->
            <dependency>
                <groupId>com.networknt</groupId>
                <artifactId>json-schema-validator</artifactId>
                <version>${json-schema-validator.version}</version>
            </dependency>

            <!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <version>${google-guava.version}</version>
            </dependency>

            <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>${apache-commons-lang3.version}</version>
            </dependency>

            <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>${jackson.version}</version>
            </dependency>

            <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>
                <version>${jackson.version}</version>
            </dependency>


            <!-- https://mvnrepository.com/artifact/com.github.jknack/handlebars -->
            <dependency>
                <groupId>com.github.jknack</groupId>
                <artifactId>handlebars</artifactId>
                <version>${jknack-handlebars.version}</version>
            </dependency>

            <!-- https://mvnrepository.com/artifact/com.squareup.retrofit2/retrofit -->
            <dependency>
                <groupId>com.squareup.retrofit2</groupId>
                <artifactId>retrofit</artifactId>
                <version>${retrofit2-retrofit.version}</version>
            </dependency>

            <!-- https://mvnrepository.com/artifact/org.jsonschema2pojo/jsonschema2pojo-maven-plugin -->
            <dependency>
                <groupId>org.jsonschema2pojo</groupId>
                <artifactId>jsonschema2pojo-maven-plugin</artifactId>
                <version>${jsonschema2pojo-maven-plugin.version}</version>
            </dependency>

            <!-- https://mvnrepository.com/artifact/io.projectreactor/reactor-core -->
            <dependency>
                <groupId>io.projectreactor</groupId>
                <artifactId>reactor-core</artifactId>
                <version>${reactor-core.version}</version>
            </dependency>

            <!-- https://mvnrepository.com/artifact/io.projectreactor/reactor-test -->
            <dependency>
                <groupId>io.projectreactor</groupId>
                <artifactId>reactor-test</artifactId>
                <version>${reactor-test.version}</version>
                <scope>test</scope>
            </dependency>

            <!-- https://mvnrepository.com/artifact/io.projectreactor.addons/reactor-extra -->
            <dependency>
                <groupId>io.projectreactor.addons</groupId>
                <artifactId>reactor-extra</artifactId>
                <version>${reactor-extra.version}</version>
            </dependency>

            <!-- https://mvnrepository.com/artifact/org.springframework/spring-webflux -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webflux</artifactId>
                <version>${spring-webflux.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.platform</groupId>
                <artifactId>junit-platform-commons</artifactId>
                <version>1.10.2</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.mockito</groupId>
                <artifactId>mockito-junit-jupiter</artifactId>
                <version>${mockito.version}</version>
            </dependency>
            <dependency>
                <groupId>org.mockito</groupId>
                <artifactId>mockito-core</artifactId>
                <version>${mockito.version}</version>
            </dependency>

            <!-- https://mvnrepository.com/artifact/jakarta.validation/jakarta.validation-api -->
            <dependency>
                <groupId>jakarta.validation</groupId>
                <artifactId>jakarta.validation-api</artifactId>
                <version>${jakarta-validation.version}</version>
            </dependency>

            <!-- https://mvnrepository.com/artifact/jakarta.annotation/jakarta.annotation-api -->
            <dependency>
                <groupId>jakarta.annotation</groupId>
                <artifactId>jakarta.annotation-api</artifactId>
                <version>${jakarta-annotation.version}</version>
            </dependency>

            <!-- https://mvnrepository.com/artifact/jakarta.servlet/jakarta.servlet-api -->
            <dependency>
                <groupId>jakarta.servlet</groupId>
                <artifactId>jakarta.servlet-api</artifactId>
                <version>${jakarta-servlet-api.version}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>io.jsonwebtoken</groupId>
                <artifactId>jjwt-api</artifactId>
                <version>${jwt.version}</version>
            </dependency>
            <dependency>
                <groupId>io.jsonwebtoken</groupId>
                <artifactId>jjwt-impl</artifactId>
                <version>${jwt.version}</version>
            </dependency>
            <dependency>
                <groupId>io.jsonwebtoken</groupId>
                <artifactId>jjwt-jackson</artifactId>
                <version>${jwt.version}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
            <dependency>
                <groupId>org.postgresql</groupId>
                <artifactId>postgresql</artifactId>
                <version>${postgress.version}</version>
            </dependency>
            <dependency>
                <groupId>org.liquibase</groupId>
                <artifactId>liquibase-core</artifactId>
                <version>${liquibase.version}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.hibernate.orm/hibernate-core -->
            <dependency>
                <groupId>org.hibernate.orm</groupId>
                <artifactId>hibernate-core</artifactId>
                <version>${hibernate-core.version}</version>
            </dependency>
            <dependency>
                <groupId>com.google.firebase</groupId>
                <artifactId>firebase-admin</artifactId>
                <version>${gcp-firebase.version}</version>
            </dependency>
            <dependency>
                <groupId>com.google.cloud</groupId>
                <artifactId>spring-cloud-gcp-starter-logging</artifactId>
                <version>${gcp-cloud-logging.version}</version>
            </dependency>
            <dependency>
                <groupId>com.google.cloud</groupId>
                <artifactId>spring-cloud-gcp-starter</artifactId>
                <version>${gcp.version}</version>
            </dependency>
            <dependency>
                <groupId>com.google.cloud</groupId>
                <artifactId>google-cloud-logging-logback</artifactId>
                <version>${gcp-cloud-logback}</version>
            </dependency>
            <dependency>
                <groupId>com.google.cloud</groupId>
                <artifactId>spring-cloud-gcp-dependencies</artifactId>
                <version>${gcp.version}</version>
                <type>pom</type>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>com.github.ben-manes.caffeine</groupId>
                <artifactId>caffeine</artifactId>
                <version>${caffeine.version}</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-mongodb</artifactId>
                <version>${springboot-mongo.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
                <version>${springboot-mongo.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>${slf4j-api.version}</version>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>${logback-classic.version}</version>
            </dependency>
            <dependency>
                <groupId>com.google.cloud</groupId>
                <artifactId>spring-cloud-gcp-dependencies</artifactId>
                <version>${gcp.version}</version>
            </dependency>
            <dependency>
                <groupId>com.google.api-client</groupId>
                <artifactId>google-api-client</artifactId>
                <version>1.33.0</version>
            </dependency>
            <dependency>
                <groupId>com.google.apis</groupId>
                <artifactId>google-api-services-sqladmin</artifactId>
                <version>v1-rev20240711-2.0.0</version>
            </dependency>
            <dependency>
                <groupId>com.google.cloud</groupId>
                <artifactId>google-cloud-secretmanager</artifactId>
                <version>2.47.0</version>
            </dependency>
            <dependency>
                <groupId>io.github.vzhn</groupId>
                <artifactId>netty-http-authenticator</artifactId>
                <version>1.5</version>
            </dependency>
            <dependency>
                <groupId>com.spotify.fmt</groupId>
                <artifactId>fmt-maven-plugin</artifactId>
                <version>${spotless-formatter.version}</version>
            </dependency>
            <dependency>
                <groupId>org.mockito</groupId>
                <artifactId>mockito-inline</artifactId>
                <version>${mockito-inline-version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>com.auth0</groupId>
                <artifactId>java-jwt</artifactId>
                <version>${auth0.version}</version>
            </dependency>
            <dependency>
                <groupId>io.swagger.core.v3</groupId>
                <artifactId>swagger-models</artifactId>
                <version>${swagger-models.version}</version>
            </dependency>
            <dependency>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct</artifactId>
                <version>${mapstruct.version}</version>
            </dependency>
            <dependency>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct-processor</artifactId>
                <version>${mapstruct.version}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>com.google.cloud</groupId>
                <artifactId>spring-cloud-gcp-starter-pubsub</artifactId>
                <version>${gcp.version}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/io.micrometer/micrometer-registry-prometheus -->
            <dependency>
                <groupId>io.micrometer</groupId>
                <artifactId>micrometer-core</artifactId>
                <version>${micrometer.version}</version>
            </dependency>
            <dependency>
                <groupId>io.micrometer</groupId>
                <artifactId>micrometer-registry-stackdriver</artifactId>
                <version>${micrometer.version}</version> <!-- Replace with the latest version -->
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
                <version>${spring-boot.version}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/de.flapdoodle.embed/de.flapdoodle.embed.mongo -->
            <dependency>
                <groupId>de.flapdoodle.embed</groupId>
                <artifactId>de.flapdoodle.embed.mongo</artifactId>
                <version>${embed.mongo.version}</version>
            </dependency>
            <dependency>
                <groupId>com.google.cloud</groupId>
                <artifactId>google-cloud-bigquery</artifactId>
                <version>${bigquery.version}</version>
            </dependency>
            <dependency>
                <groupId>com.google.cloud</groupId>
                <artifactId>google-cloud-bigquerydatatransfer</artifactId>
                <version>${bigquerytransfer.version}</version>
            </dependency>
            <!-- Test Container for GCP Storage -->
            <dependency>
                <groupId>io.aiven</groupId>
                <artifactId>testcontainers-fake-gcs-server</artifactId>
                <version>${testcontainers.gcs-server.version}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/io.swagger.core.v3/swagger-annotations-jakarta -->
            <dependency>
                <groupId>io.swagger.core.v3</groupId>
                <artifactId>swagger-annotations</artifactId>
                <version>${swagger-annotations.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>6.1.15</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>