<!--
  ~ Copyright (c) 2008-2026, Hazelcast, Inc. All Rights Reserved.
  ~
  ~ 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.
  -->

<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.hazelcast</groupId>
    <artifactId>hazelcast-parent</artifactId>
    <packaging>pom</packaging>
    <version>5.7.0</version>

    <name>Hazelcast Parent POM</name>
    <description>Provides a base configuration for Hazelcast Platform builds</description>
    <url>http://www.hazelcast.com/</url>

    <scm>
        <connection>scm:git:git://github.com/hazelcast/hazelcast.git</connection>
        <developerConnection>scm:git:git@github.com:hazelcast/hazelcast.git</developerConnection>
        <url>https://github.com/hazelcast/hazelcast/</url>
    </scm>

    <issueManagement>
        <system>Github</system>
        <url>https://github.com/hazelcast/hazelcast/issues</url>
    </issueManagement>

    <developers>
        <developer>
            <id>hazelcast-team</id>
            <name>Hazelcast team</name>
            <email>info@hazelcast.com</email>
            <organization>Hazelcast, Inc.</organization>
            <organizationUrl>https://hazelcast.com</organizationUrl>
        </developer>
    </developers>

    <organization>
        <name>Hazelcast, Inc.</name>
        <url>http://www.hazelcast.com/</url>
    </organization>

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

    <properties>
        <jdk.version>17</jdk.version>
        <hazelcast.module.name>com.hazelcast.core</hazelcast.module.name>
        <relocation.root>com.hazelcast.shaded</relocation.root>
        <relocation.dir>com/hazelcast/shaded</relocation.dir>

        <maven.build.timestamp.format>yyyyMMdd</maven.build.timestamp.format>

        <!--
        References the previously released version, used for compatibility tests
        We typically expect compatibility between sequential minor versions
        Patch version is unimportant due to semver - so for best coverage, deliberately use the oldest
        -->
        <hazelcast.previous.version>5.6.0</hazelcast.previous.version>
        <hazelcast.lts.version>5.5</hazelcast.lts.version>

        <!--used also as a dependency version in hazelcast-build-utils module-->
        <maven.shade.plugin.version>3.6.2</maven.shade.plugin.version>

        <os.maven.plugin.version>1.7.1</os.maven.plugin.version>
        <!-- Externalised so that checkstyle maintainers can test newer versions against Hazelcast -->
        <checkstyle.version>12.3.1</checkstyle.version>

        <!-- Match parquet and avro version - parquet-avro depends on avro - https://mvnrepository.com/artifact/org.apache.parquet/parquet-avro -->
        <avro.version>1.11.5</avro.version>
        <aws.sdk2.version>2.42.39</aws.sdk2.version>
        <calcite.version>1.35.0</calcite.version>
        <!--
        Calcite 1.35 dependency that has CVE
        Explicitly upgrade to a version not vulnerable to CVE - https://github.com/advisories/GHSA-gcg6-xv4f-f749
        Not required with Calcite >=1.37, 
         -->
        <janino.version>3.1.10</janino.version>
        <debezium.version>1.9.8.Final</debezium.version>
        <new.debezium.version>3.1.3.Final</new.debezium.version>
        <grpc.version>1.73.0</grpc.version>
        <hadoop.version>3.4.3</hadoop.version>
        <jackson.version>3.1.2</jackson.version>
        <jackson2.version>2.21.2</jackson2.version>
        <jackson.annotation.version>2.21</jackson.annotation.version>
        <jline.version>3.30.9</jline.version>
        <json-surfer.version>0.13</json-surfer.version>
        <jsr107.api.version>1.1.1</jsr107.api.version> <!-- JCache -->
        <!--
        Confluent depends on Kafka, and consideration should be given when upgrading
        https://docs.confluent.io/platform/current/installation/versions-interoperability.html#cp-and-apache-ak-compatibility
        `at.yawk.lz4:lz4-java` also needs upgrading at the same time
        -->
        <kafka.version>3.9.2</kafka.version>
        <!-- Match with com.hazelcast.jet.kafka.impl.DockerizedKafkaTestSupport#TEST_KAFKA_VERSION -->        
        <confluent.version>7.9.5</confluent.version>
        <kotlin.version>2.3.20</kotlin.version>
        <!-- Match parquet and avro version - parquet-avro depends on avro - https://mvnrepository.com/artifact/org.apache.parquet/parquet-avro -->
        <parquet.version>1.17.0</parquet.version>

        <spring.boot3.version>3.5.14</spring.boot3.version>
        <org.springframework6.version>6.2.18</org.springframework6.version>

        <spring.boot4.version>4.0.6</spring.boot4.version>
        <org.springframework7.version>7.0.7</org.springframework7.version>

        <!--
        Protobuf libraries for each language have own major version, but share minor and patch
        See https://developers.google.com/protocol-buffers/docs/news/2022-05-06
        -->
        <protobuf.version>25.8</protobuf.version>
        <java.protobuf.version>3.${protobuf.version}</java.protobuf.version>
        <python.protobuf.version>4.${protobuf.version}</python.protobuf.version>

        <scala.version>2.13</scala.version>
        <mongodb.version>5.6.4</mongodb.version>

        <!-- test dependencies -->
        <artemis.version>2.53.0</artemis.version>
        <bytebuddy.version>1.18.7</bytebuddy.version>
        <jsr107.tck.version>1.1.1</jsr107.tck.version>
        <hazelcast-hibernate53.version>5.2.0</hazelcast-hibernate53.version>
        <system-stubs.version>2.1.8</system-stubs.version>

        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <!--
        License plugin is not thread-safe, leads to flaky failures when checking licenses, so it is skipped by default.
        to run the build with license plugin run with `-T1 -Dlicense.skipAddThirdParty=false`.
        The `-T1` parameter disables the parallel build.
        -->
        <license.skipAddThirdParty>true</license.skipAddThirdParty>

        <!-- 
        Sources JAR properties
        Typically `sources` are only required for release
        -->
        <!-- https://maven.apache.org/plugins/maven-source-plugin/jar-mojo.html#skipSource -->
        <maven.source.skip>true</maven.source.skip>
        <!-- Controls if sources are included in shaded JAR -->
        <maven.shade.createSourcesJar>false</maven.shade.createSourcesJar>

        <!-- https://github.com/hazelcast/attribution-maven-plugin/blob/main/README.md#configuration-properties -->
        <attribution.skip>true</attribution.skip>

        <main.basedir>..</main.basedir>

        <maven.javadoc.plugin.excludePackageNames>
            *.impl:*.impl.*:*.internal:*.internal.*:*.operations:*.proxy:*.util:
            com.hazelcast.aws.security:*.handlermigration:*.client.connection.nio:
            *.client.console:*.buildutils:*.client.protocol.generator:*.cluster.client:
            *.concurrent:*.nio.ascii:*.nio.ssl:*.nio.tcp:*.partition.client:
            *.transaction.client:*.core.server:com.hazelcast.instance:com.hazelcast.PlaceHolder:
            io.github.*:org.apache.*
        </maven.javadoc.plugin.excludePackageNames>
        <maven.compiler.procfull/>
        <!-- Skip API compatibility check against a previous version (japicmp) -->
        <skip.public.api.check>false</skip.public.api.check>
        <!-- When false, the public API check does not fail fast and generates a full report for manual verification -->
        <public.api.check.break.build>true</public.api.check.break.build>
    </properties>

    <distributionManagement>
        <repository>
            <id>private-repository</id>
            <url>https://repository.hazelcast.com/release</url>
        </repository>
        <snapshotRepository>
            <id>private-repository</id>
            <url>https://repository.hazelcast.com/snapshot</url>
        </snapshotRepository>
    </distributionManagement>

    <dependencyManagement>
        <dependencies>
            <!--
            Pin dependencies to particular version.

            This doesn't add dependencies for modules, but if any of the modules uses any listed dependency, either
            directly or transitively, it will use the version specified here.
            This ensures that all jars with dependencies use the same version of a particular dependency, both for tests
            and for inclusion to the jar with dependencies.

            The enforcer plugin checks that no two modules have a dependency conflict, if they do simply add an entry
            with conflicting dependency here, using the higher version.
            -->

            <!-- Import versions from bom - avoids to importing many modules for certain dependencies, e.g. Jackson -->
            <!-- When upgrades Jackson, update version in jet-files-hz-hadoop-cp-image module too. -->
            <dependency>
                <groupId>tools.jackson</groupId>
                <artifactId>jackson-bom</artifactId>
                <version>${jackson.version}</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
            <!-- Kept for dependency convergence, as many libs still use Jackson 2.x -->
            <dependency>
                <groupId>com.fasterxml.jackson</groupId>
                <artifactId>jackson-bom</artifactId>
                <version>${jackson2.version}</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
            <dependency>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-bom</artifactId>
                <version>9.4.58.v20250814</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-bom</artifactId>
                <version>4.1.132.Final</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
            <dependency>
                <groupId>com.google.protobuf</groupId>
                <artifactId>protobuf-bom</artifactId>
                <version>${java.protobuf.version}</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
            <dependency>
                <groupId>io.grpc</groupId>
                <artifactId>grpc-bom</artifactId>
                <version>${grpc.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>org.apache.kafka</groupId>
                <artifactId>kafka-clients</artifactId>
                <version>${kafka.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.kafka</groupId>
                <artifactId>kafka-clients</artifactId>
                <version>${kafka.version}</version>
                <classifier>test</classifier>
            </dependency>
            <dependency>
                <groupId>org.apache.kafka</groupId>
                <artifactId>connect-api</artifactId>
                <version>${kafka.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.kafka</groupId>
                <artifactId>connect-runtime</artifactId>
                <version>${kafka.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.kafka</groupId>
                <artifactId>connect-transforms</artifactId>
                <version>${kafka.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.kafka</groupId>
                <artifactId>connect-json</artifactId>
                <version>${kafka.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.kafka</groupId>
                <artifactId>connect-file</artifactId>
                <version>${kafka.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.kafka</groupId>
                <artifactId>kafka_${scala.version}</artifactId>
                <version>${kafka.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.kafka</groupId>
                <artifactId>kafka_${scala.version}</artifactId>
                <version>${kafka.version}</version>
                <classifier>test</classifier>
            </dependency>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-client</artifactId>
                <version>${hadoop.version}</version>
                <exclusions>
                    <!-- The following dependencies are not needed for our use of Hadoop -->
                    <exclusion>
                        <groupId>ch.qos.reload4j</groupId>
                        <artifactId>reload4j</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-reload4j</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.eclipse.jetty</groupId>
                        <artifactId>jetty-servlet</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.eclipse.jetty</groupId>
                        <artifactId>jetty-webapp</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>javax.servlet.jsp</groupId>
                        <artifactId>jsp-api</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>com.sun.jersey</groupId>
                        <artifactId>jersey-servlet</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.jline</groupId>
                        <artifactId>jline</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.hadoop</groupId>
                        <artifactId>hadoop-yarn-common</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.hadoop</groupId>
                        <artifactId>hadoop-yarn-api</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.hadoop</groupId>
                        <artifactId>hadoop-yarn-client</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.kerby</groupId>
                        <artifactId>kerb-core</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.kerby</groupId>
                        <artifactId>kerb-simplekdc</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.curator</groupId>
                        <artifactId>curator-client</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.curator</groupId>
                        <artifactId>curator-recipes</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.curator</groupId>
                        <artifactId>curator-framework</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.bouncycastle</groupId>
                        <artifactId>bcprov-jdk18on</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.apache.avro</groupId>
                <artifactId>avro-mapred</artifactId>
                <version>${avro.version}</version>
                <exclusions>
                    <!-- The following dependencies are not needed for our use of Avro -->
                    <exclusion>
                        <groupId>org.apache.avro</groupId>
                        <artifactId>avro-ipc</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.avro</groupId>
                        <artifactId>avro-ipc-jetty</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.apache.parquet</groupId>
                <artifactId>parquet-avro</artifactId>
                <version>${parquet.version}</version>
                <exclusions>
                    <!--
                    The following library is not required, it only contains annotations and doclets
                    It also requires JDK11 since version 0.14
                    -->
                    <exclusion>
                        <groupId>org.apache.yetus</groupId>
                        <artifactId>audience-annotations</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>org.yaml</groupId>
                <artifactId>snakeyaml</artifactId>
                <version>2.6</version>
            </dependency>
            <dependency>
                <groupId>org.snakeyaml</groupId>
                <artifactId>snakeyaml-engine</artifactId>
                <version>3.0.1</version>
            </dependency>
            <!-- Addresses dependency convergence -->
            <dependency>
                <groupId>commons-codec</groupId>
                <artifactId>commons-codec</artifactId>
                <version>1.21.0</version>
            </dependency>
            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>2.21.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>3.20.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-text</artifactId>
                <version>1.15.0</version>
            </dependency>
            <dependency>
                <groupId>commons-collections</groupId>
                <artifactId>commons-collections</artifactId>
                <version>3.2.2</version>
            </dependency>
            <dependency>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
                <version>1.3.6</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-compress</artifactId>
                <version>1.28.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-math3</artifactId>
                <version>3.6.1</version>
            </dependency>
            <dependency>
                <groupId>joda-time</groupId>
                <artifactId>joda-time</artifactId>
                <version>2.14.1</version>
            </dependency>
            <dependency>
                <groupId>org.xerial.snappy</groupId>
                <artifactId>snappy-java</artifactId>
                <version>1.1.10.8</version>
            </dependency>
            <dependency>
                <groupId>com.microsoft.sqlserver</groupId>
                <artifactId>mssql-jdbc</artifactId>
                <version>13.4.0.jre11</version>
            </dependency>
            <dependency>
                <groupId>com.mysql</groupId>
                <artifactId>mysql-connector-j</artifactId>
                <version>9.6.0</version>
            </dependency>
            <dependency>
                <groupId>com.zendesk</groupId>
                <artifactId>mysql-binlog-connector-java</artifactId>
                <version>0.30.3</version>
            </dependency>
            <dependency>
                <groupId>org.postgresql</groupId>
                <artifactId>postgresql</artifactId>
                <version>42.7.11</version>
            </dependency>
            <dependency>
                <groupId>com.oracle.database.jdbc</groupId>
                <artifactId>ojdbc11</artifactId>
                <version>23.26.1.0.0</version>
                <scope>test</scope>
            </dependency>
            <!-- NOTE: httpcore and httpclient versions are not in sync -->
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpcore</artifactId>
                <version>4.4.16</version>
            </dependency>
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
                <version>4.5.14</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.woodstox</groupId>
                <artifactId>woodstox-core</artifactId>
                <version>7.1.1</version>
            </dependency>
            <dependency>
                <groupId>org.codehaus.woodstox</groupId>
                <artifactId>stax2-api</artifactId>
                <version>4.2.2</version>
            </dependency>
            <dependency>
                <groupId>org.apache.avro</groupId>
                <artifactId>avro</artifactId>
                <version>${avro.version}</version>
            </dependency>
            <dependency>
                <groupId>org.objenesis</groupId>
                <artifactId>objenesis</artifactId>
                <version>3.5</version>
            </dependency>
            <dependency>
                <groupId>com.github.luben</groupId>
                <artifactId>zstd-jni</artifactId>
                <version>1.5.7-7</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>2.0.17</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-bom</artifactId>
                <version>2.25.4</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
            <dependency>
                <groupId>org.jline</groupId>
                <artifactId>jline</artifactId>
                <version>${jline.version}</version>
                <classifier>jdk8</classifier>
            </dependency>
            <dependency>
                <groupId>org.checkerframework</groupId>
                <artifactId>checker-qual</artifactId>
                <version>3.54.0</version>
            </dependency>
            <dependency>
                <groupId>org.antlr</groupId>
                <artifactId>antlr4-runtime</artifactId>
                <version>4.13.2</version>
            </dependency>
            <dependency>
                <groupId>ch.qos.reload4j</groupId>
                <artifactId>reload4j</artifactId>
                <version>1.2.26</version>
            </dependency>
            <!--
              Resolves dependency convergence between:
              - `org.apache.kafka:kafka-clients`
              - `org.elasticsearch:elasticsearch-lz4`
              Should be set to the dependency version specified in the former
            -->
            <dependency>
                <groupId>at.yawk.lz4</groupId>
                <artifactId>lz4-java</artifactId>
                <version>1.10.1</version>
            </dependency>
            <dependency>
                <groupId>org.codehaus.janino</groupId>
                <artifactId>commons-compiler</artifactId>
                <version>${janino.version}</version>
            </dependency>
            <dependency>
                <groupId>org.codehaus.janino</groupId>
                <artifactId>janino</artifactId>
                <version>${janino.version}</version>
            </dependency>
            <dependency>
                <groupId>javax.xml.bind</groupId>
                <artifactId>jaxb-api</artifactId>
                <version>2.3.1</version>
            </dependency>
            <!--
            The following are test dependencies, they are not in the final distribution.
            We put them there for the dependency convergence task to succeed.
            -->
            <dependency>
                <groupId>net.bytebuddy</groupId>
                <artifactId>byte-buddy</artifactId>
                <version>${bytebuddy.version}</version>
            </dependency>
            <dependency>
                <groupId>net.bytebuddy</groupId>
                <artifactId>byte-buddy-agent</artifactId>
                <version>${bytebuddy.version}</version>
            </dependency>
            <dependency>
                <groupId>org.junit</groupId>
                <artifactId>junit-bom</artifactId>
                <version>6.0.3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.junit-pioneer</groupId>
                <artifactId>junit-pioneer</artifactId>
                <version>2.3.0</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.mockito</groupId>
                <artifactId>mockito-bom</artifactId>
                <version>5.23.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>nl.jqno.equalsverifier</groupId>
                <artifactId>equalsverifier</artifactId>
                <version>4.4.1</version>
            </dependency>
            <dependency>
                <groupId>org.reflections</groupId>
                <artifactId>reflections</artifactId>
                <version>0.10.2</version>
            </dependency>
            <dependency>
                <groupId>com.google.code.findbugs</groupId>
                <artifactId>jsr305</artifactId>
                <version>3.0.2</version>
            </dependency>
            <dependency>
                <groupId>com.tngtech.archunit</groupId>
                <artifactId>archunit</artifactId>
                <!--  When updating archunit.version, check/remove Java version assumptions in ArchUnitTestSupport -->
                <version>1.4.1</version>
            </dependency>
            <dependency>
                <groupId>com.google.errorprone</groupId>
                <artifactId>error_prone_annotations</artifactId>
                <version>2.48.0</version>
            </dependency>
            <dependency>
                <groupId>info.picocli</groupId>
                <artifactId>picocli</artifactId>
                <version>4.7.7</version>
            </dependency>
            <dependency>
                <groupId>org.awaitility</groupId>
                <artifactId>awaitility</artifactId>
                <version>4.3.0</version>
            </dependency>
            <dependency>
                <groupId>io.fabric8</groupId>
                <artifactId>kubernetes-client-bom</artifactId>
                <version>7.6.1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.google.j2objc</groupId>
                <artifactId>j2objc-annotations</artifactId>
                <version>3.1</version>
            </dependency>
            <dependency>
                <groupId>org.testcontainers</groupId>
                <artifactId>testcontainers-bom</artifactId>
                <version>1.21.4</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
            <!-- Update ApacheDS Mina dep version 2.0.16->2.0.23. https://issues.apache.org/jira/browse/DIRMINA-1107 -->
            <dependency>
                <groupId>org.apache.mina</groupId>
                <artifactId>mina-core</artifactId>
                <version>2.0.27</version>
                <scope>test</scope>
            </dependency>

            <!-- All of this is needed to upgrade GCS -->
            <!-- see https://hazelcast.atlassian.net/browse/HZ-4706 -->
            <dependency>
                <groupId>com.google.cloud</groupId>
                <artifactId>libraries-bom</artifactId>
                <version>26.78.0</version>
                <type>pom</type>
                <scope>import</scope>
                <!-- we specify explicit versions of these packages elsewhere, avoid conflicts -->
                <exclusions>
                    <exclusion>
                        <groupId>io.grpc</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>com.google.protobuf</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>org.jetbrains.kotlin</groupId>
                <artifactId>kotlin-bom</artifactId>
                <version>${kotlin.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.maven</groupId>
                <artifactId>maven-resolver-provider</artifactId>
                <version>3.9.15</version>
            </dependency>
            <dependency>
                <groupId>org.apache.maven</groupId>
                <artifactId>maven-artifact</artifactId>
                <version>3.9.14</version>
            </dependency>
            <dependency>
                <groupId>org.hdrhistogram</groupId>
                <artifactId>HdrHistogram</artifactId>
                <version>2.2.2</version>
            </dependency>
            <dependency>
                <groupId>org.neo4j.driver</groupId>
                <artifactId>neo4j-java-driver</artifactId>
                <version>6.0.3</version>
            </dependency>
            <dependency>
                <groupId>org.jctools</groupId>
                <artifactId>jctools-core</artifactId>
                <version>4.0.6</version>
            </dependency>
            <dependency>
                <groupId>com.h2database</groupId>
                <artifactId>h2</artifactId>
                <version>2.4.240</version>
            </dependency>
            <dependency>
                <groupId>org.assertj</groupId>
                <artifactId>assertj-core</artifactId>
                <version>3.27.7</version>
            </dependency>
            <dependency>
                <groupId>org.wiremock</groupId>
                <artifactId>wiremock-standalone</artifactId>
                <version>3.13.2</version>
            </dependency>
            <dependency>
                <groupId>com.squareup.okhttp3</groupId>
                <artifactId>okhttp-jvm</artifactId>
                <version>5.3.2</version>
            </dependency>
            <!-- Resolves convergence between hazelcast-sql (via calcite) & hazelcast-jet-files-azure (via parquet) -->
            <dependency>
                <groupId>org.locationtech.jts</groupId>
                <artifactId>jts-core</artifactId>
                <version>1.20.0</version>
            </dependency>
            <dependency>
                <groupId>javax.annotation</groupId>
                <artifactId>javax.annotation-api</artifactId>
                <version>1.3.2</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.15.0</version>
                    <configuration>
                        <fork>true</fork>
                        <release>${jdk.version}</release>
                        <encoding>UTF-8</encoding>
                        <compilerArgs>
                            <arg>-Xlint:-deprecation,-removal</arg>
                            <arg>${maven.compiler.procfull}</arg>
                        </compilerArgs>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <version>3.2.0</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-shade-plugin</artifactId>
                    <version>${maven.shade.plugin.version}</version>
                    <configuration>
                        <filters combine.children="append">
                            <filter>
                                <artifact>*:*</artifact>
                                <excludes>
                                    <exclude>module-info.class</exclude>
                                    <!-- We don't need to shade muli-release JAR content that targets a Java version lower than our minimum requirements -->
                                    <exclude>META-INF/versions/9/**</exclude>
                                    <exclude>META-INF/versions/11/**</exclude>
                                    <exclude>LICENSE</exclude>
                                    <exclude>NOTICE</exclude>
                                    <exclude>META-INF/*.SF</exclude>
                                    <exclude>META-INF/*.DSA</exclude>
                                    <exclude>META-INF/*.RSA</exclude>
                                    <exclude>META-INF/LICENSE</exclude>
                                    <exclude>META-INF/MANIFEST.MF</exclude>
                                    <exclude>META-INF/THIRD-PARTY.txt</exclude>
                                    <exclude>META-INF/DEPENDENCIES</exclude>
                                    <exclude>overview.html</exclude>
                                </excludes>
                            </filter>
                        </filters>
                        <relocations combine.children="append">
                            <!--
                            The default value of combine.self and combine.children attributes is "merge", which
                            merges the configurations of the parent and child modules in an element-wise manner.
                            For example, if the i-th <relocation> in this module uses <rawString>, the i-th
                            <relocation> in every submodule that does not override the <configuration>
                            (by specifying <configuration combine.self="override">) inherits <rawString>. See also:
                            https://github.com/codehaus-plexus/plexus-utils/blob/plexus-utils-3.5.1/src/main/java/org/codehaus/plexus/util/xml/Xpp3Dom.java#L382-L418
                            When computing the effective configurations for this module, only the combine.* attributes
                            declared in this POM are considered. However, combine.* attributes are inherited from
                            parent to child POMs (but not to nested elements), so that it is enough to specify
                            <relocations combine.children="append"> in this module instead of in every submodule.
                            See also: https://maven.apache.org/pom.html#plugins
                            -->
                            <relocation>
                                <!-- Covers non-versioned classes and service providers (META-INF/services/*). -->
                                <pattern>tools.jackson</pattern>
                                <shadedPattern>${relocation.root}.tools.jackson</shadedPattern>
                            </relocation>
                            <relocation>
                                <pattern>com.fasterxml.jackson</pattern>
                                <shadedPattern>${relocation.root}.com.fasterxml.jackson</shadedPattern>
                                <excludes>
                                    <!--
                                    The annotation package is excluded so the relocated classes are able
                                    to process non-relocated annotations, which are used by the users.
                                    -->
                                    <exclude>com.fasterxml.jackson.annotation.*</exclude>
                                </excludes>
                            </relocation>
                            <!--
                            We use rawString to relocate versioned classes (META-INF/versions/{n}/**),
                            where lookbehind is necessary to avoid matching already relocated classes.
                            See also: https://issues.apache.org/jira/browse/MSHADE-406
                            -->
                            <relocation>
                                <pattern>(?&lt;=META-INF/versions/\d{1,2}/)com/fasterxml/jackson(?!/annotation)</pattern>
                                <shadedPattern>${relocation.dir}/com/fasterxml/jackson</shadedPattern>
                                <rawString>true</rawString>
                            </relocation>
                            <relocation>
                                <pattern>(?&lt;=META-INF/versions/\d{1,2}/)tools/jackson(?!/annotation)</pattern>
                                <shadedPattern>${relocation.dir}/tools/jackson</shadedPattern>
                                <rawString>true</rawString>
                            </relocation>
                        </relocations>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-javadoc-plugin</artifactId>
                    <version>3.12.0</version>
                    <configuration>
                        <!-- Allows generation when non-JPMS dependencies (e.g. Groovy) are on classpath -->
                        <legacyMode>true</legacyMode>
                        <detectJavaApiLink>false</detectJavaApiLink>
                        <maxmemory>1024</maxmemory>
                        <excludePackageNames>${maven.javadoc.plugin.excludePackageNames}</excludePackageNames>
                        <doclint>-missing</doclint>
                        <quiet>true</quiet>
                    </configuration>
                    <executions>
                        <execution>
                            <id>attach-javadocs</id>
                            <goals>
                                <goal>jar</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>3.5.5</version>
                </plugin>
                <plugin>
                    <groupId>org.jacoco</groupId>
                    <artifactId>jacoco-maven-plugin</artifactId>
                    <version>0.8.14</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>3.5.0</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.5.0</version>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>license-maven-plugin</artifactId>
                    <version>2.7.1</version>
                    <configuration>
                        <failOnBlacklist>true</failOnBlacklist>
                        <failOnMissing>true</failOnMissing>
                        <licenseMerges>
                            <!--
                              Only merge new 3rd Party dependency license if you get a license build failure
                            -->
                            <licenseMerge>
                                Apache-2.0 |
                                Apache License v2.0 |
                                Apache Software License 2.0 |
                                The Apache Software License, Version 2.0 |
                                The Apache Software License, version 2.0 |
                                Apache License, Version 2.0 |
                                Apache 2 |
                                Apache 2.0 |
                                The Apache License, Version 2.0 |
                                Apache Software License - Version 2.0 |
                                Apache License Version 2.0 |
                                Apache License, version 2.0 |
                                Apache License 2.0
                            </licenseMerge>
                            <licenseMerge>
                                MIT |
                                The MIT License |
                                MIT License |
                                MIT license |
                                The MIT License (MIT)
                            </licenseMerge>
                            <licenseMerge>
                                BSD-2-Clause |
                                BSD 2-Clause License |
                                BSD 2-Clause license |
                                The BSD 2-Clause License
                            </licenseMerge>
                            <licenseMerge>
                                BSD-3-Clause |
                                BSD 3-Clause License |
                                BSD |
                                BSD licence |
                                The BSD License |
                                3-Clause BSD License |
                                New BSD license |
                                New BSD License |
                                Modified BSD License |
                                The New BSD License |
                                Revised BSD |
                                BSD New license |
                                BSD 3-clause
                            </licenseMerge>
                            <licenseMerge>
                                CC0-1.0 |
                                CC0 |
                                Public Domain, per Creative Commons CC0
                            </licenseMerge>
                            <licenseMerge>
                                CDDL |
                                CDDL 1.1 |
                                COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0 |
                                CDDL + GPLv2 with classpath exception |
                                CDDL License |
                                CDDL/GPLv2+CE |
                                GPL2 w/ CPE
                            </licenseMerge>
                            <licenseMerge>
                                Eclipse Distribution License - v 1.0 |
                                EDL 1.0
                            </licenseMerge>
                            <licenseMerge>
                                EPL-1.0 |
                                EPL 1.0 |
                                Eclipse Public License 1.0 |
                                Eclipse Public License - Version 1.0
                            </licenseMerge>
                            <licenseMerge>
                                EPL-2.0 |
                                EPL 2.0 |
                                Eclipse Public License v2.0 |
                                Eclipse Public License - Version 2.0 |
                                Eclipse Public License, Version 2.0
                            </licenseMerge>
                            <licenseMerge>
                                Hazelcast Community License |
                                The Hazelcast Community License
                            </licenseMerge>
                            <licenseMerge>
                                Go License
                                The Go License
                            </licenseMerge>
                        </licenseMerges>
                        <excludedGroups>com.hazelcast</excludedGroups>
                        <excludedScopes>test,provided</excludedScopes>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>com.hazelcast.maven</groupId>
                    <artifactId>attribution-maven-plugin</artifactId>
                    <version>1.4.3</version>
                    <configuration>
                        <exclusionPatterns>
                            <!--
                              Exclude false positives from the attribution.txt files. Some lines matching the `copyrightPattern`
                              are actually not the copyright lines. Let's exclude them here.

                              Example:
                              tools.jackson.core:jackson-databind:2.12.1
                                 (c) per-property override (from annotation on specific property or
                             -->
                            <exclusionPattern>^Copyright Laws of the United States.</exclusionPattern>
                            <exclusionPattern>per-property override</exclusionPattern>
                            <exclusionPattern>^copyright notice</exclusionPattern>
                            <exclusionPattern>FAILED_PRECONDITION</exclusionPattern>
                            <exclusionPattern>The ASF licenses this file to you under the Apache License
                            </exclusionPattern>
                            <exclusionPattern>Substitute for l, l</exclusionPattern>
                            <exclusionPattern>inside edge crossings that are between</exclusionPattern>
                            <exclusionPattern>The size of the key-exchange key</exclusionPattern>
                        </exclusionPatterns>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>3.1.4</version>
                </plugin>
                <plugin>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <version>3.10.0</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-source-plugin</artifactId>
                    <version>3.4.0</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <version>3.7.1</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-failsafe-plugin</artifactId>
                    <version>3.5.5</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.felix</groupId>
                    <artifactId>maven-bundle-plugin</artifactId>
                    <version>5.1.9</version>
                </plugin>
                <plugin>
                    <artifactId>maven-enforcer-plugin</artifactId>
                    <version>3.6.2</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-gpg-plugin</artifactId>
                    <version>3.2.8</version>
                    <configuration>
                        <gpgArguments>
                            <gpgArgument>--pinentry-mode</gpgArgument>
                            <gpgArgument>loopback</gpgArgument>
                        </gpgArguments>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>com.googlecode.maven-download-plugin</groupId>
                    <artifactId>download-maven-plugin</artifactId>
                    <version>1.13.0</version>
                </plugin>
                <plugin>
                    <groupId>org.xolstice.maven.plugins</groupId>
                    <artifactId>protobuf-maven-plugin</artifactId>
                    <version>0.6.1</version>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <version>3.6.3</version>
                </plugin>
                <plugin>
                    <groupId>pl.project13.maven</groupId>
                    <artifactId>git-commit-id-plugin</artifactId>
                    <version>2.1.13</version>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>cobertura-maven-plugin</artifactId>
                    <version>2.7</version>
                </plugin>
                <plugin>
                    <groupId>org.owasp</groupId>
                    <artifactId>dependency-check-maven</artifactId>
                    <version>12.2.0</version>
                    <configuration>
                        <format>ALL</format>
                        <skipProvidedScope>true</skipProvidedScope>
                        <nodeAuditAnalyzerEnabled>false</nodeAuditAnalyzerEnabled>
                        <suppressionFiles>owasp-check-suppressions.xml</suppressionFiles>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>3.5.0</version>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>build-helper-maven-plugin</artifactId>
                    <version>3.6.1</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>3.1.4</version>
                </plugin>
                <plugin>
                    <groupId>io.fabric8</groupId>
                    <artifactId>docker-maven-plugin</artifactId>
                    <version>0.48.1</version>
                </plugin>
                <plugin>
                    <groupId>com.github.siom79.japicmp</groupId>
                    <artifactId>japicmp-maven-plugin</artifactId>
                    <version>0.24.2</version>
                    <configuration>
                        <!-- Skip property -->
                        <skip>${skip.public.api.check}</skip>

                        <!-- Baseline-->
                        <oldVersion>
                            <dependency>
                                <groupId>${project.groupId}</groupId>
                                <artifactId>${project.artifactId}</artifactId>
                                <version>${hazelcast.public.api.baseline.version}</version>
                            </dependency>
                        </oldVersion>

                        <parameter>
                            <!-- Basic config -->
                            <onlyModified>true</onlyModified>
                            <ignoreMissingClasses>true</ignoreMissingClasses>
                            <ignoreMissingOldVersion>true</ignoreMissingOldVersion>
                            <ignoreMissingNewVersion>true</ignoreMissingNewVersion>
                            <ignoreMissingOptionalDependency>true</ignoreMissingOptionalDependency>
                            <ignoreNonResolvableArtifacts>true</ignoreNonResolvableArtifacts>

                            <!-- Breaking changes configuration -->
                            <breakBuildBasedOnSemanticVersioning>${public.api.check.break.build}</breakBuildBasedOnSemanticVersioning>

                            <!-- Validate only public API -->
                            <accessModifier>public</accessModifier>
                            <excludes>
                                <!-- Excluded breaking changes reported: -->
                                <!--  * StreamStage.filterStateful: METHOD_ABSTRACT_NOW_DEFAULT
                                This is a public API for user consumption, but not intended to be implemented by users. -->
                                <exclude>com.hazelcast.jet.pipeline.StreamStageWithKey#filterStateful(long,com.hazelcast.function.SupplierEx,com.hazelcast.function.BiPredicateEx)</exclude>

                                <!-- End of custom exclusions. Remove after release to detect future breaking changes between x.y.0 and patches -->

                                <!-- Exclude Jet core API - we provide patch-level compatibility guarantees only -->
                                <exclude>com.hazelcast.jet.core.*</exclude>

                                <!-- Exclude internal packages -->
                                <exclude>*.internal.*</exclude>
                                <exclude>*.impl.*</exclude>

                                <!-- Exclude by annotation -->
                                <exclude>@com.hazelcast.spi.annotation.Beta</exclude>
                                <exclude>@com.hazelcast.spi.annotation.PrivateApi</exclude>
                                <exclude>@com.hazelcast.jet.annotation.EvolvingApi</exclude>

                                <!-- Exclude included dependencies which are out of this project control -->
                                <exclude>com.hazelcast.license.*</exclude>
                                <exclude>${relocation.root}.*</exclude>
                            </excludes>

                            <!-- Skip .diff file report -->
                            <skipDiffReport>true</skipDiffReport>

                        </parameter>
                    </configuration>
                    <!-- Run with profile - public-api-compatibility -->
                </plugin>
            </plugins>
        </pluginManagement>

        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>license-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>add-third-party</id>
                        <goals>
                            <goal>add-third-party</goal>
                        </goals>
                        <phase>generate-resources</phase>
                        <configuration>
                            <outputDirectory>${project.build.outputDirectory}/META-INF</outputDirectory>
                            <force>true</force>
                            <fileTemplate>
                                ${main.basedir}/hazelcast-build-utils/src/main/resources/hazelcast-thirdparty-template.ftl
                            </fileTemplate>
                            <includedLicenses>
                                <!-- 
                                  Always use SPDX license identifiers listed in https://spdx.org/licenses (when available)
                                  note: GPL licenses are excluded in https://github.com/hazelcast/hazelcast/blob/master/hazelcast-build-utils/src/main/resources/hazelcast-thirdparty-template.ftl
                                -->
                                <includedLicense>Apache-2.0</includedLicense>
                                <includedLicense>MIT</includedLicense>
                                <includedLicense>MIT-0</includedLicense>
                                <includedLicense>BSD-2-Clause</includedLicense>
                                <includedLicense>BSD-3-Clause</includedLicense>
                                <includedLicense>CC0-1.0</includedLicense>
                                <includedLicense>CDDL</includedLicense>
                                <includedLicense>Eclipse Distribution License - v 1.0</includedLicense>
                                <includedLicense>EPL-1.0</includedLicense>
                                <includedLicense>EPL-2.0</includedLicense>
                                <includedLicense>Public Domain</includedLicense>
                                <includedLicense>Go License</includedLicense>
                            </includedLicenses>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-enforcer-plugin</artifactId>
                <executions>
                    <execution>
                        <id>jdk-version</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <requireJavaVersion>
                                    <version>[${jdk.version},)</version>
                                </requireJavaVersion>
                                <enforceBytecodeVersion>
                                    <maxJdkVersion>${jdk.version}</maxJdkVersion>
                                </enforceBytecodeVersion>
                            </rules>
                        </configuration>
                    </execution>
                    <execution>
                        <id>dependency-convergence</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <dependencyConvergence/>
                            </rules>
                        </configuration>
                    </execution>
                    <execution>
                        <id>enforce-banned-dependencies</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <bannedDependencies>
                                    <!--
                                    org.lz4:lz4-java is vulnerable to multiple CVEs and is abandoned.
                                    We use at.yawk.lz4:lz4-java instead, which is a community fork.
                                    -->
                                    <excludes>
                                        <exclude>org.lz4:lz4-java</exclude>
                                    </excludes>
                                </bannedDependencies>
                            </rules>
                            <fail>true</fail>
                        </configuration>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>extra-enforcer-rules</artifactId>
                        <version>1.12.0</version>
                    </dependency>
                </dependencies>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <version>3.6.0</version>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <configLocation>${checkstyle.configLocation}</configLocation>
                    <suppressionsLocation>${checkstyle.supressionsLocation}</suppressionsLocation>
                    <headerLocation>${checkstyle.headerLocation}</headerLocation>
                    <linkXRef>false</linkXRef>
                    <consoleOutput>true</consoleOutput>
                    <failsOnError>true</failsOnError>
                    <failOnViolation>true</failOnViolation>
                    <includeTestSourceDirectory>true</includeTestSourceDirectory>
                    <enableRulesSummary>true</enableRulesSummary>
                    <propertyExpansion>main.basedir=${main.basedir}</propertyExpansion>
                    <excludes>**/module-info.java</excludes>
                </configuration>
                <!-- Upgrade version of checkstyle to have more options, like ignoreAnnotatedBy -->
                <dependencies>
                    <dependency>
                        <groupId>com.puppycrawl.tools</groupId>
                        <artifactId>checkstyle</artifactId>
                        <version>${checkstyle.version}</version>
                    </dependency>
                </dependencies>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>flatten-maven-plugin</artifactId>
                <version>1.7.3</version>
                <configuration>
                    <flattenMode>ossrh</flattenMode>
                </configuration>
                <executions>
                    <execution>
                        <id>flatten</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>flatten</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>flatten.clean</id>
                        <goals>
                            <goal>clean</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <profile>
            <!--
            Explicitly enables annotation processing. Since JDK 23 it's required to activate annotation processing, otherwise
            we will get errors connected to the usage of Immutables (used by SQL engine).
            For more details on JDK change, you can check https://inside.java/2024/06/18/quality-heads-up/.
            -->
            <id>jdk-needing-annotation-processing-activation</id>
            <activation>
                <jdk>[23,)</jdk>
            </activation>
            <properties>
                <maven.compiler.procfull>-proc:full</maven.compiler.procfull>
            </properties>
        </profile>
        <profile>
            <!--
            Enables faster local builds, by skipping some validation steps (e.g. Checkstyle)
            -->
            <id>quick</id>
            <activation>
                <property>
                    <name>quick</name>
                </property>
            </activation>
            <properties>
                <!-- https://maven.apache.org/plugins/maven-checkstyle-plugin/checkstyle-mojo.html#skip -->
                <checkstyle.skip>true</checkstyle.skip>
                <!-- https://www.mojohaus.org/xml-maven-plugin/validate-mojo.html#skip -->
                <xml.skip>true</xml.skip>
                <!-- https://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#skipTests -->
                <skipTests>true</skipTests>
                <!-- https://maven.apache.org/plugins/maven-javadoc-plugin/javadoc-mojo.html#skip -->
                <maven.javadoc.skip>true</maven.javadoc.skip>
                <!-- https://maven.apache.org/enforcer/maven-enforcer-plugin/enforce-mojo.html#skip -->
                <enforcer.skip>true</enforcer.skip>
                <!-- https://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html#useIncrementalCompilation -->
                <maven.compiler.useIncrementalCompilation>false</maven.compiler.useIncrementalCompilation>
            </properties>
        </profile>

        <profile>
            <!--
            Configures release-specific options when doing an intermediate SNAPSHOT release

            Ensures Javadoc, sources etc. are generated and that an appropriate distribution destination is specified

            Unfortunately, it isn't possible to chain profiles, so we need to duplicate the javadoc plugin
            -->
            <id>release-snapshot</id>
            <properties>
                <maven.source.skip>false</maven.source.skip>
                <maven.shade.createSourcesJar>true</maven.shade.createSourcesJar>
                <attribution.skip>false</attribution.skip>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                    </plugin>
                    <plugin>
                        <groupId>com.hazelcast.maven</groupId>
                        <artifactId>attribution-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>per-jar-attribution</id>
                                <goals>
                                    <goal>generate</goal>
                                </goals>
                                <configuration>
                                    <outputFile>${project.build.outputDirectory}/META-INF/attribution.txt</outputFile>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        
        <!-- For use in CI (Continuous Integration) environments (Jenkins, GitHub actions etc) -->
        <profile>
            <id>CI</id>
            <activation>
                <property>
                    <!-- "CI" is an environment variable set in many CI pipelines, e.g. https://docs.gitlab.com/ee/ci/variables/predefined_variables.html -->
                    <name>env.CI</name>
                    <value>true</value>
                </property>
            </activation>
            <properties>
                <maven.test.redirectTestOutputToFile>true</maven.test.redirectTestOutputToFile>
            </properties>
        </profile>

        <profile>
            <!--
            Configures release-specific options when doing a final, production release

            Ensures Javadoc, sources etc. are generated and that the final JAR is cryptographically signed
            -->
            <id>release</id>
            <properties>
                <maven.source.skip>false</maven.source.skip>
                <maven.shade.createSourcesJar>true</maven.shade.createSourcesJar>
                <attribution.skip>false</attribution.skip>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-gpg-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>sign-artifacts</id>
                                <phase>verify</phase>
                                <goals>
                                    <goal>sign</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>com.hazelcast.maven</groupId>
                        <artifactId>attribution-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>per-jar-attribution</id>
                                <goals>
                                    <goal>generate</goal>
                                </goals>
                                <configuration>
                                    <outputFile>${project.build.outputDirectory}/META-INF/attribution.txt</outputFile>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <!-- USE WITH CAUTION! Switches deployment from JFrog Artifactory to Maven Central for releases -->
            <id>enable-maven-central</id>
            <properties>
                <maven.central.autoReleaseAfterClose>false</maven.central.autoReleaseAfterClose>
                <deploy.name>Hazelcast ${project.version}</deploy.name>
            </properties>
            <build>
                <pluginManagement>
                    <plugins>
                        <plugin>
                            <groupId>org.sonatype.central</groupId>
                            <artifactId>central-publishing-maven-plugin</artifactId>
                            <version>0.10.0</version>
                            <extensions>true</extensions>
                            <configuration>
                                <!-- server id comes from settings.xml -->
                                <publishingServerId>release-repository</publishingServerId>
                                <!--
                                wait until the artifacts are actually published automatically using 'autoPublish'.
                                the default is `validated` which would then require manual publishing
                                -->
                                <waitUntil>published</waitUntil>
                                <autoPublish>${maven.central.autoReleaseAfterClose}</autoPublish>
                                <checksums>required</checksums>
                                <deploymentName>Deployment ${deploy.name}</deploymentName>
                            </configuration>
                        </plugin>
                    </plugins>
                </pluginManagement>
                <plugins>
                    <plugin>
                        <groupId>org.sonatype.central</groupId>
                        <artifactId>central-publishing-maven-plugin</artifactId>
                        <inherited>false</inherited>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <!-- USE WITH CAUTION! Activates automatic release to Maven Central upon closing the staging repository -->
            <id>auto-release-maven-central</id>
            <properties>
                <maven.central.autoReleaseAfterClose>true</maven.central.autoReleaseAfterClose>
            </properties>
        </profile>

        <!--
        A range of Spring versions are supported - using profiles allow configuration of different major versions for testing
        The supported versions of Spring are featured in the public documentation
        As such upgrades require corresponding documentation updates
        https://github.com/hazelcast/hz-docs/blob/main/docs/modules/spring/pages/overview.adoc#supported-versions
        -->
        <profile>
            <id>spring-7</id>
            <activation>
                <!--
                Make this the default profile
                workaround the fact that `activeByDefault` profiles only work if _no-other_ profile is specified
                instead activate the profile unless some non-existent profile is set
                https://stackoverflow.com/a/7481347
                -->
                <property>
                    <name>!tested.spring.override</name>
                </property>
            </activation>
            <properties>
                <!-- should only be Spring 7 -->
                <spring.boot.version>${spring.boot4.version}</spring.boot.version>
                <org.springframework.version>${org.springframework7.version}</org.springframework.version>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>jakarta.inject</groupId>
                    <artifactId>jakarta.inject-api</artifactId>
                    <version>2.0.1</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>
        </profile>
        <profile>
            <id>spring-6</id>
            <activation>
                <property>
                    <name>tested.spring.override</name>
                    <value>6</value>
                </property>
            </activation>
            <properties>
                <!-- should only be Spring 6 -->
                <spring.boot.version>${spring.boot3.version}</spring.boot.version>
                <org.springframework.version>${org.springframework6.version}</org.springframework.version>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>javax.inject</groupId>
                    <artifactId>javax.inject</artifactId>
                    <version>1</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>
        </profile>
        <profile>
            <id>spring-5</id>
            <activation>
                <property>
                    <name>tested.spring.override</name>
                    <value>5</value>
                </property>
            </activation>
            <properties>
                <!-- should only be Spring 5 -->
                <spring.boot.version>2.7.18</spring.boot.version>
                <org.springframework.version>5.3.39</org.springframework.version>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>javax.inject</groupId>
                    <artifactId>javax.inject</artifactId>
                    <version>1</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>
        </profile>
        <!-- Profile used to compare the current version with the baseline defined in hazelcast.public.api.baseline.version
          This comparison is done by japicmp plugin which compares jars - already released one with the current snapshot -->
        <profile>
            <id>public-api-compatibility</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>com.github.siom79.japicmp</groupId>
                        <artifactId>japicmp-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>public-api-compatibility</id>
                                <phase>verify</phase>
                                <goals>
                                    <goal>cmp</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

    <repositories>
        <repository>
            <!--
            This is the same as central in the super pom.
            Putting it here changes the order in which the repositories are queried.
            Most artefacts are stored in central so this provides best build times when a mirror is not used.
            Repository order reference:
            https://maven.apache.org/guides/mini/guide-multiple-repositories.html#repository-order
            -->
            <id>central-redeclared</id>
            <name>Central Repository</name>
            <url>https://repo.maven.apache.org/maven2</url>
            <releases>
                <enabled>true</enabled>
                <updatePolicy>never</updatePolicy>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>snapshot-repository</id>
            <name>Maven2 Snapshot Repository</name>
            <url>https://central.sonatype.com/repository/maven-snapshots/</url>
            <releases>
                <enabled>false</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>hazelcast-security</id>
            <name>Thirdparty security fixes</name>
            <url>https://repository.hazelcast.com/security-maven/</url>
            <releases>
                <enabled>true</enabled>
                <updatePolicy>never</updatePolicy>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>hazelcast-private-repository</id>
            <name>Hazelcast Private Repository</name>
            <url>https://repository.hazelcast.com/release/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>hazelcast-private-snapshot-repository</id>
            <name>Hazelcast Private Repository</name>
            <url>https://repository.hazelcast.com/snapshot/</url>
            <releases>
                <enabled>false</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>confluent</id>
            <url>https://packages.confluent.io/maven/</url>
            <releases>
                <enabled>true</enabled>
                <updatePolicy>never</updatePolicy>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
        <!-- Red Hat Maven repository provides patches for several vulnerable libraries (dependencies) which are not patched in the Maven Central repository. -->
        <repository>
            <id>redhat-ga</id>
            <url>https://maven.repository.redhat.com/ga/</url>
            <releases>
                <enabled>true</enabled>
                <updatePolicy>never</updatePolicy>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
</project>
