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

    <groupId>org.apache.kyuubi</groupId>
    <artifactId>kyuubi-parent</artifactId>
    <version>1.7.1</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-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-download</module>
        <module>externals/kyuubi-flink-sql-engine</module>
        <module>externals/kyuubi-jdbc-engine</module>
        <module>externals/kyuubi-hive-sql-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-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.7</maven.version>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>
        <scala.version>2.12.17</scala.version>
        <scala.binary.version>2.12</scala.binary.version>
        <scala-collection-compat.version>2.8.1</scala-collection-compat.version>

        <arrow.version>11.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>
        <bouncycastle.version>1.67</bouncycastle.version>
        <codahale.metrics.version>4.2.8</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.12.0</commons-lang3.version>
        <curator.version>2.12.0</curator.version>
        <etcd.version>0.7.3</etcd.version>
        <delta.version>2.2.0</delta.version>
        <failsafe.verion>2.4.4</failsafe.verion>
        <fb303.version>0.9.3</fb303.version>
        <flexmark.version>0.62.2</flexmark.version>
        <flink.version>1.16.1</flink.version>
        <flink.module.scala.suffix></flink.module.scala.suffix>
        <flink.archive.name>flink-${flink.version}-bin-scala_${scala.binary.version}.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.48.0</grpc.version>
        <guava.version>31.1-jre</guava.version>
        <guava.failureaccess.version>1.0.1</guava.failureaccess.version>
        <hadoop.version>3.3.5</hadoop.version>
        <hikaricp.version>4.0.3</hikaricp.version>
        <derby.version>10.14.2.0</derby.version>
        <fliptables.verion>1.0.2</fliptables.verion>
        <hive.engine.hive.version>3.1.3</hive.engine.hive.version>
        <hive.version>3.1.3</hive.version>
        <hive.service.rpc.version>3.1.3</hive.service.rpc.version>
        <hive.storage-api.version>2.7.0</hive.storage-api.version>
        <hive.archive.name>apache-hive-${hive.engine.hive.version}-bin.tar.gz</hive.archive.name>
        <hive.archive.mirror>${apache.archive.dist}/hive/hive-${hive.engine.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.12.0</hudi.version>
        <iceberg.version>1.1.0</iceberg.version>
        <jackson.version>2.14.2</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>
        <jetty.version>9.4.50.v20221201</jetty.version>
        <jline.version>0.9.94</jline.version>
        <junit.version>4.13.1</junit.version>
        <kubernetes-client.version>5.12.1</kubernetes-client.version>
        <kudu.version>1.15.0</kudu.version>
        <ldapsdk.version>6.0.5</ldapsdk.version>
        <log4j.version>2.19.0</log4j.version>
        <mysql.jdbc.version>8.0.31</mysql.jdbc.version>
        <mockito.version>4.6.1</mockito.version>
        <netty.version>4.1.87.Final</netty.version>
        <parquet.version>1.10.1</parquet.version>
        <phoenix.version>6.0.0</phoenix.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.3.0</ranger.version>
        <scalatest.version>3.2.15</scalatest.version>
        <scalatestplus.version>3.2.15.0</scalatestplus.version>
        <scopt.version>4.1.0</scopt.version>
        <slf4j.version>1.7.36</slf4j.version>
        <snakeyaml.version>1.33</snakeyaml.version>
        <!--
          DO NOT forget to change the following properties when change the minor version of Spark:
          `delta.version`, `maven.plugin.scalatest.exclude.tags`
          -->
        <spark.version>3.3.2</spark.version>
        <spark.binary.version>3.3</spark.binary.version>
        <spark.archive.name>spark-${spark.version}-bin-hadoop3.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>
        <swagger.version>2.2.1</swagger.version>
        <swagger-ui.version>4.9.1</swagger-ui.version>
        <testcontainers-scala.version>0.40.12</testcontainers-scala.version>
        <thrift.version>0.9.3</thrift.version>
        <trino.client.version>363</trino.client.version>
        <trino.tpcds.version>1.4</trino.tpcds.version>
        <trino.tpch.version>1.1</trino.tpch.version>
        <zookeeper.version>3.4.14</zookeeper.version>

        <!-- apply to kyuubi-hive-jdbc/kyuubi-hive-beeline module -->
        <hive.client.jline.version>2.12</hive.client.jline.version>
        <hive.client.supercsv.version>2.2.0</hive.client.supercsv.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.6.6</maven.plugin.download.version>
        <maven.plugin.enforcer.mojo.rules.version>1.6.1</maven.plugin.enforcer.mojo.rules.version>
        <maven.plugin.scala.version>4.8.0</maven.plugin.scala.version>
        <maven.plugin.surefire.version>3.0.0-M8</maven.plugin.surefire.version>
        <maven.plugin.scalatest.version>2.2.0</maven.plugin.scalatest.version>
        <maven.plugin.scalatest.exclude.tags>org.scalatest.tags.Slow,org.apache.kyuubi.tags.HudiTest</maven.plugin.scalatest.exclude.tags>
        <maven.plugin.scalatest.include.tags></maven.plugin.scalatest.include.tags>
        <maven.plugin.spotless.version>2.30.0</maven.plugin.spotless.version>
        <maven.plugin.jacoco.version>0.8.7</maven.plugin.jacoco.version>
        <maven.plugin.scalastyle.version>1.0.0</maven.plugin.scalastyle.version>
        <maven.plugin.shade.version>3.4.1</maven.plugin.shade.version>
        <maven.plugin.silencer.version>1.7.10</maven.plugin.silencer.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>
        <spotless.scala.scalafmt.version>3.7.1</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>
    </properties>

    <dependencyManagement>
        <dependencies>
            <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-repl_${scala.binary.version}</artifactId>
                <version>${spark.version}</version>
                <exclusions>
                    <!--
                      Use Hadoop Shaded Client to gain more clean transitive dependencies
                     -->
                    <exclusion>
                        <groupId>org.apache.hadoop</groupId>
                        <artifactId>hadoop-client</artifactId>
                    </exclusion>
                    <!--
                      Use log4j2
                     -->
                    <exclusion>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-log4j12</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>org.apache.spark</groupId>
                <artifactId>spark-sql_${scala.binary.version}</artifactId>
                <version>${spark.version}</version>
                <exclusions>
                    <!--
                      Use Hadoop Shaded Client to gain more clean transitive dependencies
                     -->
                    <exclusion>
                        <groupId>org.apache.hadoop</groupId>
                        <artifactId>hadoop-client</artifactId>
                    </exclusion>
                    <!--
                      Use log4j2
                     -->
                    <exclusion>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-log4j12</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>org.apache.spark</groupId>
                <artifactId>spark-hive_${scala.binary.version}</artifactId>
                <version>${spark.version}</version>
                <exclusions>
                    <!--
                      Use Hadoop Shaded Client to gain more clean transitive dependencies
                     -->
                    <exclusion>
                        <groupId>org.apache.hadoop</groupId>
                        <artifactId>hadoop-client</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.hadoop</groupId>
                        <artifactId>hadoop-common</artifactId>
                    </exclusion>
                    <!--
                      Use log4j2
                     -->
                    <exclusion>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-log4j12</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>org.apache.spark</groupId>
                <artifactId>spark-core_${scala.binary.version}</artifactId>
                <version>${spark.version}</version>
                <type>test-jar</type>
                <exclusions>
                    <!--
                      Use Hadoop Shaded Client to gain more clean transitive dependencies
                     -->
                    <exclusion>
                        <groupId>org.apache.hadoop</groupId>
                        <artifactId>hadoop-client</artifactId>
                    </exclusion>
                    <!--
                      The module is only used in Kyuubi Spark Extensions, we should respect
                      the Spark bundled log4j.
                     -->
                </exclusions>
            </dependency>

            <dependency>
                <groupId>org.apache.spark</groupId>
                <artifactId>spark-catalyst_${scala.binary.version}</artifactId>
                <version>${spark.version}</version>
                <type>test-jar</type>
                <exclusions>
                    <!--
                      Use Hadoop Shaded Client to gain more clean transitive dependencies
                     -->
                    <exclusion>
                        <groupId>org.apache.hadoop</groupId>
                        <artifactId>hadoop-client</artifactId>
                    </exclusion>
                    <!--
                      The module is only used in Kyuubi Spark Extensions, so we don't care about which
                      version of Log4j it depends on.
                     -->
                </exclusions>
            </dependency>

            <dependency>
                <groupId>org.apache.spark</groupId>
                <artifactId>spark-sql_${scala.binary.version}</artifactId>
                <version>${spark.version}</version>
                <type>test-jar</type>
                <exclusions>
                    <!--
                      Use Hadoop Shaded Client to gain more clean transitive dependencies
                     -->
                    <exclusion>
                        <groupId>org.apache.hadoop</groupId>
                        <artifactId>hadoop-client</artifactId>
                    </exclusion>
                    <!--
                      The module is only used in Kyuubi Spark Extensions and Engine Spark SQL, so we
                      don't care about which version of Log4j it depends on.
                     -->
                </exclusions>
            </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-trino_${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>

            <!--
              because of THRIFT-4805, we don't upgrade to libthrift:0.12.0,
              because of THRIFT-5274, we don't upgrade to libthrift:0.13.0,
              so just keep libthrift:0.9.3
            -->
            <dependency>
                <groupId>org.apache.thrift</groupId>
                <artifactId>libfb303</artifactId>
                <version>${fb303.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.apache.thrift</groupId>
                        <artifactId>libthrift</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>org.apache.thrift</groupId>
                <artifactId>libthrift</artifactId>
                <version>${thrift.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>*</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>org.apache.hive</groupId>
                <artifactId>hive-service-rpc</artifactId>
                <version>${hive.service.rpc.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>*</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <!--
             Do not add hive dependencies here if they are dependencies of
             org.apache.spark:spark-hive_${scala.binary.version}.
             We should leave these dependencies' versions as they are defined in
             spark-parent_${scala.binary.version}-${spark.version}.pom.
             Otherwise, kyuubi-spark-sql-engine tests may encounter hive version compatibility issue.
            -->

            <dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-framework</artifactId>
                <version>${curator.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.apache.zookeeper</groupId>
                        <artifactId>zookeeper</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-recipes</artifactId>
                <version>${curator.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.apache.zookeeper</groupId>
                        <artifactId>zookeeper</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-client</artifactId>
                <version>${curator.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>com.google.guava</groupId>
                        <artifactId>guava</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.zookeeper</groupId>
                        <artifactId>zookeeper</artifactId>
                    </exclusion>
                </exclusions>
            </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>

            <!--
              1. This library only contains swagger-ui static resource (.html/.css/.js/.png), for more detail, see
                 https://github.com/swagger-api/swagger-ui/blob/master/dist/
              2. Note that when trying to upgrade swagger-ui, we should also update the version in the file(
                 kyuubi-server/src/main/scala/org/apache/kyuubi/server/KyuubiRestFrontendService.scala).
            -->
            <dependency>
                <groupId>org.webjars</groupId>
                <artifactId>swagger-ui</artifactId>
                <version>${swagger-ui.version}</version>
            </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.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-6_${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>
                </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>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <version>${zookeeper.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>*</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>io.etcd</groupId>
                <artifactId>jetcd-core</artifactId>
                <version>${etcd.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>${etcd.version}</version>
            </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>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>net.jodah</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>

            <!-- Hudi dependency  -->
            <dependency>
                <groupId>org.apache.parquet</groupId>
                <artifactId>parquet-avro</artifactId>
                <version>${parquet.version}</version>
            </dependency>

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

            <dependency>
                <groupId>org.apache.hudi</groupId>
                <artifactId>hudi-common</artifactId>
                <version>${hudi.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>com.fasterxml.jackson.core</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.hbase</groupId>
                        <artifactId>hbase-server</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.hbase</groupId>
                        <artifactId>hbase-client</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>org.apache.hudi</groupId>
                <artifactId>hudi-spark-common_${scala.binary.version}</artifactId>
                <version>${hudi.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.scala-lang</groupId>
                        <artifactId>scala-library</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.hudi</groupId>
                        <artifactId>hudi-timeline-service</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>io.dropwizard.metrics</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>io.prometheus</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.logging.log4j</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.curator</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.hadoop</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.hbase</groupId>
                        <artifactId>hbase-server</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.hbase</groupId>
                        <artifactId>hbase-client</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.orc</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.hudi</groupId>
                        <artifactId>hudi-aws</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>commons-logging</groupId>
                        <artifactId>commons-logging</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>com.fasterxml.jackson.core</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>org.apache.hudi</groupId>
                <artifactId>hudi-spark_${scala.binary.version}</artifactId>
                <version>${hudi.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.scala-lang</groupId>
                        <artifactId>scala-library</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.hudi</groupId>
                        <artifactId>hudi-spark-common_2.11</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.hudi</groupId>
                        <artifactId>hudi-spark2_2.11</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.hudi</groupId>
                        <artifactId>hudi-spark2-common</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.curator</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>com.fasterxml.jackson.core</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>com.fasterxml.jackson.module</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.logging.log4j</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>org.apache.hudi</groupId>
                <artifactId>hudi-spark3.1.x_${scala.binary.version}</artifactId>
                <version>${hudi.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.apache.hudi</groupId>
                        <artifactId>hudi-spark-common_2.11</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.scala-lang</groupId>
                        <artifactId>scala-library</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>com.fasterxml.jackson.core</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>io.delta</groupId>
                <artifactId>delta-core_${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-jdk15on</artifactId>
                <version>${bouncycastle.version}</version>
            </dependency>

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

            <!--
              Required for JDK 11. Previous as a transitive dependency of hadoop-client,
              since SPARK-33212(will be included in Apache Spark 3.2), Apache Spark moved
              to Hadoop Shaded Client, and Kyuubi always uses Hadoop Shaded Client, thus
              we need explicitly add this dependency.
              -->
            <dependency>
                <groupId>jakarta.xml.bind</groupId>
                <artifactId>jakarta.xml.bind-api</artifactId>
                <version>${jakarta.xml-bind.version}</version>
            </dependency>

            <!--
              Required for Yarn Mini Cluster on JDK 11, it is already a transitive dependency
              of spark-core, thus only should explicitly add on Kyuubi Server Main test scope.
              -->
            <dependency>
                <groupId>jakarta.activation</groupId>
                <artifactId>jakarta.activation-api</artifactId>
                <version>${jakarta.activation.version}</version>
            </dependency>

            <!-- Zookeeper Cli required -->
            <dependency>
                <groupId>jline</groupId>
                <artifactId>jline</artifactId>
                <version>${jline.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>junit</groupId>
                        <artifactId>junit</artifactId>
                    </exclusion>
                </exclusions>
            </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>

            <!-- 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>
                <exclusions>
                    <exclusion>
                        <groupId>jakarta.xml.bind</groupId>
                        <artifactId>jakarta.xml.bind-api</artifactId>
                    </exclusion>
                </exclusions>
            </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>

            <!-- 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${flink.module.scala.suffix}</artifactId>
                <version>${flink.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.flink</groupId>
                <artifactId>flink-clients${flink.module.scala.suffix}</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${flink.module.scala.suffix}</artifactId>
                <version>${flink.version}</version>
            </dependency>

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

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

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

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

            <dependency>
                <groupId>org.apache.flink</groupId>
                <artifactId>flink-test-utils${flink.module.scala.suffix}</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.apache.derby</groupId>
                <artifactId>derby</artifactId>
                <version>${derby.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.kudu</groupId>
                <artifactId>kudu-client</artifactId>
                <version>${kudu.version}</version>
            </dependency>
            <dependency>
                <groupId>net.sf.py4j</groupId>
                <artifactId>py4j</artifactId>
                <version>${py4j.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 -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>${maven.plugin.surefire.version}</version>
                    <configuration>
                        <skipTests>true</skipTests>
                        <failIfNoSpecifiedTests>false</failIfNoSpecifiedTests>
                    </configuration>
                </plugin>
                <!-- enable scalatest -->
                <plugin>
                    <groupId>org.scalatest</groupId>
                    <artifactId>scalatest-maven-plugin</artifactId>
                    <version>${maven.plugin.scalatest.version}</version>
                    <configuration>
                        <reportsDirectory>${project.build.directory}/surefire-reports</reportsDirectory>
                        <junitxml>.</junitxml>
                        <filereports>TestSuite.txt</filereports>
                        <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>target/server_operation_logs</kyuubi.operation.log.dir.root>
                            <kyuubi.engine.operation.log.dir.root>target/engine_operation_logs</kyuubi.engine.operation.log.dir.root>
                        </systemProperties>
                        <tagsToExclude>${maven.plugin.scalatest.exclude.tags}</tagsToExclude>
                        <tagsToInclude>${maven.plugin.scalatest.include.tags}</tagsToInclude>
                    </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-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>
                                </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>
                        </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/test/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>
                            </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>
            </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.jacoco</groupId>
                <artifactId>jacoco-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>
            <!-- this profile works only for latest apache releases -->
            <properties>
                <apache.archive.dist>https://dlcdn.apache.org</apache.archive.dist>
            </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>spark-3.1</id>
            <modules>
                <module>extensions/spark/kyuubi-extension-spark-common</module>
                <module>extensions/spark/kyuubi-extension-spark-3-1</module>
            </modules>
            <properties>
                <spark.version>3.1.3</spark.version>
                <spark.binary.version>3.1</spark.binary.version>
                <delta.version>1.0.1</delta.version>
                <spark.archive.name>spark-${spark.version}-bin-hadoop3.2.tgz</spark.archive.name>
                <maven.plugin.scalatest.exclude.tags>org.scalatest.tags.Slow</maven.plugin.scalatest.exclude.tags>
            </properties>
        </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.3</spark.version>
                <spark.binary.version>3.2</spark.binary.version>
                <delta.version>2.0.2</delta.version>
                <spark.archive.name>spark-${spark.version}-bin-hadoop3.2.tgz</spark.archive.name>
                <maven.plugin.scalatest.exclude.tags>org.scalatest.tags.Slow,org.apache.kyuubi.tags.HudiTest</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>
                <maven.plugin.scalatest.exclude.tags>org.scalatest.tags.Slow,org.apache.kyuubi.tags.HudiTest</maven.plugin.scalatest.exclude.tags>
            </properties>
        </profile>

        <profile>
            <id>spark-master</id>
            <properties>
                <spark.version>3.5.0-SNAPSHOT</spark.version>
                <!-- https://github.com/ThreeTen/threeten-extra/issues/226 -->
                <threeten.version>1.7.0</threeten.version>
                <maven.plugin.scalatest.exclude.tags>org.scalatest.tags.Slow,org.apache.kyuubi.tags.DeltaTest,org.apache.kyuubi.tags.IcebergTest,org.apache.kyuubi.tags.HudiTest,org.apache.kyuubi.tags.PySparkTest</maven.plugin.scalatest.exclude.tags>
            </properties>
            <dependencyManagement>
                <dependencies>
                    <dependency>
                        <groupId>org.threeten</groupId>
                        <artifactId>threeten-extra</artifactId>
                        <version>${threeten.version}</version>
                    </dependency>
                </dependencies>
            </dependencyManagement>
            <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.14</id>
            <properties>
                <flink.version>1.14.6</flink.version>
                <flink.module.scala.suffix>_${scala.binary.version}</flink.module.scala.suffix>
            </properties>
        </profile>

        <profile>
            <id>flink-1.15</id>
            <properties>
                <flink.version>1.15.4</flink.version>
                <flink.module.scala.suffix></flink.module.scala.suffix>
            </properties>
        </profile>

        <profile>
            <id>flink-1.16</id>
            <properties>
                <flink.version>1.16.1</flink.version>
                <flink.module.scala.suffix></flink.module.scala.suffix>
            </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>spark-block-cleaner</id>
            <modules>
                <module>tools/spark-block-cleaner</module>
            </modules>
        </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>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>
