<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one or more
  ~ contributor license agreements.  See the NOTICE file distributed with
  ~ this work for additional information regarding copyright ownership.
  ~ The ASF licenses this file to You 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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.apache</groupId>
        <artifactId>apache</artifactId>
        <version>31</version>
    </parent>

    <groupId>org.apache.kyuubi</groupId>
    <artifactId>kyuubi-parent</artifactId>
    <version>1.9.0</version>
    <packaging>pom</packaging>

    <name>Kyuubi Project Parent</name>
    <url>https://kyuubi.apache.org/</url>

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

    <mailingLists>
        <mailingList>
            <name>Dev Mailing List</name>
            <subscribe>dev-subscribe@kyuubi.apache.org</subscribe>
            <unsubscribe>dev-unsubscribe@kyuubi.apache.org</unsubscribe>
            <post>dev@kyuubi.apache.org</post>
            <archive>https://mail-archives.apache.org/mod_mbox/kyuubi-dev</archive>
        </mailingList>
    </mailingLists>

    <modules>
        <module>dev/kyuubi-codecov</module>
        <module>extensions/server/kyuubi-server-plugin</module>
        <module>extensions/spark/kyuubi-extension-spark-jdbc-dialect</module>
        <module>extensions/spark/kyuubi-spark-authz</module>
        <module>extensions/spark/kyuubi-spark-authz-shaded</module>
        <module>extensions/spark/kyuubi-spark-connector-common</module>
        <module>extensions/spark/kyuubi-spark-connector-tpcds</module>
        <module>extensions/spark/kyuubi-spark-connector-tpch</module>
        <module>extensions/spark/kyuubi-spark-lineage</module>
        <module>externals/kyuubi-chat-engine</module>
        <module>externals/kyuubi-download</module>
        <module>externals/kyuubi-flink-sql-engine</module>
        <module>externals/kyuubi-hive-sql-engine</module>
        <module>externals/kyuubi-jdbc-engine</module>
        <module>externals/kyuubi-spark-sql-engine</module>
        <module>externals/kyuubi-trino-engine</module>
        <module>integration-tests</module>
        <module>kyuubi-assembly</module>
        <module>kyuubi-common</module>
        <module>kyuubi-ctl</module>
        <module>kyuubi-events</module>
        <module>kyuubi-ha</module>
        <module>kyuubi-hive-beeline</module>
        <module>kyuubi-hive-jdbc</module>
        <module>kyuubi-hive-jdbc-shaded</module>
        <module>kyuubi-metrics</module>
        <module>kyuubi-rest-client</module>
        <module>kyuubi-server</module>
        <module>kyuubi-util</module>
        <module>kyuubi-util-scala</module>
        <module>kyuubi-zookeeper</module>
    </modules>

    <scm>
        <connection>scm:git:git@github.com:apache/kyuubi.git</connection>
        <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/kyuubi.git</developerConnection>
        <tag>HEAD</tag>
        <url>scm:git:git@github.com:apache/kyuubi.git</url>
    </scm>

    <issueManagement>
        <system>GitHub Issues</system>
        <url>https://github.com/apache/kyuubi/issues</url>
    </issueManagement>

    <distributionManagement>
        <repository>
            <id>${distMgmtReleaseId}</id>
            <name>${distMgmtReleaseName}</name>
            <url>${distMgmtReleaseUrl}</url>
        </repository>
        <snapshotRepository>
            <id>${distMgmtSnapshotsId}</id>
            <name>${distMgmtSnapshotsName}</name>
            <url>${distMgmtSnapshotsUrl}</url>
        </snapshotRepository>
    </distributionManagement>

    <properties>
        <java.version>1.8</java.version>
        <maven.version>3.8.8</maven.version>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>
        <scala.version>2.12.18</scala.version>
        <scala.binary.version>2.12</scala.binary.version>
        <scala-collection-compat.version>2.8.1</scala-collection-compat.version>

        <arrow.version>12.0.0</arrow.version>
        <!-- Please don't upgrade the version to 4.10+, it depends on JDK 11 -->
        <antlr4.version>4.9.3</antlr4.version>
        <antlr.st4.version>4.3.4</antlr.st4.version>
        <apache.archive.dist>https://archive.apache.org/dist</apache.archive.dist>
        <atlas.version>2.3.0</atlas.version>
        <bouncycastle.version>1.77</bouncycastle.version>
        <codahale.metrics.version>4.2.23</codahale.metrics.version>
        <commons-cli.version>1.5.0</commons-cli.version>
        <commons-codec.version>1.15</commons-codec.version>
        <commons-collections.version>3.2.2</commons-collections.version>
        <commons-io.version>2.11.0</commons-io.version>
        <commons-lang.version>2.6</commons-lang.version>
        <commons-lang3.version>3.13.0</commons-lang3.version>
        <delta.artifact>delta-spark</delta.artifact>
        <delta.version>3.1.0</delta.version>
        <failsafe.verion>3.3.2</failsafe.verion>
        <fb303.version>0.9.3</fb303.version>
        <flexmark.version>0.62.2</flexmark.version>
        <flink.version>1.17.2</flink.version>
        <flink.archive.name>flink-${flink.version}-bin-scala_2.12.tgz</flink.archive.name>
        <flink.archive.mirror>${apache.archive.dist}/flink/flink-${flink.version}</flink.archive.mirror>
        <flink.archive.download.skip>false</flink.archive.download.skip>
        <google.jsr305.version>3.0.2</google.jsr305.version>
        <grpc.version>1.60.2</grpc.version>
        <guava.version>32.0.1-jre</guava.version>
        <guava.failureaccess.version>1.0.1</guava.failureaccess.version>
        <hadoop.version>3.3.6</hadoop.version>
        <hikaricp.version>4.0.3</hikaricp.version>
        <fliptables.verion>1.0.2</fliptables.verion>
        <hive.version>3.1.3</hive.version>
        <hive.archive.name>apache-hive-${hive.version}-bin.tar.gz</hive.archive.name>
        <hive.archive.mirror>${apache.archive.dist}/hive/hive-${hive.version}</hive.archive.mirror>
        <hive.archive.download.skip>false</hive.archive.download.skip>
        <httpclient.version>4.5.14</httpclient.version>
        <httpcore.version>4.4.16</httpcore.version>
        <hudi.version>0.14.0</hudi.version>
        <hudi.spark.binary.version>${spark.binary.version}</hudi.spark.binary.version>
        <iceberg.version>1.4.3</iceberg.version>
        <jackson.version>2.15.4</jackson.version>
        <jakarta.servlet-api.version>4.0.4</jakarta.servlet-api.version>
        <jakarta.xml-bind.version>2.3.2</jakarta.xml-bind.version>
        <jakarta.activation.version>1.2.2</jakarta.activation.version>
        <jersey.version>2.39.1</jersey.version>
        <jetcd.version>0.7.7</jetcd.version>
        <jetty.version>9.4.52.v20230823</jetty.version>
        <jline.version>2.14.6</jline.version>
        <junit.version>4.13.2</junit.version>
        <kafka.version>3.5.1</kafka.version>
        <kubernetes-client.version>6.8.1</kubernetes-client.version>
        <kyuubi-relocated.version>0.3.0</kyuubi-relocated.version>
        <kyuubi-relocated-zookeeper.artifacts>kyuubi-relocated-zookeeper-34</kyuubi-relocated-zookeeper.artifacts>
        <ldapsdk.version>6.0.5</ldapsdk.version>
        <log4j.version>2.20.0</log4j.version>
        <mysql.jdbc.version>8.0.32</mysql.jdbc.version>
        <mockito.version>4.11.0</mockito.version>
        <netty.version>4.1.100.Final</netty.version>
        <openai.java.version>0.12.0</openai.java.version>
        <retrofit.version>2.9.0</retrofit.version>
        <paimon.version>0.7.0-incubating</paimon.version>
        <paimon.spark.binary.version>${spark.binary.version}</paimon.spark.binary.version>
        <parquet.version>1.10.1</parquet.version>
        <phoenix.version>6.0.0</phoenix.version>
        <postgresql.version>42.7.2</postgresql.version>
        <prometheus.version>0.16.0</prometheus.version>
        <protobuf.version>3.21.7</protobuf.version>
        <py4j.version>0.10.7</py4j.version>
        <ranger.version>2.4.0</ranger.version>
        <scalatest.version>3.2.16</scalatest.version>
        <scalatestplus.version>3.2.16.0</scalatestplus.version>
        <scopt.version>4.1.0</scopt.version>
        <slf4j.version>1.7.36</slf4j.version>
        <snakeyaml.version>2.2</snakeyaml.version>
        <!--
          DO NOT forget to change the following properties when change the minor version of Spark:
          `delta.version`, `delta.artifact`, `maven.plugin.scalatest.exclude.tags`
          -->
        <spark.version>3.5.1</spark.version>
        <spark.binary.version>3.5</spark.binary.version>
        <spark.archive.scala.suffix></spark.archive.scala.suffix>
        <spark.archive.name>spark-${spark.version}-bin-hadoop3${spark.archive.scala.suffix}.tgz</spark.archive.name>
        <spark.archive.mirror>${apache.archive.dist}/spark/spark-${spark.version}</spark.archive.mirror>
        <spark.archive.download.skip>false</spark.archive.download.skip>
        <sqlite.version>3.42.0.0</sqlite.version>
        <supercsv.version>2.2.0</supercsv.version>
        <swagger.version>2.2.1</swagger.version>
        <testcontainers-scala.version>0.41.0</testcontainers-scala.version>
        <!-- https://github.com/ThreeTen/threeten-extra/issues/226 -->
        <threeten.version>1.7.0</threeten.version>
        <!-- trino-client involves kotlin runtime dependencies since 412 because of upgrading okhttp -->
        <trino.client.version>411</trino.client.version>
        <trino.tpcds.version>1.4</trino.tpcds.version>
        <trino.tpch.version>1.1</trino.tpch.version>

        <!-- webui -->
        <webui.skip>true</webui.skip>
        <node.version>v18.16.0</node.version>
        <pnpm.version>v8.6.1</pnpm.version>

        <hive.jdbc.artifact>kyuubi-hive-jdbc</hive.jdbc.artifact>

        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <jars.target.dir>${project.build.directory}/scala-${scala.binary.version}/jars</jars.target.dir>

        <maven.plugin.build.helper.version>3.3.0</maven.plugin.build.helper.version>
        <maven.plugin.download.version>1.8.1</maven.plugin.download.version>
        <maven.plugin.download.cache.path></maven.plugin.download.cache.path>
        <maven.plugin.enforcer.mojo.rules.version>1.6.1</maven.plugin.enforcer.mojo.rules.version>
        <maven.plugin.frontend.version>1.12.1</maven.plugin.frontend.version>
        <maven.plugin.scala.version>4.8.0</maven.plugin.scala.version>
        <maven.plugin.scalatest.version>2.2.0</maven.plugin.scalatest.version>
        <maven.plugin.scalatest.exclude.tags>org.scalatest.tags.Slow</maven.plugin.scalatest.exclude.tags>
        <maven.plugin.scalatest.include.tags></maven.plugin.scalatest.include.tags>
        <maven.plugin.scalatest.debug.enabled>false</maven.plugin.scalatest.debug.enabled>
        <maven.plugin.spotless.version>2.30.0</maven.plugin.spotless.version>
        <maven.plugin.surefire.version>3.2.1</maven.plugin.surefire.version>
        <maven.plugin.surefire.argLine></maven.plugin.surefire.argLine>
        <maven.plugin.jacoco.version>0.8.11</maven.plugin.jacoco.version>
        <maven.plugin.scalastyle.version>1.0.0</maven.plugin.scalastyle.version>
        <maven.plugin.shade.version>3.5.2</maven.plugin.shade.version>
        <maven.plugin.silencer.version>1.7.13</maven.plugin.silencer.version>
        <!-- MSOURCES-121 breaks creating source artifacts for shaded modules,
             we should skip upgrading until MSOURCES-141 gets fixed. -->
        <maven.plugin.source.version>3.2.1</maven.plugin.source.version>

        <maven.scaladoc.skip>false</maven.scaladoc.skip>
        <maven.scalastyle.skip>false</maven.scalastyle.skip>
        <!-- Needed for consistent times -->
        <maven.build.timestamp.format>yyyy-MM-dd HH:mm:ss z</maven.build.timestamp.format>

        <!-- Package to use when relocating shaded classes. -->
        <kyuubi.shade.packageName>org.apache.kyuubi.shade</kyuubi.shade.packageName>

        <!-- Needed for Spotless style check-->
        <spotless.java.googlejavaformat.version>1.7</spotless.java.googlejavaformat.version>
        <spotless.python.includes></spotless.python.includes>
        <spotless.python.black.version>22.3.0</spotless.python.black.version>
        <!-- Please also update .scalafmt.conf when you change it here -->
        <spotless.scala.scalafmt.version>3.7.5</spotless.scala.scalafmt.version>

        <distMgmtReleaseId>apache.releases.https</distMgmtReleaseId>
        <distMgmtReleaseName>Apache Release Distribution Repository</distMgmtReleaseName>
        <distMgmtReleaseUrl>https://repository.apache.org/service/local/staging/deploy/maven2</distMgmtReleaseUrl>
        <distMgmtSnapshotsId>apache.snapshots.https</distMgmtSnapshotsId>
        <distMgmtSnapshotsName>Apache Development Snapshot Repository</distMgmtSnapshotsName>
        <distMgmtSnapshotsUrl>https://repository.apache.org/content/repositories/snapshots</distMgmtSnapshotsUrl>

        <debugArgLine>-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005</debugArgLine>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.apache.kyuubi</groupId>
                <artifactId>kyuubi-relocated-thrift</artifactId>
                <version>${kyuubi-relocated.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.kyuubi</groupId>
                <artifactId>kyuubi-relocated-hive-service-rpc</artifactId>
                <version>${kyuubi-relocated.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.kyuubi</groupId>
                <artifactId>${kyuubi-relocated-zookeeper.artifacts}</artifactId>
                <version>${kyuubi-relocated.version}</version>
            </dependency>
            <dependency>
                <groupId>org.antlr</groupId>
                <artifactId>antlr4-runtime</artifactId>
                <version>${antlr4.version}</version>
            </dependency>
            <dependency>
                <groupId>org.antlr</groupId>
                <artifactId>ST4</artifactId>
                <version>${antlr.st4.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.arrow</groupId>
                <artifactId>arrow-vector</artifactId>
                <version>${arrow.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.arrow</groupId>
                <artifactId>arrow-memory-netty</artifactId>
                <version>${arrow.version}</version>
            </dependency>
            <dependency>
                <groupId>org.scala-lang</groupId>
                <artifactId>scala-library</artifactId>
                <version>${scala.version}</version>
            </dependency>

            <dependency>
                <groupId>org.scala-lang</groupId>
                <artifactId>scala-compiler</artifactId>
                <version>${scala.version}</version>
            </dependency>

            <dependency>
                <groupId>org.scala-lang</groupId>
                <artifactId>scala-reflect</artifactId>
                <version>${scala.version}</version>
            </dependency>

            <dependency>
                <groupId>org.scala-lang.modules</groupId>
                <artifactId>scala-collection-compat_${scala.binary.version}</artifactId>
                <version>${scala-collection-compat.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-client-api</artifactId>
                <version>${hadoop.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.xerial.snappy</groupId>
                        <artifactId>snappy-java</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-client-runtime</artifactId>
                <version>${hadoop.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>com.google.code.findbugs</groupId>
                        <artifactId>jsr305</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.xerial.snappy</groupId>
                        <artifactId>snappy-java</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <version>${guava.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.checkerframework</groupId>
                        <artifactId>checker-qual</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>com.google.errorprone</groupId>
                        <artifactId>error_prone_annotations</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>com.google.j2objc</groupId>
                        <artifactId>j2objc-annotations</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>com.google.guava</groupId>
                        <artifactId>listenablefuture</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>failureaccess</artifactId>
                <version>${guava.failureaccess.version}</version>
            </dependency>

            <dependency>
                <groupId>com.google.code.findbugs</groupId>
                <artifactId>jsr305</artifactId>
                <version>${google.jsr305.version}</version>
            </dependency>

            <dependency>
                <groupId>commons-cli</groupId>
                <artifactId>commons-cli</artifactId>
                <version>${commons-cli.version}</version>
            </dependency>

            <dependency>
                <groupId>commons-codec</groupId>
                <artifactId>commons-codec</artifactId>
                <version>${commons-codec.version}</version>
            </dependency>

            <dependency>
                <groupId>commons-collections</groupId>
                <artifactId>commons-collections</artifactId>
                <version>${commons-collections.version}</version>
            </dependency>

            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>${commons-io.version}</version>
            </dependency>

            <dependency>
                <groupId>commons-lang</groupId>
                <artifactId>commons-lang</artifactId>
                <version>${commons-lang.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>${commons-lang3.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.spark</groupId>
                <artifactId>spark-core_${scala.binary.version}</artifactId>
                <version>${spark.version}</version>
                <exclusions>
                    <!--  Use log4j2 -->
                    <exclusion>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-log4j12</artifactId>
                    </exclusion>
                    <!-- SPARK-40511 upgrade SLF4J2, which is not compatible w/ SLF4J1 -->
                    <exclusion>
                        <groupId>org.apache.logging.log4j</groupId>
                        <artifactId>log4j-slf4j2-impl</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>org.apache.spark</groupId>
                <artifactId>spark-repl_${scala.binary.version}</artifactId>
                <version>${spark.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.spark</groupId>
                <artifactId>spark-sql_${scala.binary.version}</artifactId>
                <version>${spark.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.spark</groupId>
                <artifactId>spark-hive_${scala.binary.version}</artifactId>
                <version>${spark.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.spark</groupId>
                <artifactId>spark-core_${scala.binary.version}</artifactId>
                <version>${spark.version}</version>
                <type>test-jar</type>
                <exclusions>
                    <!--  Use log4j2 -->
                    <exclusion>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-log4j12</artifactId>
                    </exclusion>
                    <!-- SPARK-40511 upgrade SLF4J2, which is not compatible w/ SLF4J1 -->
                    <exclusion>
                        <groupId>org.apache.logging.log4j</groupId>
                        <artifactId>log4j-slf4j2-impl</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>org.apache.spark</groupId>
                <artifactId>spark-catalyst_${scala.binary.version}</artifactId>
                <version>${spark.version}</version>
                <type>test-jar</type>
            </dependency>

            <dependency>
                <groupId>org.apache.spark</groupId>
                <artifactId>spark-sql_${scala.binary.version}</artifactId>
                <version>${spark.version}</version>
                <type>test-jar</type>
            </dependency>

            <dependency>
                <groupId>io.trino</groupId>
                <artifactId>trino-client</artifactId>
                <version>${trino.client.version}</version>
            </dependency>

            <dependency>
                <groupId>io.trino</groupId>
                <artifactId>trino-jdbc</artifactId>
                <version>${trino.client.version}</version>
            </dependency>

            <dependency>
                <groupId>io.trino.tpcds</groupId>
                <artifactId>tpcds</artifactId>
                <version>${trino.tpcds.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>*</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>io.trino.tpch</groupId>
                <artifactId>tpch</artifactId>
                <version>${trino.tpch.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>*</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>com.dimafeng</groupId>
                <artifactId>testcontainers-scala-scalatest_${scala.binary.version}</artifactId>
                <version>${testcontainers-scala.version}</version>
            </dependency>

            <dependency>
                <groupId>com.dimafeng</groupId>
                <artifactId>testcontainers-scala-mysql_${scala.binary.version}</artifactId>
                <version>${testcontainers-scala.version}</version>
            </dependency>

            <dependency>
                <groupId>com.dimafeng</groupId>
                <artifactId>testcontainers-scala-postgresql_${scala.binary.version}</artifactId>
                <version>${testcontainers-scala.version}</version>
            </dependency>

            <dependency>
                <groupId>com.dimafeng</groupId>
                <artifactId>testcontainers-scala-trino_${scala.binary.version}</artifactId>
                <version>${testcontainers-scala.version}</version>
            </dependency>

            <dependency>
                <groupId>com.dimafeng</groupId>
                <artifactId>testcontainers-scala-kafka_${scala.binary.version}</artifactId>
                <version>${testcontainers-scala.version}</version>
            </dependency>

            <dependency>
                <groupId>io.fabric8</groupId>
                <artifactId>kubernetes-client</artifactId>
                <version>${kubernetes-client.version}</version>
            </dependency>
            <!--
                according to kubernetes-client MIGRATION-v6.md, we should include this dependency
                for doing any customization to OkHttp clients.
                https://github.com/fabric8io/kubernetes-client/blob/master/doc/MIGRATION-v6.md#okhttp-httpclient
            -->
            <dependency>
                <groupId>io.fabric8</groupId>
                <artifactId>kubernetes-httpclient-okhttp</artifactId>
                <version>${kubernetes-client.version}</version>
            </dependency>

            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>${slf4j.version}</version>
            </dependency>

            <dependency>
                <groupId>com.vladsch.flexmark</groupId>
                <artifactId>flexmark-all</artifactId>
                <version>${flexmark.version}</version>
            </dependency>

            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>jcl-over-slf4j</artifactId>
                <version>${slf4j.version}</version>
            </dependency>

            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>jul-to-slf4j</artifactId>
                <version>${slf4j.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-slf4j-impl</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-api</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-core</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <dependency>
                <!-- API bridge between log4j 1 and 2 -->
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-1.2-api</artifactId>
                <version>${log4j.version}</version>
            </dependency>

            <dependency>
                <groupId>io.dropwizard.metrics</groupId>
                <artifactId>metrics-core</artifactId>
                <version>${codahale.metrics.version}</version>
            </dependency>

            <dependency>
                <groupId>io.dropwizard.metrics</groupId>
                <artifactId>metrics-jvm</artifactId>
                <version>${codahale.metrics.version}</version>
            </dependency>

            <dependency>
                <groupId>io.dropwizard.metrics</groupId>
                <artifactId>metrics-jmx</artifactId>
                <version>${codahale.metrics.version}</version>
            </dependency>

            <dependency>
                <groupId>io.dropwizard.metrics</groupId>
                <artifactId>metrics-json</artifactId>
                <version>${codahale.metrics.version}</version>
            </dependency>

            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>
                <version>${jackson.version}</version>
            </dependency>

            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-core</artifactId>
                <version>${jackson.version}</version>
            </dependency>

            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>${jackson.version}</version>
            </dependency>

            <dependency>
                <groupId>com.fasterxml.jackson.dataformat</groupId>
                <artifactId>jackson-dataformat-yaml</artifactId>
                <version>${jackson.version}</version>
            </dependency>

            <dependency>
                <groupId>com.fasterxml.jackson.datatype</groupId>
                <artifactId>jackson-datatype-jsr310</artifactId>
                <version>${jackson.version}</version>
            </dependency>

            <dependency>
                <groupId>com.fasterxml.jackson.datatype</groupId>
                <artifactId>jackson-datatype-jdk8</artifactId>
                <version>${jackson.version}</version>
            </dependency>

            <dependency>
                <groupId>com.fasterxml.jackson.jaxrs</groupId>
                <artifactId>jackson-jaxrs-base</artifactId>
                <version>${jackson.version}</version>
            </dependency>

            <dependency>
                <groupId>com.fasterxml.jackson.jaxrs</groupId>
                <artifactId>jackson-jaxrs-json-provider</artifactId>
                <version>${jackson.version}</version>
            </dependency>

            <dependency>
                <groupId>com.fasterxml.jackson.module</groupId>
                <artifactId>jackson-module-jaxb-annotations</artifactId>
                <version>${jackson.version}</version>
            </dependency>

            <dependency>
                <groupId>com.fasterxml.jackson.module</groupId>
                <artifactId>jackson-module-scala_${scala.binary.version}</artifactId>
                <version>${jackson.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
                <version>${httpclient.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>commons-logging</groupId>
                        <artifactId>commons-logging</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpmime</artifactId>
                <version>${httpclient.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpcore</artifactId>
                <version>${httpcore.version}</version>
            </dependency>

            <!--
              compatible with dropwizard 3.1.x, 3.2.x, 4.0.x, 4.1.x, 4.2.x
              see https://github.com/prometheus/client_java/issues/662
              -->
            <dependency>
                <groupId>io.prometheus</groupId>
                <artifactId>simpleclient_dropwizard</artifactId>
                <version>${prometheus.version}</version>
            </dependency>

            <dependency>
                <groupId>io.prometheus</groupId>
                <artifactId>simpleclient_servlet</artifactId>
                <version>${prometheus.version}</version>
            </dependency>

            <dependency>
                <groupId>io.swagger.core.v3</groupId>
                <artifactId>swagger-jaxrs2</artifactId>
                <version>${swagger.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>com.sun.activation</groupId>
                        <artifactId>jakarta.activation</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-all</artifactId>
                <version>${netty.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>io.netty</groupId>
                        <artifactId>netty-codec-haproxy</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>io.netty</groupId>
                        <artifactId>netty-codec-memcache</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>io.netty</groupId>
                        <artifactId>netty-codec-mqtt</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>io.netty</groupId>
                        <artifactId>netty-codec-redis</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>io.netty</groupId>
                        <artifactId>netty-codec-smtp</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>io.netty</groupId>
                        <artifactId>netty-codec-stomp</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>io.netty</groupId>
                        <artifactId>netty-codec-xml</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>io.netty</groupId>
                        <artifactId>netty-handler-ssl-ocsp</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>io.netty</groupId>
                        <artifactId>netty-resolver-dns-classes-macos</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>io.netty</groupId>
                        <artifactId>netty-resolver-dns-native-macos</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>io.netty</groupId>
                        <artifactId>netty-transport-classes-kqueue</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>io.netty</groupId>
                        <artifactId>netty-transport-native-kqueue</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>io.netty</groupId>
                        <artifactId>netty-transport-rxtx</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>io.netty</groupId>
                        <artifactId>netty-transport-sctp</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>io.netty</groupId>
                        <artifactId>netty-transport-udt</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-buffer</artifactId>
                <version>${netty.version}</version>
            </dependency>

            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-codec-dns</artifactId>
                <version>${netty.version}</version>
            </dependency>

            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-codec-http</artifactId>
                <version>${netty.version}</version>
            </dependency>

            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-codec-http2</artifactId>
                <version>${netty.version}</version>
            </dependency>

            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-codec-socks</artifactId>
                <version>${netty.version}</version>
            </dependency>

            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-codec</artifactId>
                <version>${netty.version}</version>
            </dependency>

            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-common</artifactId>
                <version>${netty.version}</version>
            </dependency>

            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-handler-proxy</artifactId>
                <version>${netty.version}</version>
            </dependency>

            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-handler</artifactId>
                <version>${netty.version}</version>
            </dependency>

            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-resolver-dns</artifactId>
                <version>${netty.version}</version>
            </dependency>

            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-resolver</artifactId>
                <version>${netty.version}</version>
            </dependency>

            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-transport</artifactId>
                <version>${netty.version}</version>
            </dependency>

            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-transport-classes-epoll</artifactId>
                <version>${netty.version}</version>
            </dependency>

            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-transport-native-epoll</artifactId>
                <version>${netty.version}</version>
                <classifier>linux-aarch_64</classifier>
            </dependency>

            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-transport-native-epoll</artifactId>
                <version>${netty.version}</version>
                <classifier>linux-x86_64</classifier>
            </dependency>

            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-transport-native-unix-common</artifactId>
                <version>${netty.version}</version>
            </dependency>

            <dependency>
                <groupId>jakarta.servlet</groupId>
                <artifactId>jakarta.servlet-api</artifactId>
                <version>${jakarta.servlet-api.version}</version>
            </dependency>

            <dependency>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-client</artifactId>
                <version>${jetty.version}</version>
            </dependency>

            <dependency>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-server</artifactId>
                <version>${jetty.version}</version>
                <exclusions>
                    <!--
                      Use `jakarta.servlet-api` instead.
                      -->
                    <exclusion>
                        <groupId>javax.servlet</groupId>
                        <artifactId>javax.servlet-api</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-servlet</artifactId>
                <version>${jetty.version}</version>
            </dependency>

            <dependency>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-proxy</artifactId>
                <version>${jetty.version}</version>
            </dependency>

            <dependency>
                <groupId>org.scalatest</groupId>
                <artifactId>scalatest_${scala.binary.version}</artifactId>
                <version>${scalatest.version}</version>
            </dependency>

            <dependency>
                <groupId>org.scalatestplus</groupId>
                <artifactId>scalacheck-1-17_${scala.binary.version}</artifactId>
                <version>${scalatestplus.version}</version>
                <scope>test</scope>
            </dependency>

            <dependency>
                <groupId>org.scalatestplus</groupId>
                <artifactId>mockito-4-11_${scala.binary.version}</artifactId>
                <version>${scalatestplus.version}</version>
            </dependency>

            <dependency>
                <groupId>org.mockito</groupId>
                <artifactId>mockito-core</artifactId>
                <version>${mockito.version}</version>
                <scope>test</scope>
            </dependency>

            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-minikdc</artifactId>
                <version>${hadoop.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>junit</groupId>
                        <artifactId>junit</artifactId>
                    </exclusion>
                    <!-- HADOOP-19024: replace bcprov-jdk15on with bcprov-jdk18on -->
                    <exclusion>
                        <groupId>org.bouncycastle</groupId>
                        <artifactId>bcprov-jdk15on</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>com.unboundid</groupId>
                <artifactId>unboundid-ldapsdk</artifactId>
                <version>${ldapsdk.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-client-minicluster</artifactId>
                <version>${hadoop.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.xerial.snappy</groupId>
                        <artifactId>snappy-java</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>io.etcd</groupId>
                <artifactId>jetcd-core</artifactId>
                <version>${jetcd.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>javax.annotation</groupId>
                        <artifactId>javax.annotation-api</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>io.etcd</groupId>
                <artifactId>jetcd-launcher</artifactId>
                <version>${jetcd.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.testcontainers</groupId>
                        <artifactId>testcontainers</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>io.grpc</groupId>
                <artifactId>grpc-core</artifactId>
                <version>${grpc.version}</version>
            </dependency>

            <dependency>
                <groupId>io.grpc</groupId>
                <artifactId>grpc-grpclb</artifactId>
                <version>${grpc.version}</version>
            </dependency>

            <dependency>
                <groupId>io.grpc</groupId>
                <artifactId>grpc-netty</artifactId>
                <version>${grpc.version}</version>
            </dependency>

            <dependency>
                <groupId>io.grpc</groupId>
                <artifactId>grpc-protobuf</artifactId>
                <version>${grpc.version}</version>
            </dependency>

            <dependency>
                <groupId>io.grpc</groupId>
                <artifactId>grpc-stub</artifactId>
                <version>${grpc.version}</version>
            </dependency>

            <dependency>
                <groupId>io.grpc</groupId>
                <artifactId>grpc-util</artifactId>
                <version>${grpc.version}</version>
            </dependency>

            <dependency>
                <groupId>com.google.protobuf</groupId>
                <artifactId>protobuf-java</artifactId>
                <version>${protobuf.version}</version>
            </dependency>

            <dependency>
                <groupId>com.google.protobuf</groupId>
                <artifactId>protobuf-java-util</artifactId>
                <version>${protobuf.version}</version>
            </dependency>

            <dependency>
                <groupId>dev.failsafe</groupId>
                <artifactId>failsafe</artifactId>
                <version>${failsafe.verion}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.iceberg</groupId>
                <artifactId>iceberg-spark-runtime-${spark.binary.version}_${scala.binary.version}</artifactId>
                <version>${iceberg.version}</version>
            </dependency>

            <dependency>
                <groupId>io.delta</groupId>
                <artifactId>${delta.artifact}_${scala.binary.version}</artifactId>
                <version>${delta.version}</version>
                <exclusions>
                    <!--
                     Apache Spark already has Antlr and Scala dependencies, and a potential compatibility
                     issue of Antlr version on delta 1.0.0: https://github.com/delta-io/delta/pull/676
                     -->
                    <exclusion>
                        <groupId>org.antlr</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.scala-lang</groupId>
                        <artifactId>scala-library</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <!-- Used by Yarn Mini Cluster 3.3 -->
            <dependency>
                <groupId>org.bouncycastle</groupId>
                <artifactId>bcprov-jdk18on</artifactId>
                <version>${bouncycastle.version}</version>
            </dependency>

            <dependency>
                <groupId>org.bouncycastle</groupId>
                <artifactId>bcpkix-jdk18on</artifactId>
                <version>${bouncycastle.version}</version>
            </dependency>

            <!--
              Required by Hadoop on JDK 11 or later. Could be omitted on modules already
              pull Spark dependencies as it is already a transitive dependency of spark-core.
              -->
            <dependency>
                <groupId>jakarta.xml.bind</groupId>
                <artifactId>jakarta.xml.bind-api</artifactId>
                <version>${jakarta.xml-bind.version}</version>
            </dependency>

            <!--
              Required by YARN Mini Cluster on JDK 11 or later. Could be omitted on modules already
              pull Spark dependencies as it is already a transitive dependency of spark-core.
              -->
            <dependency>
                <groupId>jakarta.activation</groupId>
                <artifactId>jakarta.activation-api</artifactId>
                <version>${jakarta.activation.version}</version>
            </dependency>

            <!-- Required by Zookeeper Cli and Beeline -->
            <dependency>
                <groupId>jline</groupId>
                <artifactId>jline</artifactId>
                <version>${jline.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>junit</groupId>
                        <artifactId>junit</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>org.apache.kafka</groupId>
                <artifactId>kafka-clients</artifactId>
                <version>${kafka.version}</version>
                <optional>true</optional>
            </dependency>

            <dependency>
                <groupId>com.github.scopt</groupId>
                <artifactId>scopt_${scala.binary.version}</artifactId>
                <version>${scopt.version}</version>
            </dependency>

            <dependency>
                <groupId>com.jakewharton.fliptables</groupId>
                <artifactId>fliptables</artifactId>
                <version>${fliptables.verion}</version>
            </dependency>

            <dependency>
                <groupId>net.sf.supercsv</groupId>
                <artifactId>super-csv</artifactId>
                <version>${supercsv.version}</version>
            </dependency>

            <!-- RESTful service required -->
            <dependency>
                <groupId>org.glassfish.jersey.core</groupId>
                <artifactId>jersey-common</artifactId>
                <version>${jersey.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>com.sun.activation</groupId>
                        <artifactId>jakarta.activation</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>org.glassfish.jersey.core</groupId>
                <artifactId>jersey-server</artifactId>
                <version>${jersey.version}</version>
            </dependency>

            <dependency>
                <groupId>org.glassfish.jersey.containers</groupId>
                <artifactId>jersey-container-servlet-core</artifactId>
                <version>${jersey.version}</version>
            </dependency>

            <dependency>
                <groupId>org.glassfish.jersey.inject</groupId>
                <artifactId>jersey-hk2</artifactId>
                <version>${jersey.version}</version>
            </dependency>

            <dependency>
                <groupId>org.glassfish.jersey.media</groupId>
                <artifactId>jersey-media-json-jackson</artifactId>
                <version>${jersey.version}</version>
            </dependency>

            <dependency>
                <groupId>org.glassfish.jersey.media</groupId>
                <artifactId>jersey-media-multipart</artifactId>
                <version>${jersey.version}</version>
            </dependency>

            <dependency>
                <groupId>org.glassfish.jersey.test-framework</groupId>
                <artifactId>jersey-test-framework-core</artifactId>
                <version>${jersey.version}</version>
            </dependency>

            <dependency>
                <groupId>org.glassfish.jersey.test-framework.providers</groupId>
                <artifactId>jersey-test-framework-provider-jetty</artifactId>
                <version>${jersey.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.eclipse.jetty</groupId>
                        <artifactId>jetty-util</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.eclipse.jetty</groupId>
                        <artifactId>jetty-continuation</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>com.mysql</groupId>
                <artifactId>mysql-connector-j</artifactId>
                <version>${mysql.jdbc.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.phoenix</groupId>
                <artifactId>phoenix-queryserver-client</artifactId>
                <version>${phoenix.version}</version>
            </dependency>

            <dependency>
                <groupId>org.postgresql</groupId>
                <artifactId>postgresql</artifactId>
                <version>${postgresql.version}</version>
            </dependency>

            <!-- flink -->
            <dependency>
                <groupId>org.apache.flink</groupId>
                <artifactId>flink-core</artifactId>
                <version>${flink.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.flink</groupId>
                <artifactId>flink-runtime</artifactId>
                <version>${flink.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.flink</groupId>
                <artifactId>flink-streaming-java</artifactId>
                <version>${flink.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.flink</groupId>
                <artifactId>flink-clients</artifactId>
                <version>${flink.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.flink</groupId>
                <artifactId>flink-table-common</artifactId>
                <version>${flink.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.flink</groupId>
                <artifactId>flink-table-api-java</artifactId>
                <version>${flink.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.flink</groupId>
                <artifactId>flink-table-api-java-bridge</artifactId>
                <version>${flink.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.flink</groupId>
                <artifactId>flink-table-runtime</artifactId>
                <version>${flink.version}</version>
                <scope>provided</scope>
            </dependency>

            <dependency>
                <groupId>org.apache.flink</groupId>
                <artifactId>flink-table-planner-loader</artifactId>
                <version>${flink.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.flink</groupId>
                <artifactId>flink-sql-client</artifactId>
                <version>${flink.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.flink</groupId>
                <artifactId>flink-sql-gateway</artifactId>
                <version>${flink.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.flink</groupId>
                <artifactId>flink-test-utils</artifactId>
                <version>${flink.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.apache.logging.log4j</groupId>
                        <artifactId>log4j-api</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.logging.log4j</groupId>
                        <artifactId>log4j-core</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.logging.log4j</groupId>
                        <artifactId>log4j-slf4j-impl</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>com.zaxxer</groupId>
                <artifactId>HikariCP</artifactId>
                <version>${hikaricp.version}</version>
            </dependency>

            <dependency>
                <groupId>org.xerial</groupId>
                <artifactId>sqlite-jdbc</artifactId>
                <version>${sqlite.version}</version>
            </dependency>

            <dependency>
                <groupId>net.sf.py4j</groupId>
                <artifactId>py4j</artifactId>
                <version>${py4j.version}</version>
            </dependency>

            <dependency>
                <groupId>com.theokanning.openai-gpt3-java</groupId>
                <artifactId>service</artifactId>
                <version>${openai.java.version}</version>
            </dependency>

            <dependency>
                <groupId>org.threeten</groupId>
                <artifactId>threeten-extra</artifactId>
                <version>${threeten.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.hudi</groupId>
                <artifactId>hudi-spark${hudi.spark.binary.version}-bundle_${scala.binary.version}</artifactId>
                <version>${hudi.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.paimon</groupId>
                <artifactId>paimon-spark-${paimon.spark.binary.version}</artifactId>
                <version>${paimon.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.scalatest</groupId>
            <artifactId>scalatest_${scala.binary.version}</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <repositories>
        <repository>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
            <id>gcs-maven-central-mirror</id>
            <name>GCS Maven Central mirror Asia Pacific</name>
            <url>https://maven-central-asia.storage-download.googleapis.com/maven2/</url>
        </repository>

        <repository>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
            <id>central</id>
            <name>Maven Repository</name>
            <url>https://repo.maven.apache.org/maven2</url>
        </repository>
    </repositories>

    <pluginRepositories>
        <pluginRepository>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
            <id>gcs-maven-central-mirror</id>
            <name>GCS Maven Central mirror Asia Pacific</name>
            <url>https://maven-central-asia.storage-download.googleapis.com/maven2/</url>
        </pluginRepository>

        <pluginRepository>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
            <id>central</id>
            <url>https://repo.maven.apache.org/maven2</url>
        </pluginRepository>
    </pluginRepositories>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>create-tmp-dir</id>
                            <goals>
                                <goal>run</goal>
                            </goals>
                            <phase>generate-test-resources</phase>
                            <configuration>
                                <target>
                                    <mkdir dir="${project.build.directory}/tmp"></mkdir>
                                </target>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>

                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>build-helper-maven-plugin</artifactId>
                    <version>${maven.plugin.build.helper.version}</version>
                    <executions>
                        <execution>
                            <id>module-timestamp-property</id>
                            <goals>
                                <goal>timestamp-property</goal>
                            </goals>
                            <phase>validate</phase>
                            <configuration>
                                <name>module.build.timestamp</name>
                                <pattern>${maven.build.timestamp.format}</pattern>
                                <timeSource>current</timeSource>
                                <timeZone>Asia/Shanghai</timeZone>
                                <locale>en_US</locale>
                            </configuration>
                        </execution>
                        <execution>
                            <id>local-timestamp-property</id>
                            <goals>
                                <goal>timestamp-property</goal>
                            </goals>
                            <phase>validate</phase>
                            <configuration>
                                <name>local.build.timestamp</name>
                                <pattern>${maven.build.timestamp.format}</pattern>
                                <timeSource>build</timeSource>
                                <timeZone>Asia/Shanghai</timeZone>
                                <locale>en_US</locale>
                            </configuration>
                        </execution>
                        <execution>
                            <id>add-scala-sources</id>
                            <goals>
                                <goal>add-source</goal>
                            </goals>
                            <phase>generate-sources</phase>
                            <configuration>
                                <sources>
                                    <source>src/main/scala-${scala.binary.version}</source>
                                </sources>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <maxmem>1024m</maxmem>
                        <fork>true</fork>
                        <compilerArgs>
                            <arg>-Xlint:all,-serial,-path,-processing</arg>
                        </compilerArgs>
                    </configuration>
                </plugin>

                <plugin>
                    <groupId>net.alchim31.maven</groupId>
                    <artifactId>scala-maven-plugin</artifactId>
                    <version>${maven.plugin.scala.version}</version>
                    <configuration>
                        <scalaVersion>${scala.version}</scalaVersion>
                        <recompileMode>incremental</recompileMode>
                        <args>
                            <arg>-unchecked</arg>
                            <arg>-deprecation</arg>
                            <arg>-feature</arg>
                            <arg>-explaintypes</arg>
                            <arg>-Yno-adapted-args</arg>
                            <arg>-P:silencer:globalFilters=.*deprecated.*</arg>
                            <arg>-P:silencer:globalFilters=.*Could not find any member to link for.*</arg>
                            <arg>-P:silencer:globalFilters=.*undefined in comment for class.*</arg>
                            <arg>-Xfatal-warnings</arg>
                            <arg>-Ywarn-unused:imports</arg>
                        </args>
                        <jvmArgs>
                            <jvmArg>-Xms1024m</jvmArg>
                            <jvmArg>-Xmx1024m</jvmArg>
                            <jvmArg>-XX:ReservedCodeCacheSize=512M</jvmArg>
                        </jvmArgs>
                        <javacArgs>
                            <javacArg>-Xlint:all,-serial,-path,-try,-processing</javacArg>
                        </javacArgs>
                        <compilerPlugins>
                            <compilerPlugin>
                                <groupId>com.github.ghik</groupId>
                                <artifactId>silencer-plugin_${scala.version}</artifactId>
                                <version>${maven.plugin.silencer.version}</version>
                            </compilerPlugin>
                        </compilerPlugins>
                        <!-- only skipping `scala:doc-jar` -->
                        <skip>${maven.scaladoc.skip}</skip>
                    </configuration>
                    <executions>
                        <execution>
                            <id>eclipse-add-source</id>
                            <goals>
                                <goal>add-source</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>scala-compile-first</id>
                            <goals>
                                <goal>compile</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>scala-test-compile-first</id>
                            <goals>
                                <goal>testCompile</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>attach-scaladocs</id>
                            <goals>
                                <goal>doc-jar</goal>
                            </goals>
                            <phase>verify</phase>
                        </execution>
                    </executions>
                </plugin>

                <!-- disable surefire globally, only enable it on pure Java modules -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <!-- Note config is repeated in scalatest config -->
                    <configuration>
                        <skipTests>true</skipTests>
                        <failIfNoSpecifiedTests>false</failIfNoSpecifiedTests>
                        <argLine>${maven.plugin.surefire.argLine}</argLine>
                        <environmentVariables>
                            <KYUUBI_WORK_DIR_ROOT>${project.build.directory}/work</KYUUBI_WORK_DIR_ROOT>
                        </environmentVariables>
                        <systemProperties>
                            <log4j.ignoreTCL>true</log4j.ignoreTCL>
                            <log4j.configuration>file:src/test/resources/log4j.properties</log4j.configuration>
                            <log4j2.configurationFile>src/test/resources/log4j2-test.xml</log4j2.configurationFile>
                            <java.io.tmpdir>${project.build.directory}/tmp</java.io.tmpdir>
                            <spark.driver.memory>1g</spark.driver.memory>
                            <kyuubi.metrics.json.location>${project.build.directory}/metrics</kyuubi.metrics.json.location>
                            <kyuubi.frontend.bind.host>localhost</kyuubi.frontend.bind.host>
                            <sun.security.krb5.debug>false</sun.security.krb5.debug>
                            <kyuubi.operation.log.dir.root>${project.build.directory}/server_operation_logs</kyuubi.operation.log.dir.root>
                            <kyuubi.engine.operation.log.dir.root>${project.build.directory}/engine_operation_logs</kyuubi.engine.operation.log.dir.root>
                        </systemProperties>
                    </configuration>
                </plugin>
                <!-- enable scalatest -->
                <plugin>
                    <groupId>org.scalatest</groupId>
                    <artifactId>scalatest-maven-plugin</artifactId>
                    <version>${maven.plugin.scalatest.version}</version>
                    <!-- Note config is repeated in surefire config -->
                    <configuration>
                        <reportsDirectory>${project.build.directory}/surefire-reports</reportsDirectory>
                        <junitxml>.</junitxml>
                        <filereports>TestSuite.txt</filereports>
                        <argLine>${maven.plugin.surefire.argLine}</argLine>
                        <environmentVariables>
                            <KYUUBI_WORK_DIR_ROOT>${project.build.directory}/work</KYUUBI_WORK_DIR_ROOT>
                        </environmentVariables>
                        <systemProperties>
                            <log4j.ignoreTCL>true</log4j.ignoreTCL>
                            <log4j.configuration>file:src/test/resources/log4j.properties</log4j.configuration>
                            <log4j2.configurationFile>src/test/resources/log4j2-test.xml</log4j2.configurationFile>
                            <java.io.tmpdir>${project.build.directory}/tmp</java.io.tmpdir>
                            <spark.driver.memory>1g</spark.driver.memory>
                            <kyuubi.metrics.json.location>${project.build.directory}/metrics</kyuubi.metrics.json.location>
                            <kyuubi.frontend.bind.host>localhost</kyuubi.frontend.bind.host>
                            <sun.security.krb5.debug>false</sun.security.krb5.debug>
                            <kyuubi.operation.log.dir.root>${project.build.directory}/server_operation_logs</kyuubi.operation.log.dir.root>
                            <kyuubi.engine.operation.log.dir.root>${project.build.directory}/engine_operation_logs</kyuubi.engine.operation.log.dir.root>
                        </systemProperties>
                        <tagsToExclude>${maven.plugin.scalatest.exclude.tags}</tagsToExclude>
                        <tagsToInclude>${maven.plugin.scalatest.include.tags}</tagsToInclude>
                        <debugForkedProcess>${maven.plugin.scalatest.debug.enabled}</debugForkedProcess>
                        <debugArgLine>${debugArgLine}</debugArgLine>
                    </configuration>
                    <executions>
                        <execution>
                            <id>test</id>
                            <goals>
                                <goal>test</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>

                <plugin>
                    <groupId>org.jacoco</groupId>
                    <artifactId>jacoco-maven-plugin</artifactId>
                    <version>${maven.plugin.jacoco.version}</version>
                    <executions>
                        <execution>
                            <id>pre-test</id>
                            <goals>
                                <goal>prepare-agent</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>report</id>
                            <goals>
                                <goal>report</goal>
                            </goals>
                            <phase>test</phase>
                            <configuration>
                                <outputDirectory>${project.build.directory}/codecov</outputDirectory>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-source-plugin</artifactId>
                    <version>${maven.plugin.source.version}</version>
                </plugin>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-shade-plugin</artifactId>
                    <version>${maven.plugin.shade.version}</version>
                </plugin>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>default-cli</id>
                            <goals>
                                <goal>build-classpath</goal>
                            </goals>
                            <configuration>
                                <!-- This includes dependencies with 'runtime' and 'compile' scopes;
                                     see the docs for includeScope for more details -->
                                <includeScope>runtime</includeScope>
                            </configuration>
                        </execution>
                        <execution>
                            <id>generate-test-classpath</id>
                            <goals>
                                <goal>build-classpath</goal>
                            </goals>
                            <phase>test-compile</phase>
                            <configuration>
                                <includeScope>test</includeScope>
                                <outputProperty>test_classpath</outputProperty>
                            </configuration>
                        </execution>
                        <execution>
                            <id>copy-module-dependencies</id>
                            <goals>
                                <goal>copy-dependencies</goal>
                            </goals>
                            <phase>package</phase>
                            <configuration>
                                <includeScope>runtime</includeScope>
                                <outputDirectory>${jars.target.dir}</outputDirectory>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-clean-plugin</artifactId>
                    <configuration>
                        <filesets>
                            <fileset>
                                <directory>${project.basedir}</directory>
                                <includes>
                                    <include>**/*.log</include>
                                    <include>**/*.db</include>
                                </includes>
                            </fileset>
                            <fileset>
                                <directory>${project.basedir}/embedded_zookeeper</directory>
                            </fileset>
                            <fileset>
                                <directory>${project.basedir}/metastore_db</directory>
                            </fileset>
                            <fileset>
                                <directory>${project.basedir}/metrics</directory>
                            </fileset>
                            <fileset>
                                <directory>${project.basedir}/spark-warehouse</directory>
                            </fileset>
                            <fileset>
                                <directory>${project.basedir}/web-ui/dist</directory>
                            </fileset>
                        </filesets>
                    </configuration>
                </plugin>

                <plugin>
                    <groupId>org.scalastyle</groupId>
                    <artifactId>scalastyle-maven-plugin</artifactId>
                    <version>${maven.plugin.scalastyle.version}</version>
                    <configuration>
                        <verbose>false</verbose>
                        <failOnViolation>true</failOnViolation>
                        <includeTestSourceDirectory>true</includeTestSourceDirectory>
                        <failOnWarning>false</failOnWarning>
                        <sourceDirectory>${project.basedir}/src/main/scala</sourceDirectory>
                        <testSourceDirectory>${project.basedir}/src/test/scala</testSourceDirectory>
                        <configLocation>scalastyle-config.xml</configLocation>
                        <outputFile>${project.build.directory}/scalastyle-output.xml</outputFile>
                        <outputEncoding>UTF-8</outputEncoding>
                        <skip>${maven.scalastyle.skip}</skip>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>check</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>com.diffplug.spotless</groupId>
                    <artifactId>spotless-maven-plugin</artifactId>
                    <version>${maven.plugin.spotless.version}</version>
                    <configuration>
                        <upToDateChecking>
                            <enabled>true</enabled>
                        </upToDateChecking>
                        <java>
                            <includes>
                                <include>src/main/java/**/*.java</include>
                                <include>src/test/java/**/*.java</include>
                            </includes>
                            <googleJavaFormat>
                                <version>${spotless.java.googlejavaformat.version}</version>
                                <style>GOOGLE</style>
                            </googleJavaFormat>
                            <removeUnusedImports></removeUnusedImports>
                        </java>
                        <scala>
                            <includes>
                                <include>src/main/scala/**/*.scala</include>
                                <include>src/main/scala-*/**/*.scala</include>
                                <include>src/test/scala/**/*.scala</include>
                                <include>src/test/scala-*/**/*.scala</include>
                                <include>src/test/gen/scala/**/*.scala</include>
                            </includes>
                            <scalafmt>
                                <version>${spotless.scala.scalafmt.version}</version>
                                <scalaMajorVersion>${scala.binary.version}</scalaMajorVersion>
                                <file>${maven.multiModuleProjectDirectory}/.scalafmt.conf</file>
                            </scalafmt>
                        </scala>
                        <pom>
                            <includes>
                                <include>pom.xml</include>
                            </includes>
                            <sortPom>
                                <encoding>${project.build.sourceEncoding}</encoding>
                                <expandEmptyElements>true</expandEmptyElements>
                                <indentSchemaLocation>true</indentSchemaLocation>
                                <nrOfIndentSpace>4</nrOfIndentSpace>
                            </sortPom>
                        </pom>
                        <python>
                            <includes>
                                <include>${spotless.python.includes}</include>
                            </includes>
                            <black>
                                <version>${spotless.python.black.version}</version>
                            </black>
                        </python>
                        <markdown>
                            <includes>
                                <include>docs/**/*.md</include>
                                <include>*/README.md</include>
                                <include>docker/playground/README.md</include>
                            </includes>
                            <excludes>
                                <exclude>docs/*/lib/python*/**/*.md</exclude>
                            </excludes>
                            <flexmark>
                                <version>${flexmark.version}</version>
                            </flexmark>
                        </markdown>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>check</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>

                <plugin>
                    <groupId>com.googlecode.maven-download-plugin</groupId>
                    <artifactId>download-maven-plugin</artifactId>
                    <version>${maven.plugin.download.version}</version>
                </plugin>

                <plugin>
                    <groupId>org.apache.rat</groupId>
                    <artifactId>apache-rat-plugin</artifactId>
                    <inherited>true</inherited>
                    <configuration>
                        <excludeSubProjects>false</excludeSubProjects>
                        <numUnapprovedLicenses>0</numUnapprovedLicenses>
                        <licenseFamilies>
                            <licenseFamily implementation="org.apache.rat.license.SimpleLicenseFamily">
                                <familyName>Apache License 2.0</familyName>
                            </licenseFamily>
                        </licenseFamilies>
                        <excludesFile>.rat-excludes</excludesFile>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>check</goal>
                            </goals>
                            <phase>verify</phase>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.antlr</groupId>
                    <artifactId>antlr4-maven-plugin</artifactId>
                    <version>${antlr4.version}</version>
                    <configuration>
                        <treatWarningsAsErrors>true</treatWarningsAsErrors>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>antlr4</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-enforcer-plugin</artifactId>
                    <dependencies>
                        <dependency>
                            <groupId>org.codehaus.mojo</groupId>
                            <artifactId>extra-enforcer-rules</artifactId>
                            <version>${maven.plugin.enforcer.mojo.rules.version}</version>
                        </dependency>
                    </dependencies>
                </plugin>

                <plugin>
                    <groupId>com.github.eirslett</groupId>
                    <artifactId>frontend-maven-plugin</artifactId>
                    <version>${maven.plugin.frontend.version}</version>
                    <configuration>
                        <nodeVersion>${node.version}</nodeVersion>
                        <pnpmVersion>${pnpm.version}</pnpmVersion>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>

        <plugins>
            <!-- dump test classpath into a folder -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>scala-maven-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>org.scalastyle</groupId>
                <artifactId>scalastyle-maven-plugin</artifactId>
            </plugin>

            <!-- disable surefire -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
            </plugin>

            <!-- enable scalatest -->
            <plugin>
                <groupId>org.scalatest</groupId>
                <artifactId>scalatest-maven-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>com.diffplug.spotless</groupId>
                <artifactId>spotless-maven-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>org.apache.rat</groupId>
                <artifactId>apache-rat-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
                <executions>
                    <execution>
                        <id>enforce-bytecode-version</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <enforceBytecodeVersion>
                                    <maxJdkVersion>${java.version}</maxJdkVersion>
                                    <ignoredScopes>test</ignoredScopes>
                                </enforceBytecodeVersion>
                            </rules>
                            <fail>true</fail>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <profile>
            <id>mirror-cdn</id>
            <properties>
                <!-- the apache cdn mirror works only for latest apache releases -->
                <apache.archive.dist>https://dlcdn.apache.org</apache.archive.dist>
                <nodeDownloadRoot>https://npmmirror.com/mirrors/node/</nodeDownloadRoot>
                <pnpmDownloadRoot>https://registry.npmmirror.com/pnpm/-/</pnpmDownloadRoot>
            </properties>
        </profile>

        <profile>
            <id>tpcds</id>
            <modules>
                <module>dev/kyuubi-tpcds</module>
            </modules>
        </profile>

        <profile>
            <id>java-8</id>
            <activation>
                <jdk>1.8</jdk>
            </activation>
            <properties>
                <java.version>1.8</java.version>
            </properties>
        </profile>

        <profile>
            <id>java-11</id>
            <activation>
                <jdk>11</jdk>
            </activation>
            <properties>
                <java.version>11</java.version>
                <maven.compiler.source></maven.compiler.source>
                <maven.compiler.target></maven.compiler.target>
                <maven.compiler.release>${java.version}</maven.compiler.release>
                <minimalJavaBuildVersion>${java.version}</minimalJavaBuildVersion>
            </properties>
        </profile>

        <profile>
            <id>java-17</id>
            <activation>
                <jdk>17</jdk>
            </activation>
            <properties>
                <java.version>17</java.version>
                <maven.compiler.source></maven.compiler.source>
                <maven.compiler.target></maven.compiler.target>
                <maven.compiler.release>${java.version}</maven.compiler.release>
                <maven.plugin.surefire.argLine>-XX:+IgnoreUnrecognizedVMOptions
                    --add-opens=java.base/java.lang=ALL-UNNAMED
                    --add-opens=java.base/java.lang.invoke=ALL-UNNAMED
                    --add-opens=java.base/java.lang.reflect=ALL-UNNAMED
                    --add-opens=java.base/java.io=ALL-UNNAMED
                    --add-opens=java.base/java.net=ALL-UNNAMED
                    --add-opens=java.base/java.nio=ALL-UNNAMED
                    --add-opens=java.base/java.util=ALL-UNNAMED
                    --add-opens=java.base/java.util.concurrent=ALL-UNNAMED
                    --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED
                    --add-opens=java.base/sun.nio.ch=ALL-UNNAMED
                    --add-opens=java.base/sun.nio.cs=ALL-UNNAMED
                    --add-opens=java.base/sun.security.action=ALL-UNNAMED
                    --add-opens=java.base/sun.security.tools.keytool=ALL-UNNAMED
                    --add-opens=java.base/sun.security.x509=ALL-UNNAMED
                    --add-opens=java.base/sun.util.calendar=ALL-UNNAMED
                    -Djdk.reflect.useDirectMethodHandle=false
                    -Dio.netty.tryReflectionSetAccessible=true</maven.plugin.surefire.argLine>
            </properties>
        </profile>

        <!-- For development only, not generally applicable for all modules -->
        <profile>
            <id>scala-2.13</id>
            <properties>
                <scala.binary.version>2.13</scala.binary.version>
                <scala.version>2.13.8</scala.version>
                <spark.archive.scala.suffix>-scala${scala.binary.version}</spark.archive.scala.suffix>
            </properties>
            <build>
                <pluginManagement>
                    <plugins>
                        <plugin>
                            <groupId>net.alchim31.maven</groupId>
                            <artifactId>scala-maven-plugin</artifactId>
                            <configuration>
                                <scalaVersion>${scala.version}</scalaVersion>
                                <recompileMode>incremental</recompileMode>
                                <args>
                                    <arg>-unchecked</arg>
                                    <arg>-deprecation</arg>
                                    <arg>-feature</arg>
                                    <arg>-explaintypes</arg>
                                    <arg>-P:silencer:globalFilters=.*deprecated.*</arg>
                                    <arg>-P:silencer:globalFilters=.*Could not find any member to link for.*</arg>
                                    <arg>-P:silencer:globalFilters=.*undefined in comment for class.*</arg>
                                    <arg>-Xfatal-warnings</arg>
                                    <arg>-Ywarn-unused:imports</arg>
                                </args>
                                <jvmArgs>
                                    <jvmArg>-Xms1024m</jvmArg>
                                    <jvmArg>-Xmx1024m</jvmArg>
                                    <jvmArg>-XX:ReservedCodeCacheSize=512M</jvmArg>
                                </jvmArgs>
                                <javacArgs>
                                    <javacArg>-Xlint:all,-serial,-path,-try,-processing</javacArg>
                                </javacArgs>
                                <compilerPlugins>
                                    <compilerPlugin>
                                        <groupId>com.github.ghik</groupId>
                                        <artifactId>silencer-plugin_${scala.version}</artifactId>
                                        <version>${maven.plugin.silencer.version}</version>
                                    </compilerPlugin>
                                </compilerPlugins>
                                <!-- only skipping `scala:doc-jar` -->
                                <skip>${maven.scaladoc.skip}</skip>
                            </configuration>
                        </plugin>
                    </plugins>
                </pluginManagement>
            </build>
        </profile>

        <profile>
            <id>spark-3.2</id>
            <modules>
                <module>extensions/spark/kyuubi-extension-spark-common</module>
                <module>extensions/spark/kyuubi-extension-spark-3-2</module>
            </modules>
            <properties>
                <spark.version>3.2.4</spark.version>
                <spark.binary.version>3.2</spark.binary.version>
                <delta.artifact>delta-core</delta.artifact>
                <delta.version>2.0.2</delta.version>
                <spark.archive.name>spark-${spark.version}-bin-hadoop3.2${spark.archive.scala.suffix}.tgz</spark.archive.name>
                <maven.plugin.scalatest.exclude.tags>org.scalatest.tags.Slow</maven.plugin.scalatest.exclude.tags>
            </properties>
        </profile>

        <profile>
            <id>spark-3.3</id>
            <modules>
                <module>extensions/spark/kyuubi-extension-spark-common</module>
                <module>extensions/spark/kyuubi-extension-spark-3-3</module>
                <module>extensions/spark/kyuubi-spark-connector-hive</module>
            </modules>
            <properties>
                <delta.version>2.3.0</delta.version>
                <delta.artifact>delta-core</delta.artifact>
                <spark.version>3.3.4</spark.version>
                <spark.binary.version>3.3</spark.binary.version>
                <maven.plugin.scalatest.exclude.tags>org.scalatest.tags.Slow</maven.plugin.scalatest.exclude.tags>
            </properties>
        </profile>

        <profile>
            <id>spark-3.4</id>
            <modules>
                <module>extensions/spark/kyuubi-extension-spark-3-4</module>
                <module>extensions/spark/kyuubi-spark-connector-hive</module>
            </modules>
            <properties>
                <delta.artifact>delta-core</delta.artifact>
                <delta.version>2.4.0</delta.version>
                <spark.version>3.4.2</spark.version>
                <spark.binary.version>3.4</spark.binary.version>
                <maven.plugin.scalatest.exclude.tags>org.scalatest.tags.Slow</maven.plugin.scalatest.exclude.tags>
            </properties>
        </profile>

        <profile>
            <id>spark-3.5</id>
            <modules>
                <module>extensions/spark/kyuubi-extension-spark-3-5</module>
                <module>extensions/spark/kyuubi-spark-connector-hive</module>
            </modules>
            <properties>
                <delta.artifact>delta-spark</delta.artifact>
                <delta.version>3.1.0</delta.version>
                <!-- Remove this when Hudi supports Spark 3.5 -->
                <hudi.spark.binary.version>3.4</hudi.spark.binary.version>
                <spark.version>3.5.1</spark.version>
                <spark.binary.version>3.5</spark.binary.version>
                <maven.plugin.scalatest.exclude.tags>org.scalatest.tags.Slow</maven.plugin.scalatest.exclude.tags>
            </properties>
        </profile>

        <profile>
            <id>spark-master</id>
            <properties>
                <spark.version>4.0.0-SNAPSHOT</spark.version>
                <maven.plugin.scalatest.exclude.tags>org.scalatest.tags.Slow,org.apache.kyuubi.tags.DeltaTest,org.apache.kyuubi.tags.IcebergTest,org.apache.kyuubi.tags.DeltaTest,org.apache.kyuubi.tags.HudiTest,org.apache.kyuubi.tags.PySparkTest</maven.plugin.scalatest.exclude.tags>
            </properties>
            <repositories>
                <repository>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                    <id>Apache Snapshots Repository</id>
                    <url>https://repository.apache.org/snapshots/</url>
                </repository>
            </repositories>
        </profile>

        <profile>
            <id>flink-1.16</id>
            <properties>
                <flink.version>1.16.3</flink.version>
            </properties>
        </profile>

        <profile>
            <id>flink-1.17</id>
            <properties>
                <flink.version>1.17.2</flink.version>
            </properties>
        </profile>

        <profile>
            <id>flink-1.18</id>
            <properties>
                <flink.version>1.18.1</flink.version>
            </properties>
        </profile>

        <profile>
            <id>zookeeper-3.6</id>
            <properties>
                <kyuubi-relocated-zookeeper.artifacts>kyuubi-relocated-zookeeper-36</kyuubi-relocated-zookeeper.artifacts>
            </properties>
        </profile>

        <profile>
            <id>spark-provided</id>
            <properties>
                <spark.archive.download.skip>true</spark.archive.download.skip>
            </properties>
        </profile>

        <profile>
            <id>flink-provided</id>
            <properties>
                <flink.archive.download.skip>true</flink.archive.download.skip>
            </properties>
        </profile>

        <profile>
            <id>hive-provided</id>
            <properties>
                <hive.archive.download.skip>true</hive.archive.download.skip>
            </properties>
        </profile>

        <profile>
            <id>spotless-python</id>
            <properties>
                <spotless.python.includes>src/**/*.py</spotless.python.includes>
            </properties>
        </profile>

        <profile>
            <id>jdbc-shaded</id>
            <properties>
                <hive.jdbc.artifact>kyuubi-hive-jdbc-shaded</hive.jdbc.artifact>
            </properties>
        </profile>

        <profile>
            <id>fast</id>
            <properties>
                <enforcer.skip>true</enforcer.skip>
                <maven.javadoc.skip>true</maven.javadoc.skip>
                <maven.scaladoc.skip>true</maven.scaladoc.skip>
                <maven.scalastyle.skip>true</maven.scalastyle.skip>
                <rat.skip>true</rat.skip>
                <skipTests>true</skipTests>
                <spotless.check.skip>true</spotless.check.skip>
                <flink.archive.download.skip>true</flink.archive.download.skip>
                <hive.archive.download.skip>true</hive.archive.download.skip>
                <spark.archive.download.skip>true</spark.archive.download.skip>
            </properties>
        </profile>

        <profile>
            <id>remote-debug</id>
            <properties>
                <maven.surefire.debug>${debugArgLine}</maven.surefire.debug>
                <maven.plugin.scalatest.debug.enabled>true</maven.plugin.scalatest.debug.enabled>
            </properties>
        </profile>

        <profile>
            <id>web-ui</id>
            <properties>
                <webui.skip>false</webui.skip>
            </properties>
        </profile>

        <profile>
            <id>codecov</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.jacoco</groupId>
                        <artifactId>jacoco-maven-plugin</artifactId>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>apache-release</id>
            <build>
                <plugins>
                    <!-- Prevent the source-release-assembly execution defined in the Apache parent POM
                         from running so we can control it ourselves -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-assembly-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>source-release-assembly</id>
                                <phase>none</phase>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>net.nicoulaj.maven.plugins</groupId>
                        <artifactId>checksum-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>source-release-checksum</id>
                                <phase>none</phase>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-deploy-plugin</artifactId>
                        <inherited>true</inherited>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-source-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>attach-sources</id>
                                <goals>
                                    <goal>jar-no-fork</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <configuration>
                            <quiet>true</quiet>
                            <doclint>none</doclint>
                        </configuration>
                        <executions>
                            <execution>
                                <id>attach-javadocs</id>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-gpg-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>sign-release-artifacts</id>
                                <goals>
                                    <goal>sign</goal>
                                </goals>
                                <phase>verify</phase>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>
