<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

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

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->
<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>
  <groupId>org.apache.ozone</groupId>
  <artifactId>ozone-main</artifactId>
  <version>2.1.0</version>
  <packaging>pom</packaging>
  <name>Apache Ozone Main</name>
  <description>Apache Ozone Main</description>

  <modules>
    <module>dev-support</module>
    <module>hadoop-hdds</module>
    <module>hadoop-ozone</module>
  </modules>

  <properties>
    <activation-api.version>1.2.2</activation-api.version>
    <annotation-api.version>1.3.2</annotation-api.version>
    <aopalliance.version>1.0</aopalliance.version>
    <apache-rat-plugin.version>0.16.1</apache-rat-plugin.version>
    <aspectj-plugin.version>1.14.1</aspectj-plugin.version>
    <aspectj.java11.version>1.9.20</aspectj.java11.version>
    <aspectj.java21.version>1.9.24</aspectj.java21.version>
    <!-- Default aspectj version for java8 -->
    <aspectj.version>1.9.7</aspectj.version>
    <assertj.version>3.27.6</assertj.version>
    <aws-java-sdk.version>1.12.788</aws-java-sdk.version>
    <aws-java-sdk2.version>2.35.5</aws-java-sdk2.version>
    <bonecp.version>0.8.0.RELEASE</bonecp.version>
    <bouncycastle.version>1.81</bouncycastle.version>
    <build-helper-maven-plugin.version>3.6.1</build-helper-maven-plugin.version>
    <cdi-api.version>2.0</cdi-api.version>
    <checkstyle.version>9.3</checkstyle.version>
    <classpath.skip>true</classpath.skip>
    <codahale-metrics.version>3.0.2</codahale-metrics.version>
    <com.nimbusds.nimbus-jose-jwt.version>10.4</com.nimbusds.nimbus-jose-jwt.version>
    <common-pool2.version>2.12.1</common-pool2.version>
    <commons-beanutils.version>1.11.0</commons-beanutils.version>
    <commons-cli.version>1.8.0</commons-cli.version>
    <commons-codec.version>1.18.0</commons-codec.version>
    <commons-collections.version>4.4</commons-collections.version>
    <commons-compress.version>1.27.1</commons-compress.version>
    <commons-configuration2.version>2.12.0</commons-configuration2.version>
    <commons-daemon.version>1.4.0</commons-daemon.version>
    <commons-fileupload.version>1.6.0</commons-fileupload.version>
    <commons-io.version>2.18.0</commons-io.version>
    <commons-lang3.version>3.18.0</commons-lang3.version>
    <commons-math3.version>3.6.1</commons-math3.version>
    <commons-net.version>3.11.1</commons-net.version>
    <commons-text.version>1.13.1</commons-text.version>
    <commons-validator.version>1.10.0</commons-validator.version>
    <compile-testing.version>0.23.0</compile-testing.version>
    <copy-rename-maven-plugin.version>1.0.1</copy-rename-maven-plugin.version>
    <curator.version>4.2.0</curator.version>
    <cyclonedx.version>2.9.1</cyclonedx.version>
    <!-- the version of Hadoop declared in the version resources; can be overridden
    so that Hadoop 3.x can declare itself a 2.x artifact. -->
    <declared.hadoop.version>${hadoop.version}</declared.hadoop.version>
    <declared.hdds.version>${hdds.version}</declared.hdds.version>
    <declared.ozone.version>${ozone.version}</declared.ozone.version>
    <derby.version>10.14.2.0</derby.version>
    <disruptor.version>3.4.4</disruptor.version>
    <distMgmtSnapshotsId>apache.snapshots.https</distMgmtSnapshotsId>
    <distMgmtSnapshotsName>Apache Development Snapshot Repository</distMgmtSnapshotsName>
    <distMgmtSnapshotsUrl>https://repository.apache.org/content/repositories/snapshots</distMgmtSnapshotsUrl>
    <distMgmtStagingId>apache.staging.https</distMgmtStagingId>
    <distMgmtStagingName>Apache Release Distribution Repository</distMgmtStagingName>
    <distMgmtStagingUrl>https://repository.apache.org/service/local/staging/deploy/maven2</distMgmtStagingUrl>
    <dnsjava.version>3.6.1</dnsjava.version>
    <docker-maven-plugin.version>0.45.1</docker-maven-plugin.version>
    <download-maven-plugin.version>1.9.0</download-maven-plugin.version>
    <dropwizard-metrics.version>3.2.6</dropwizard-metrics.version>
    <enforced.java.version>[${javac.version},)</enforced.java.version>
    <enforced.maven.version>[3.6.3,)</enforced.maven.version>
    <errorprone-annotations.version>2.29.2</errorprone-annotations.version>
    <!-- test groups excluded by default (without any manual profile activation) -->
    <excluded-test-groups>unhealthy</excluded-test-groups>
    <exec-maven-plugin.version>3.6.1</exec-maven-plugin.version>
    <failIfNoTests>false</failIfNoTests>
    <frontend-maven-plugin.version>1.15.4</frontend-maven-plugin.version>
    <gson.version>2.13.1</gson.version>
    <guava.version>33.5.0-jre</guava.version>
    <guice.version>6.0.0</guice.version>
    <!-- versions included in hadoop-thirdparty, update in sync (+ jar-report and LICENSE) -->
    <hadoop-thirdparty.protobuf.artifact>hadoop-shaded-protobuf_3_25</hadoop-thirdparty.protobuf.artifact>
    <hadoop-thirdparty.protobuf.version>3.25.5</hadoop-thirdparty.protobuf.version>
    <hadoop-thirdparty.version>1.4.0</hadoop-thirdparty.version>
    <hadoop.version>3.4.2</hadoop.version>
    <hadoop2.version>2.10.2</hadoop2.version>
    <hamcrest.version>2.2</hamcrest.version>
    <hdds.rocks.native.version>${hdds.version}</hdds.rocks.native.version>
    <hdds.version>${ozone.version}</hdds.version>
    <hk2.version>2.6.1</hk2.version>
    <httpclient.version>4.5.14</httpclient.version>
    <httpcore.version>4.4.16</httpcore.version>
    <io.grpc.version>1.71.0</io.grpc.version>
    <jackson2-bom.version>2.16.2</jackson2-bom.version>
    <jacoco.version>0.8.13</jacoco.version>
    <jakarta.annotation.version>2.1.1</jakarta.annotation.version>
    <jakarta.inject.version>2.6.1</jakarta.inject.version>
    <jakarta.validation.version>2.0.2</jakarta.validation.version>
    <jakarta.ws.rs-api.version>2.1.6</jakarta.ws.rs-api.version>
    <java.dev.jna.version>5.2.0</java.dev.jna.version>
    <java.security.egd>file:///dev/urandom</java.security.egd>
    <javac.version>8</javac.version>
    <javassist.version>3.30.2-GA</javassist.version>
    <javax.inject.version>1</javax.inject.version>
    <jaxb-api.version>2.3.3</jaxb-api.version>
    <jaxb-runtime.version>2.3.9</jaxb-runtime.version>
    <jcip-annotations.version>1.0-1</jcip-annotations.version>
    <jdeb.version>1.14</jdeb.version>
    <jersey.version>1.19.4</jersey.version>
    <jersey2.version>2.47</jersey2.version>
    <jetty.version>9.4.58.v20250814</jetty.version>
    <jgrapht.version>1.4.0</jgrapht.version>
    <jgraphx.version>3.9.12</jgraphx.version>
    <jline.version>3.30.6</jline.version>
    <jnr-constants.version>0.10.4</jnr-constants.version>
    <jnr-posix.version>3.1.20</jnr-posix.version>
    <joda.time.version>2.12.7</joda.time.version>
    <jooq.version>3.11.10</jooq.version>
    <jsch.version>0.1.55</jsch.version>
    <json-simple.version>1.1.1</json-simple.version>
    <jsp-api.version>2.1</jsp-api.version>
    <jsr311-api.version>1.1.1</jsr311-api.version>
    <junit5.version>5.14.0</junit5.version>
    <kerby.version>1.0.1</kerby.version>
    <kotlin.version>1.9.25</kotlin.version>
    <license-maven-plugin.version>2.7.0</license-maven-plugin.version>
    <log4j2.version>2.25.0</log4j2.version>
    <make-maven-plugin.version>1.0-beta-1</make-maven-plugin.version>
    <maven-antrun-plugin.version>3.1.0</maven-antrun-plugin.version>
    <maven-assembly-plugin.version>3.7.1</maven-assembly-plugin.version>
    <maven-checkstyle-plugin.version>3.6.0</maven-checkstyle-plugin.version>
    <maven-clean-plugin.version>3.4.0</maven-clean-plugin.version>
    <maven-compiler-plugin.version>3.14.0</maven-compiler-plugin.version>
    <maven-dependency-plugin.version>3.8.1</maven-dependency-plugin.version>
    <maven-deploy-plugin.version>3.1.4</maven-deploy-plugin.version>
    <maven-enforcer-plugin.version>3.5.0</maven-enforcer-plugin.version>
    <maven-gpg-plugin.version>3.2.7</maven-gpg-plugin.version>
    <maven-install-plugin.version>3.1.3</maven-install-plugin.version>
    <maven-jar-plugin.version>3.4.2</maven-jar-plugin.version>
    <maven-javadoc-plugin.version>3.11.2</maven-javadoc-plugin.version>
    <maven-patch-plugin.version>1.3</maven-patch-plugin.version>
    <maven-remote-resources-plugin.version>3.3.0</maven-remote-resources-plugin.version>
    <maven-resources-plugin.version>3.3.0</maven-resources-plugin.version>
    <maven-shade-plugin.version>3.6.0</maven-shade-plugin.version>
    <maven-site-plugin.version>3.21.0</maven-site-plugin.version>
    <maven-source-plugin.version>3.3.1</maven-source-plugin.version>
    <maven-surefire-plugin.argLine>-Xmx8192m -XX:+HeapDumpOnOutOfMemoryError</maven-surefire-plugin.argLine>
    <maven-surefire-plugin.argLineAccessArgs />
    <maven-surefire-plugin.version>3.5.2</maven-surefire-plugin.version>
    <maven-surefire-report-plugin.version>${maven-surefire-plugin.version}</maven-surefire-report-plugin.version>
    <maven-war-plugin.version>3.4.0</maven-war-plugin.version>
    <maven.compiler.createMissingPackageInfoClass>false</maven.compiler.createMissingPackageInfoClass>
    <maven.compiler.release>${javac.version}</maven.compiler.release>
    <maven.core.version>3.9.10</maven.core.version>
    <maven.test.redirectTestOutputToFile>true</maven.test.redirectTestOutputToFile>
    <metainf-services.version>1.11</metainf-services.version>
    <mockito.version>4.11.0</mockito.version>
    <native.lib.tmp.dir />
    <!-- Use netty version known to work with grpc-netty. See table: -->
    <!-- https://github.com/grpc/grpc-java/blob/master/SECURITY.md#netty -->
    <netty.version>4.1.119.Final</netty.version>
    <!-- Node.js version number (without the v prefix required by frontend-maven-plugin) -->
    <nodejs.version>16.14.2</nodejs.version>
    <okhttp3.version>4.12.0</okhttp3.version>
    <opentelemetry.version>1.54.1</opentelemetry.version>
    <os-maven-plugin.version>1.7.1</os-maven-plugin.version>
    <ozone.release>Joshua Tree</ozone.release>
    <ozone.version>2.1.0</ozone.version>
    <picocli.version>4.7.7</picocli.version>
    <plexus-archiver.version>4.2.2</plexus-archiver.version>
    <pmd.version>3.26.0</pmd.version>
    <!-- Enable Reproducible Builds mode -->
    <project.build.outputTimestamp>2025-03-12T22:12:52Z</project.build.outputTimestamp>
    <!-- platform encoding override -->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <prometheus.version>0.16.0</prometheus.version>
    <properties.maven.plugin.version>1.2.1</properties.maven.plugin.version>
    <proto-backwards-compatibility.version>1.0.7</proto-backwards-compatibility.version>
    <protobuf-maven-plugin.version>0.6.1</protobuf-maven-plugin.version>
    <protobuf2.version>2.5.0</protobuf2.version>
    <protobuf3.version>3.25.8</protobuf3.version>
    <ranger.version>2.6.0</ranger.version>
    <!-- versions included in ratis-thirdparty, update in sync -->
    <ratis-thirdparty.grpc.version>1.71.0</ratis-thirdparty.grpc.version>
    <ratis-thirdparty.netty.version>4.1.119.Final</ratis-thirdparty.netty.version>
    <ratis-thirdparty.protobuf.version>3.25.5</ratis-thirdparty.protobuf.version>
    <ratis.thirdparty.version>1.0.9</ratis.thirdparty.version>
    <ratis.version>3.2.0</ratis.version>
    <re2j.version>1.7</re2j.version>
    <reflections.version>0.10.2</reflections.version>
    <reload4j.version>1.2.26</reload4j.version>
    <restrict-imports.enforcer.version>2.6.1</restrict-imports.enforcer.version>
    <rocksdb.version>7.7.3</rocksdb.version>
    <servlet-api.version>3.1.0</servlet-api.version>
    <shell-executable>bash</shell-executable>
    <slf4j.version>2.0.17</slf4j.version>
    <snakeyaml.version>2.5</snakeyaml.version>
    <snappy-java.version>1.1.10.8</snappy-java.version>
    <sonar.host.url>https://sonarcloud.io</sonar.host.url>
    <sonar.java.binaries>${basedir}/target/classes</sonar.java.binaries>
    <sonar.organization>apache</sonar.organization>
    <sonar.projectKey>hadoop-ozone</sonar.projectKey>
    <sortpom-maven-plugin.version>3.0.1</sortpom-maven-plugin.version>
    <spotbugs.version>3.1.12.2</spotbugs.version>
    <spring.version>5.3.39</spring.version>
    <sqlite.version>3.50.3.0</sqlite.version>
    <stax2.version>4.2.2</stax2.version>
    <surefire.failIfNoSpecifiedTests>false</surefire.failIfNoSpecifiedTests>
    <surefire.fork.timeout>1200</surefire.fork.timeout>
    <swagger-annotations-version>1.5.4</swagger-annotations-version>
    <test.build.data>${test.build.dir}</test.build.data>
    <test.build.dir>${project.build.directory}/test-dir</test.build.dir>
    <!-- number of threads/forks to use when running tests in parallel, see parallel-tests profile -->
    <testsThreadCount>4</testsThreadCount>
    <!-- test groups excluded in CI (except in dedicated profiles for flaky) -->
    <unstable-test-groups>flaky | slow | unhealthy</unstable-test-groups>
    <vault.driver.version>5.1.0</vault.driver.version>
    <weld-servlet.version>3.1.9.Final</weld-servlet.version>
    <woodstox.version>5.4.0</woodstox.version>
    <zookeeper.version>3.8.4</zookeeper.version>
    <zstd-jni.version>1.5.7-5</zstd-jni.version>
  </properties>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>com.fasterxml.jackson</groupId>
        <artifactId>jackson-bom</artifactId>
        <version>${jackson2-bom.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-bom</artifactId>
        <version>${io.grpc.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-bom</artifactId>
        <version>${netty.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>org.jetbrains.kotlin</groupId>
        <artifactId>kotlin-bom</artifactId>
        <version>${kotlin.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>org.junit</groupId>
        <artifactId>junit-bom</artifactId>
        <version>${junit5.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>bom</artifactId>
        <version>${aws-java-sdk2.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <dependency>
        <groupId>aopalliance</groupId>
        <artifactId>aopalliance</artifactId>
        <version>${aopalliance.version}</version>
      </dependency>
      <dependency>
        <groupId>ch.qos.reload4j</groupId>
        <artifactId>reload4j</artifactId>
        <version>${reload4j.version}</version>
        <exclusions>
          <exclusion>
            <groupId>com.sun.jdmk</groupId>
            <artifactId>jmxtools</artifactId>
          </exclusion>
          <exclusion>
            <groupId>com.sun.jmx</groupId>
            <artifactId>jmxri</artifactId>
          </exclusion>
          <exclusion>
            <groupId>javax.jms</groupId>
            <artifactId>jms</artifactId>
          </exclusion>
          <exclusion>
            <groupId>javax.jms</groupId>
            <artifactId>jmx</artifactId>
          </exclusion>
          <exclusion>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-core</artifactId>
        <version>${aws-java-sdk.version}</version>
        <exclusions>
          <exclusion>
            <!-- depend on jcl-over-slf4j instead -->
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-s3</artifactId>
        <version>${aws-java-sdk.version}</version>
      </dependency>
      <dependency>
        <groupId>com.bettercloud</groupId>
        <artifactId>vault-java-driver</artifactId>
        <version>${vault.driver.version}</version>
      </dependency>
      <dependency>
        <groupId>com.codahale.metrics</groupId>
        <artifactId>metrics-core</artifactId>
        <version>${codahale-metrics.version}</version>
      </dependency>
      <dependency>
        <groupId>com.fasterxml.woodstox</groupId>
        <artifactId>woodstox-core</artifactId>
        <version>${woodstox.version}</version>
      </dependency>
      <dependency>
        <groupId>com.github.jnr</groupId>
        <artifactId>jnr-constants</artifactId>
        <version>${jnr-constants.version}</version>
      </dependency>
      <dependency>
        <groupId>com.github.jnr</groupId>
        <artifactId>jnr-posix</artifactId>
        <version>${jnr-posix.version}</version>
      </dependency>
      <dependency>
        <groupId>com.github.luben</groupId>
        <artifactId>zstd-jni</artifactId>
        <version>${zstd-jni.version}</version>
      </dependency>
      <dependency>
        <groupId>com.github.stephenc.jcip</groupId>
        <artifactId>jcip-annotations</artifactId>
        <version>${jcip-annotations.version}</version>
      </dependency>
      <dependency>
        <groupId>com.github.vlsi.mxgraph</groupId>
        <artifactId>jgraphx</artifactId>
        <version>${jgraphx.version}</version>
      </dependency>
      <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>${gson.version}</version>
      </dependency>
      <dependency>
        <groupId>com.google.errorprone</groupId>
        <artifactId>error_prone_annotations</artifactId>
        <version>${errorprone-annotations.version}</version>
        <optional>true</optional>
      </dependency>
      <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>${guava.version}</version>
        <exclusions>
          <exclusion>
            <groupId>com.google.code.findbugs</groupId>
            <artifactId>jsr305</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>com.google.inject</groupId>
        <artifactId>guice</artifactId>
        <version>${guice.version}</version>
      </dependency>
      <dependency>
        <groupId>com.google.inject.extensions</groupId>
        <artifactId>guice-assistedinject</artifactId>
        <version>${guice.version}</version>
      </dependency>
      <dependency>
        <groupId>com.google.inject.extensions</groupId>
        <artifactId>guice-servlet</artifactId>
        <version>${guice.version}</version>
      </dependency>
      <dependency>
        <groupId>com.google.protobuf</groupId>
        <artifactId>protobuf-java</artifactId>
        <version>${protobuf2.version}</version>
      </dependency>
      <dependency>
        <groupId>com.google.re2j</groupId>
        <artifactId>re2j</artifactId>
        <version>${re2j.version}</version>
      </dependency>
      <dependency>
        <groupId>com.google.testing.compile</groupId>
        <artifactId>compile-testing</artifactId>
        <version>${compile-testing.version}</version>
      </dependency>
      <dependency>
        <groupId>com.googlecode.json-simple</groupId>
        <artifactId>json-simple</artifactId>
        <version>${json-simple.version}</version>
      </dependency>
      <dependency>
        <groupId>com.jcraft</groupId>
        <artifactId>jsch</artifactId>
        <version>${jsch.version}</version>
      </dependency>
      <dependency>
        <groupId>com.jolbox</groupId>
        <artifactId>bonecp</artifactId>
        <version>${bonecp.version}</version>
      </dependency>
      <dependency>
        <groupId>com.lmax</groupId>
        <artifactId>disruptor</artifactId>
        <version>${disruptor.version}</version>
      </dependency>
      <dependency>
        <groupId>com.nimbusds</groupId>
        <artifactId>nimbus-jose-jwt</artifactId>
        <version>${com.nimbusds.nimbus-jose-jwt.version}</version>
      </dependency>
      <dependency>
        <groupId>com.squareup.okhttp3</groupId>
        <artifactId>okhttp</artifactId>
        <version>${okhttp3.version}</version>
      </dependency>
      <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-client</artifactId>
        <version>${jersey.version}</version>
      </dependency>
      <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-core</artifactId>
        <version>${jersey.version}</version>
      </dependency>
      <dependency>
        <groupId>commons-beanutils</groupId>
        <artifactId>commons-beanutils</artifactId>
        <version>${commons-beanutils.version}</version>
        <exclusions>
          <exclusion>
            <!-- depend on jcl-over-slf4j instead -->
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
        </exclusions>
      </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-daemon</groupId>
        <artifactId>commons-daemon</artifactId>
        <version>${commons-daemon.version}</version>
      </dependency>
      <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>${commons-fileupload.version}</version>
      </dependency>
      <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>${commons-io.version}</version>
      </dependency>
      <dependency>
        <groupId>commons-net</groupId>
        <artifactId>commons-net</artifactId>
        <version>${commons-net.version}</version>
      </dependency>
      <dependency>
        <groupId>commons-validator</groupId>
        <artifactId>commons-validator</artifactId>
        <version>${commons-validator.version}</version>
        <exclusions>
          <exclusion>
            <!-- depend on jcl-over-slf4j instead -->
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>dnsjava</groupId>
        <artifactId>dnsjava</artifactId>
        <version>${dnsjava.version}</version>
      </dependency>
      <dependency>
        <groupId>info.picocli</groupId>
        <artifactId>picocli</artifactId>
        <version>${picocli.version}</version>
      </dependency>
      <dependency>
        <groupId>info.picocli</groupId>
        <artifactId>picocli-shell-jline3</artifactId>
        <version>${picocli.version}</version>
      </dependency>
      <dependency>
        <groupId>io.dropwizard.metrics</groupId>
        <artifactId>metrics-core</artifactId>
        <version>${dropwizard-metrics.version}</version>
      </dependency>
      <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-api</artifactId>
        <version>${opentelemetry.version}</version>
      </dependency>
      <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-context</artifactId>
        <version>${opentelemetry.version}</version>
      </dependency>
      <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-exporter-otlp</artifactId>
        <version>${opentelemetry.version}</version>
      </dependency>
      <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-sdk</artifactId>
        <version>${opentelemetry.version}</version>
      </dependency>
      <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-sdk-common</artifactId>
        <version>${opentelemetry.version}</version>
      </dependency>
      <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-sdk-trace</artifactId>
        <version>${opentelemetry.version}</version>
      </dependency>
      <dependency>
        <groupId>io.prometheus</groupId>
        <artifactId>simpleclient</artifactId>
        <version>${prometheus.version}</version>
        <exclusions>
          <exclusion>
            <groupId>io.prometheus</groupId>
            <artifactId>simpleclient_tracer_common</artifactId>
          </exclusion>
          <exclusion>
            <groupId>io.prometheus</groupId>
            <artifactId>simpleclient_tracer_otel</artifactId>
          </exclusion>
          <exclusion>
            <groupId>io.prometheus</groupId>
            <artifactId>simpleclient_tracer_otel_agent</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>io.prometheus</groupId>
        <artifactId>simpleclient_common</artifactId>
        <version>${prometheus.version}</version>
      </dependency>
      <dependency>
        <groupId>io.prometheus</groupId>
        <artifactId>simpleclient_dropwizard</artifactId>
        <version>${prometheus.version}</version>
      </dependency>
      <dependency>
        <groupId>jakarta.activation</groupId>
        <artifactId>jakarta.activation-api</artifactId>
        <version>${activation-api.version}</version>
      </dependency>
      <dependency>
        <groupId>jakarta.annotation</groupId>
        <artifactId>jakarta.annotation-api</artifactId>
        <version>${jakarta.annotation.version}</version>
      </dependency>
      <dependency>
        <groupId>jakarta.validation</groupId>
        <artifactId>jakarta.validation-api</artifactId>
        <version>${jakarta.validation.version}</version>
      </dependency>
      <dependency>
        <groupId>jakarta.ws.rs</groupId>
        <artifactId>jakarta.ws.rs-api</artifactId>
        <version>${jakarta.ws.rs-api.version}</version>
      </dependency>
      <dependency>
        <groupId>jakarta.xml.bind</groupId>
        <artifactId>jakarta.xml.bind-api</artifactId>
        <version>${jaxb-api.version}</version>
      </dependency>
      <dependency>
        <groupId>javax.annotation</groupId>
        <artifactId>javax.annotation-api</artifactId>
        <version>${annotation-api.version}</version>
      </dependency>
      <dependency>
        <groupId>javax.enterprise</groupId>
        <artifactId>cdi-api</artifactId>
        <version>${cdi-api.version}</version>
      </dependency>
      <dependency>
        <groupId>javax.inject</groupId>
        <artifactId>javax.inject</artifactId>
        <version>${javax.inject.version}</version>
      </dependency>
      <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>${servlet-api.version}</version>
      </dependency>
      <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>${jsp-api.version}</version>
      </dependency>
      <dependency>
        <groupId>javax.ws.rs</groupId>
        <artifactId>jsr311-api</artifactId>
        <version>${jsr311-api.version}</version>
      </dependency>
      <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
        <version>${joda.time.version}</version>
      </dependency>
      <dependency>
        <groupId>log4j</groupId>
        <artifactId>apache-log4j-extras</artifactId>
        <version>1.2.17</version>
        <exclusions>
          <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>net.java.dev.jna</groupId>
        <artifactId>jna</artifactId>
        <version>${java.dev.jna.version}</version>
      </dependency>
      <dependency>
        <groupId>net.java.dev.jna</groupId>
        <artifactId>jna-platform</artifactId>
        <version>${java.dev.jna.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-collections4</artifactId>
        <version>${commons-collections.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-compress</artifactId>
        <version>${commons-compress.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-configuration2</artifactId>
        <version>${commons-configuration2.version}</version>
        <exclusions>
          <exclusion>
            <!-- depend on jcl-over-slf4j instead -->
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>${commons-lang3.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-math3</artifactId>
        <version>${commons-math3.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-pool2</artifactId>
        <version>${common-pool2.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-text</artifactId>
        <version>${commons-text.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-client</artifactId>
        <version>${curator.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-framework</artifactId>
        <version>${curator.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.derby</groupId>
        <artifactId>derby</artifactId>
        <version>${derby.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-annotations</artifactId>
        <version>${hadoop.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-assemblies</artifactId>
        <version>${hadoop.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-auth</artifactId>
        <version>${hadoop.version}</version>
        <exclusions>
          <exclusion>
            <groupId>ch.qos.reload4j</groupId>
            <artifactId>reload4j</artifactId>
          </exclusion>
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
          <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.apache.curator</groupId>
            <artifactId>*</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.apache.kerby</groupId>
            <artifactId>kerb-simplekdc</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>*</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-auth</artifactId>
        <version>${hadoop.version}</version>
        <type>test-jar</type>
      </dependency>
      <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-client</artifactId>
        <version>${hadoop.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-cloud-storage</artifactId>
        <version>${hadoop.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-common</artifactId>
        <version>${hadoop.version}</version>
        <exclusions>
          <exclusion>
            <groupId>ch.qos.reload4j</groupId>
            <artifactId>reload4j</artifactId>
          </exclusion>
          <exclusion>
            <groupId>com.github.pjfanning</groupId>
            <artifactId>jersey-json</artifactId>
          </exclusion>
          <exclusion>
            <groupId>com.google.code.findbugs</groupId>
            <artifactId>jsr305</artifactId>
          </exclusion>
          <exclusion>
            <groupId>com.nimbusds</groupId>
            <artifactId>nimbus-jose-jwt</artifactId>
          </exclusion>
          <exclusion>
            <groupId>com.sun.jersey</groupId>
            <artifactId>*</artifactId>
          </exclusion>
          <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.apache.avro</groupId>
            <artifactId>avro</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-math3</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.apache.curator</groupId>
            <artifactId>*</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.apache.kerby</groupId>
            <artifactId>kerb-simplekdc</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>*</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.xerial.snappy</groupId>
            <artifactId>snappy-java</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-common</artifactId>
        <version>${hadoop.version}</version>
        <type>test-jar</type>
        <exclusions>
          <exclusion>
            <!-- depend on jcl-over-slf4j instead -->
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-distcp</artifactId>
        <version>${hadoop.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-distcp</artifactId>
        <version>${hadoop.version}</version>
        <type>test-jar</type>
      </dependency>
      <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-hdfs</artifactId>
        <version>${hadoop.version}</version>
        <exclusions>
          <exclusion>
            <groupId>ch.qos.reload4j</groupId>
            <artifactId>reload4j</artifactId>
          </exclusion>
          <exclusion>
            <groupId>com.sun.jersey</groupId>
            <artifactId>*</artifactId>
          </exclusion>
          <exclusion>
            <groupId>io.netty</groupId>
            <artifactId>*</artifactId>
          </exclusion>
          <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.fusesource.leveldbjni</groupId>
            <artifactId>leveldbjni-all</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>*</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-hdfs</artifactId>
        <version>${hadoop.version}</version>
        <type>test-jar</type>
      </dependency>
      <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-hdfs-client</artifactId>
        <version>${hadoop.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-kms</artifactId>
        <version>${hadoop.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-kms</artifactId>
        <version>${hadoop.version}</version>
        <type>test-jar</type>
      </dependency>
      <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-mapreduce-client-core</artifactId>
        <version>${hadoop.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-mapreduce-client-jobclient</artifactId>
        <version>${hadoop.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-minikdc</artifactId>
        <version>${hadoop.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-sls</artifactId>
        <version>${hadoop.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hadoop.thirdparty</groupId>
        <artifactId>${hadoop-thirdparty.protobuf.artifact}</artifactId>
        <version>${hadoop-thirdparty.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>${httpclient.version}</version>
        <exclusions>
          <exclusion>
            <!-- depend on jcl-over-slf4j instead -->
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpcore</artifactId>
        <version>${httpcore.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpcore-nio</artifactId>
        <version>${httpcore.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.kerby</groupId>
        <artifactId>kerb-core</artifactId>
        <version>${kerby.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.kerby</groupId>
        <artifactId>kerb-util</artifactId>
        <version>${kerby.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.kerby</groupId>
        <artifactId>kerby-util</artifactId>
        <version>${kerby.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>${log4j2.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>${log4j2.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>hdds-annotation-processing</artifactId>
        <version>${hdds.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>hdds-client</artifactId>
        <version>${hdds.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>hdds-client</artifactId>
        <version>${hdds.version}</version>
        <type>test-jar</type>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>hdds-common</artifactId>
        <version>${hdds.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>hdds-common</artifactId>
        <version>${hdds.version}</version>
        <type>test-jar</type>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>hdds-config</artifactId>
        <version>${hdds.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>hdds-container-service</artifactId>
        <version>${hdds.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>hdds-container-service</artifactId>
        <version>${hdds.version}</version>
        <type>test-jar</type>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>hdds-docs</artifactId>
        <version>${hdds.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>hdds-erasurecode</artifactId>
        <version>${hdds.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>hdds-hadoop-dependency-client</artifactId>
        <version>${hdds.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>hdds-interface-admin</artifactId>
        <version>${hdds.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>hdds-interface-client</artifactId>
        <version>${hdds.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>hdds-interface-server</artifactId>
        <version>${hdds.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>hdds-managed-rocksdb</artifactId>
        <version>${hdds.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>hdds-rocks-native</artifactId>
        <version>${hdds.rocks.native.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>hdds-rocks-native</artifactId>
        <version>${hdds.rocks.native.version}</version>
        <type>test-jar</type>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>hdds-server-framework</artifactId>
        <version>${hdds.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>hdds-server-framework</artifactId>
        <version>${hdds.version}</version>
        <type>test-jar</type>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>hdds-server-scm</artifactId>
        <version>${hdds.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>hdds-server-scm</artifactId>
        <version>${hdds.version}</version>
        <type>test-jar</type>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>hdds-test-utils</artifactId>
        <version>${hdds.version}</version>
        <type>test-jar</type>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>ozone-cli-admin</artifactId>
        <version>${ozone.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>ozone-cli-shell</artifactId>
        <version>${ozone.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>ozone-client</artifactId>
        <version>${ozone.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>ozone-common</artifactId>
        <version>${ozone.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>ozone-common</artifactId>
        <version>${ozone.version}</version>
        <type>test-jar</type>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>ozone-csi</artifactId>
        <version>${ozone.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>ozone-datanode</artifactId>
        <version>${ozone.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>ozone-filesystem</artifactId>
        <version>${ozone.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>ozone-filesystem-common</artifactId>
        <version>${ozone.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>ozone-filesystem-hadoop2</artifactId>
        <version>${ozone.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>ozone-filesystem-hadoop3</artifactId>
        <version>${ozone.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>ozone-filesystem-hadoop3-client</artifactId>
        <version>${ozone.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>ozone-filesystem-shaded</artifactId>
        <version>${ozone.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>ozone-freon</artifactId>
        <version>${ozone.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>ozone-httpfsgateway</artifactId>
        <version>${ozone.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>ozone-insight</artifactId>
        <version>${ozone.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>ozone-integration-test</artifactId>
        <version>${ozone.version}</version>
        <type>test-jar</type>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>ozone-interface-client</artifactId>
        <version>${ozone.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>ozone-interface-storage</artifactId>
        <version>${ozone.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>ozone-manager</artifactId>
        <version>${ozone.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>ozone-manager</artifactId>
        <version>${ozone.version}</version>
        <type>test-jar</type>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>ozone-mini-cluster</artifactId>
        <version>${ozone.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>ozone-multitenancy-ranger</artifactId>
        <version>${ozone.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>ozone-recon</artifactId>
        <version>${ozone.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>ozone-reconcodegen</artifactId>
        <version>${ozone.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>ozone-s3-secret-store</artifactId>
        <version>${hdds.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>ozone-s3gateway</artifactId>
        <version>${ozone.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>ozone-tools</artifactId>
        <version>${ozone.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ozone</groupId>
        <artifactId>rocksdb-checkpoint-differ</artifactId>
        <version>${hdds.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ranger</groupId>
        <artifactId>ranger-intg</artifactId>
        <version>${ranger.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ranger</groupId>
        <artifactId>ranger-plugins-common</artifactId>
        <version>${ranger.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ratis</groupId>
        <artifactId>ratis-client</artifactId>
        <version>${ratis.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ratis</groupId>
        <artifactId>ratis-common</artifactId>
        <version>${ratis.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ratis</groupId>
        <artifactId>ratis-grpc</artifactId>
        <version>${ratis.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ratis</groupId>
        <artifactId>ratis-metrics-api</artifactId>
        <version>${ratis.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ratis</groupId>
        <artifactId>ratis-metrics-dropwizard3</artifactId>
        <version>${ratis.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ratis</groupId>
        <artifactId>ratis-netty</artifactId>
        <version>${ratis.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ratis</groupId>
        <artifactId>ratis-proto</artifactId>
        <version>${ratis.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ratis</groupId>
        <artifactId>ratis-proto-shaded</artifactId>
        <version>${ratis.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ratis</groupId>
        <artifactId>ratis-server</artifactId>
        <version>${ratis.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ratis</groupId>
        <artifactId>ratis-server</artifactId>
        <version>${ratis.version}</version>
        <type>test-jar</type>
      </dependency>
      <dependency>
        <groupId>org.apache.ratis</groupId>
        <artifactId>ratis-server-api</artifactId>
        <version>${ratis.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ratis</groupId>
        <artifactId>ratis-shell</artifactId>
        <version>${ratis.version}</version>
        <exclusions>
          <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>*</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.apache.ratis</groupId>
        <artifactId>ratis-thirdparty-misc</artifactId>
        <version>${ratis.thirdparty.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.ratis</groupId>
        <artifactId>ratis-tools</artifactId>
        <version>${ratis.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
        <version>${zookeeper.version}</version>
        <exclusions>
          <exclusion>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
          </exclusion>
          <exclusion>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>${aspectj.version}</version>
      </dependency>
      <dependency>
        <groupId>org.assertj</groupId>
        <artifactId>assertj-core</artifactId>
        <version>${assertj.version}</version>
      </dependency>
      <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcpkix-jdk18on</artifactId>
        <version>${bouncycastle.version}</version>
      </dependency>
      <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcprov-jdk18on</artifactId>
        <version>${bouncycastle.version}</version>
      </dependency>
      <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcutil-jdk18on</artifactId>
        <version>${bouncycastle.version}</version>
      </dependency>
      <dependency>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>properties-maven-plugin</artifactId>
        <version>${properties.maven.plugin.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-http</artifactId>
        <version>${jetty.version}</version>
      </dependency>
      <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-io</artifactId>
        <version>${jetty.version}</version>
      </dependency>
      <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-proxy</artifactId>
        <version>${jetty.version}</version>
      </dependency>
      <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-server</artifactId>
        <version>${jetty.version}</version>
        <exclusions>
          <exclusion>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>javax.servlet-api</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-servlet</artifactId>
        <version>${jetty.version}</version>
      </dependency>
      <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-util</artifactId>
        <version>${jetty.version}</version>
      </dependency>
      <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-util-ajax</artifactId>
        <version>${jetty.version}</version>
      </dependency>
      <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-webapp</artifactId>
        <version>${jetty.version}</version>
      </dependency>
      <dependency>
        <groupId>org.glassfish.hk2</groupId>
        <artifactId>guice-bridge</artifactId>
        <version>${hk2.version}</version>
      </dependency>
      <dependency>
        <groupId>org.glassfish.hk2</groupId>
        <artifactId>hk2-api</artifactId>
        <version>${hk2.version}</version>
      </dependency>
      <dependency>
        <groupId>org.glassfish.hk2.external</groupId>
        <artifactId>jakarta.inject</artifactId>
        <version>${jakarta.inject.version}</version>
      </dependency>
      <dependency>
        <groupId>org.glassfish.jaxb</groupId>
        <artifactId>jaxb-runtime</artifactId>
        <version>${jaxb-runtime.version}</version>
        <exclusions>
          <exclusion>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>${jersey2.version}</version>
        <exclusions>
          <exclusion>
            <groupId>org.glassfish.hk2</groupId>
            <artifactId>hk2-api</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet-core</artifactId>
        <version>${jersey2.version}</version>
      </dependency>
      <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-common</artifactId>
        <version>${jersey2.version}</version>
      </dependency>
      <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-server</artifactId>
        <version>${jersey2.version}</version>
      </dependency>
      <dependency>
        <groupId>org.glassfish.jersey.ext.cdi</groupId>
        <artifactId>jersey-cdi1x</artifactId>
        <version>${jersey2.version}</version>
      </dependency>
      <dependency>
        <groupId>org.glassfish.jersey.inject</groupId>
        <artifactId>jersey-hk2</artifactId>
        <version>${jersey2.version}</version>
        <exclusions>
          <exclusion>
            <groupId>org.glassfish.hk2</groupId>
            <artifactId>hk2-api</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.glassfish.hk2</groupId>
            <artifactId>hk2-utils</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.glassfish.hk2.external</groupId>
            <artifactId>aopalliance-repackaged</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-jaxb</artifactId>
        <version>${jersey2.version}</version>
      </dependency>
      <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
        <version>${jersey2.version}</version>
      </dependency>
      <dependency>
        <groupId>org.hamcrest</groupId>
        <artifactId>hamcrest</artifactId>
        <version>${hamcrest.version}</version>
      </dependency>
      <dependency>
        <groupId>org.jacoco</groupId>
        <artifactId>org.jacoco.core</artifactId>
        <version>${jacoco.version}</version>
      </dependency>
      <dependency>
        <groupId>org.javassist</groupId>
        <artifactId>javassist</artifactId>
        <version>${javassist.version}</version>
      </dependency>
      <dependency>
        <groupId>org.jboss.weld.servlet</groupId>
        <artifactId>weld-servlet-shaded</artifactId>
        <version>${weld-servlet.version}</version>
      </dependency>
      <dependency>
        <groupId>org.jgrapht</groupId>
        <artifactId>jgrapht-core</artifactId>
        <version>${jgrapht.version}</version>
      </dependency>
      <dependency>
        <groupId>org.jgrapht</groupId>
        <artifactId>jgrapht-ext</artifactId>
        <version>${jgrapht.version}</version>
      </dependency>
      <dependency>
        <groupId>org.jline</groupId>
        <artifactId>jline</artifactId>
        <version>${jline.version}</version>
      </dependency>
      <dependency>
        <groupId>org.jooq</groupId>
        <artifactId>jooq</artifactId>
        <version>${jooq.version}</version>
        <exclusions>
          <exclusion>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.jooq</groupId>
        <artifactId>jooq-codegen</artifactId>
        <version>${jooq.version}</version>
      </dependency>
      <dependency>
        <groupId>org.jooq</groupId>
        <artifactId>jooq-meta</artifactId>
        <version>${jooq.version}</version>
      </dependency>
      <dependency>
        <groupId>org.kohsuke.metainf-services</groupId>
        <artifactId>metainf-services</artifactId>
        <version>${metainf-services.version}</version>
        <optional>true</optional>
      </dependency>
      <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>${mockito.version}</version>
      </dependency>
      <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-inline</artifactId>
        <version>${mockito.version}</version>
      </dependency>
      <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-junit-jupiter</artifactId>
        <version>${mockito.version}</version>
      </dependency>
      <dependency>
        <groupId>org.reflections</groupId>
        <artifactId>reflections</artifactId>
        <version>${reflections.version}</version>
        <exclusions>
          <exclusion>
            <groupId>com.google.code.findbugs</groupId>
            <artifactId>jsr305</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.rocksdb</groupId>
        <artifactId>rocksdbjni</artifactId>
        <version>${rocksdb.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.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
      </dependency>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-reload4j</artifactId>
        <version>${slf4j.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
        <exclusions>
          <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jcl</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>${spring.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>${spring.version}</version>
      </dependency>
      <dependency>
        <groupId>org.vafer</groupId>
        <artifactId>jdeb</artifactId>
        <version>${jdeb.version}</version>
      </dependency>
      <dependency>
        <groupId>org.xerial</groupId>
        <artifactId>sqlite-jdbc</artifactId>
        <version>${sqlite.version}</version>
      </dependency>
      <dependency>
        <groupId>org.xerial.snappy</groupId>
        <artifactId>snappy-java</artifactId>
        <version>${snappy-java.version}</version>
      </dependency>
      <dependency>
        <groupId>org.yaml</groupId>
        <artifactId>snakeyaml</artifactId>
        <version>${snakeyaml.version}</version>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <dependencies>
    <!-- Test Dependencies used by most modules -->
    <dependency>
      <groupId>org.assertj</groupId>
      <artifactId>assertj-core</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-api</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-params</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-core</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-inline</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-junit-jupiter</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>com.coderplus.maven.plugins</groupId>
          <artifactId>copy-rename-maven-plugin</artifactId>
          <version>${copy-rename-maven-plugin.version}</version>
        </plugin>
        <plugin>
          <groupId>com.github.ekryd.sortpom</groupId>
          <artifactId>sortpom-maven-plugin</artifactId>
          <version>${sortpom-maven-plugin.version}</version>
        </plugin>
        <plugin>
          <groupId>com.salesforce.servicelibs</groupId>
          <artifactId>proto-backwards-compatibility</artifactId>
          <version>${proto-backwards-compatibility.version}</version>
          <configuration>
            <protoSourceRoot>${basedir}/target/classes</protoSourceRoot>
          </configuration>
          <executions>
            <execution>
              <goals>
                <goal>backwards-compatibility-check</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
        <plugin>
          <groupId>com.github.eirslett</groupId>
          <artifactId>frontend-maven-plugin</artifactId>
          <version>${frontend-maven-plugin.version}</version>
        </plugin>
        <plugin>
          <groupId>dev.aspectj</groupId>
          <artifactId>aspectj-maven-plugin</artifactId>
          <version>${aspectj-plugin.version}</version>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>build-helper-maven-plugin</artifactId>
          <version>${build-helper-maven-plugin.version}</version>
        </plugin>
        <!-- We include the configuration for license-maven-plugin to correct
             maven-shade-plugin generated poms because it's always the same. We
             can't simply configure the plugin because we must ensure execution
             happens in the package phase after the shade plugin runs.
          -->
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>license-maven-plugin</artifactId>
          <version>${license-maven-plugin.version}</version>
          <configuration>
            <canUpdateCopyright>false</canUpdateCopyright>
            <roots>
              <root>${project.basedir}</root>
            </roots>
          </configuration>
          <executions>
            <execution>
              <id>update-pom-license</id>
              <goals>
                <goal>update-file-header</goal>
              </goals>
              <phase>package</phase>
              <configuration>
                <licenseName>apache_v2</licenseName>
                <includes>
                  <include>dependency-reduced-pom.xml</include>
                </includes>
              </configuration>
            </execution>
          </executions>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-clean-plugin</artifactId>
          <version>${maven-clean-plugin.version}</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>${maven-compiler-plugin.version}</version>
          <configuration>
            <useIncrementalCompilation>false</useIncrementalCompilation>
            <compilerArgs>
              <arg>-AartifactId=${project.artifactId}</arg>
            </compilerArgs>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-patch-plugin</artifactId>
          <version>${maven-patch-plugin.version}</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-shade-plugin</artifactId>
          <version>${maven-shade-plugin.version}</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>${maven-surefire-plugin.version}</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-install-plugin</artifactId>
          <version>${maven-install-plugin.version}</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <version>${maven-jar-plugin.version}</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>${maven-javadoc-plugin.version}</version>
          <configuration>
            <excludePackageNames>org.apache.hadoop.hdds.protocol.datanode.proto:org.apache.hadoop.hdds.protocol.proto:org.apache.hadoop.hdds.protocol.proto3:org.apache.hadoop.hdds.protocol.scm.proto:org.apache.hadoop.ozone.protocol.proto:org.apache.hadoop.ozone.protocol.proto3:org.apache.hadoop.ozone.security.proto:org.apache.hadoop.ozone.security.proto3:org.apache.hadoop.ozone.storage.proto:org.apache.ozone.recon.schema.generated:org.apache.ozone.recon.schema.generated.tables</excludePackageNames>
            <sourceFileExcludes>
              <exclude>**/package-info.java</exclude>
              <exclude>**/org/apache/ozone/recon/schema/generated/tables/**/*.java</exclude>
            </sourceFileExcludes>
            <doclint>none</doclint>
            <notimestamp>true</notimestamp>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-war-plugin</artifactId>
          <version>${maven-war-plugin.version}</version>
        </plugin>
        <plugin>
          <groupId>com.github.spotbugs</groupId>
          <artifactId>spotbugs-maven-plugin</artifactId>
          <version>${spotbugs.version}</version>
          <configuration>
            <maxHeap>1024</maxHeap>
            <xmlOutput>true</xmlOutput>
            <includeTests>true</includeTests>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>make-maven-plugin</artifactId>
          <version>${make-maven-plugin.version}</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-source-plugin</artifactId>
          <version>${maven-source-plugin.version}</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-resources-plugin</artifactId>
          <version>${maven-resources-plugin.version}</version>
          <configuration>
            <nonFilteredFileExtensions>
              <nonFilteredFileExtension>swp</nonFilteredFileExtension>
              <nonFilteredFileExtension>woff</nonFilteredFileExtension>
              <nonFilteredFileExtension>woff2</nonFilteredFileExtension>
              <nonFilteredFileExtension>robot</nonFilteredFileExtension>
            </nonFilteredFileExtensions>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>exec-maven-plugin</artifactId>
          <version>${exec-maven-plugin.version}</version>
        </plugin>
        <plugin>
          <groupId>org.apache.hadoop</groupId>
          <artifactId>hadoop-maven-plugins</artifactId>
          <version>${hadoop.version}</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>${maven-dependency-plugin.version}</version>
          <dependencies>
            <dependency>
              <groupId>org.codehaus.plexus</groupId>
              <artifactId>plexus-archiver</artifactId>
              <version>${plexus-archiver.version}</version>
            </dependency>
          </dependencies>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-enforcer-plugin</artifactId>
          <version>${maven-enforcer-plugin.version}</version>
          <configuration>
            <rules>
              <requireMavenVersion>
                <version>${enforced.maven.version}</version>
              </requireMavenVersion>
              <requireJavaVersion>
                <version>${enforced.java.version}</version>
              </requireJavaVersion>
            </rules>
          </configuration>
          <dependencies>
            <dependency>
              <groupId>de.skuzzle.enforcer</groupId>
              <artifactId>restrict-imports-enforcer-rule</artifactId>
              <version>${restrict-imports.enforcer.version}</version>
            </dependency>
          </dependencies>
          <executions>
            <execution>
              <id>banned-rocksdb-imports</id>
              <goals>
                <goal>enforce</goal>
              </goals>
              <phase>process-sources</phase>
              <configuration>
                <rules>
                  <RestrictImports>
                    <includeTestCode>false</includeTestCode>
                    <reason>Use managed RocksObjects under org.apache.hadoop.hdds.utils.db.managed instead.</reason>
                    <!-- By default, ban all the classes in org.rocksdb -->
                    <bannedImport>org.rocksdb.**</bannedImport>
                    <allowedImports>
                      <!-- Allow non-RocksObject classes. -->
                      <allowedImport>org.rocksdb.ColumnFamilyDescriptor</allowedImport>
                      <allowedImport>org.rocksdb.CompactionStyle</allowedImport>
                      <allowedImport>org.rocksdb.KeyMayExist</allowedImport>
                      <allowedImport>org.rocksdb.HistogramData</allowedImport>
                      <allowedImport>org.rocksdb.HistogramType</allowedImport>
                      <allowedImport>org.rocksdb.Holder</allowedImport>
                      <allowedImport>org.rocksdb.InfoLogLevel</allowedImport>
                      <allowedImport>org.rocksdb.OptionsUtil</allowedImport>
                      <allowedImport>org.rocksdb.RocksDBException</allowedImport>
                      <allowedImport>org.rocksdb.StatsLevel</allowedImport>
                      <allowedImport>org.rocksdb.TableProperties</allowedImport>
                      <allowedImport>org.rocksdb.TransactionLogIterator.BatchResult</allowedImport>
                      <allowedImport>org.rocksdb.TickerType</allowedImport>
                      <allowedImport>org.rocksdb.LiveFileMetaData</allowedImport>
                      <!-- Allow RocksObjects whose native pointer is managed by RocksDB. -->
                      <allowedImport>org.rocksdb.ColumnFamilyHandle</allowedImport>
                      <allowedImport>org.rocksdb.Env</allowedImport>
                      <allowedImport>org.rocksdb.Statistics</allowedImport>
                      <!-- Allow RocksDB constants and static methods to be used. -->
                      <allowedImport>org.rocksdb.RocksDB.*</allowedImport>
                    </allowedImports>
                    <excludedSourceRoots>
                      <excludedSourceRoot>${project.build.directory}/generated-sources/java</excludedSourceRoot>
                      <excludedSourceRoot>${project.build.directory}/generated-sources/protobuf/java</excludedSourceRoot>
                    </excludedSourceRoots>
                    <exclusions>
                      <exclusion>org.apache.hadoop.hdds.utils.db.managed.*</exclusion>
                      <exclusion>org.apache.ozone.rocksdiff.RocksDBCheckpointDiffer</exclusion>
                    </exclusions>
                  </RestrictImports>
                </rules>
              </configuration>
            </execution>
            <execution>
              <id>ban-imports</id>
              <goals>
                <goal>enforce</goal>
              </goals>
              <phase>process-sources</phase>
              <configuration>
                <rules>
                  <restrictImports>
                    <includeTestCode>true</includeTestCode>
                    <reason>Use directly from Guava</reason>
                    <bannedImports>
                      <bannedImport>org.apache.ratis.thirdparty.com.google.common.**</bannedImport>
                      <bannedImport>org.apache.hadoop.thirdparty.com.google.common.**</bannedImport>
                      <bannedImport>org.apache.hadoop.util.Lists</bannedImport>
                      <bannedImport>org.apache.hadoop.util.Preconditions</bannedImport>
                      <bannedImport>org.apache.hadoop.util.Sets</bannedImport>
                    </bannedImports>
                    <excludedSourceRoots>
                      <excludedSourceRoot>${project.build.directory}/generated-sources/java</excludedSourceRoot>
                      <excludedSourceRoot>${project.build.directory}/generated-sources/protobuf/java</excludedSourceRoot>
                    </excludedSourceRoots>
                  </restrictImports>
                  <restrictImports>
                    <includeTestCode>true</includeTestCode>
                    <reason>Disable with @Unhealthy or @Slow instead (see HDDS-9276)</reason>
                    <bannedImports>
                      <bannedImport>org.junit.jupiter.api.Disabled</bannedImport>
                    </bannedImports>
                    <excludedSourceRoots>
                      <excludedSourceRoot>${project.build.directory}/generated-sources/java</excludedSourceRoot>
                      <excludedSourceRoot>${project.build.directory}/generated-sources/protobuf/java</excludedSourceRoot>
                    </excludedSourceRoots>
                  </restrictImports>
                  <restrictImports>
                    <includeTestCode>true</includeTestCode>
                    <reason>Prefer JDK built-in</reason>
                    <bannedImports>
                      <bannedImport>org.apache.hadoop.HadoopIllegalArgumentException</bannedImport>
                    </bannedImports>
                    <excludedSourceRoots>
                      <excludedSourceRoot>${project.build.directory}/generated-sources/java</excludedSourceRoot>
                      <excludedSourceRoot>${project.build.directory}/generated-sources/protobuf/java</excludedSourceRoot>
                    </excludedSourceRoots>
                  </restrictImports>
                  <restrictImports>
                    <includeTestCode>true</includeTestCode>
                    <reason>Use Ozone's version of the same class</reason>
                    <bannedImports>
                      <bannedImport>org.apache.hadoop.test.GenericTestUtils</bannedImport>
                      <bannedImport>org.apache.hadoop.test.LambdaTestUtils</bannedImport>
                      <bannedImport>org.apache.hadoop.test.MetricsAssert</bannedImport>
                      <bannedImport>org.apache.hadoop.test.Whitebox</bannedImport>
                      <bannedImport>org.apache.hadoop.classification.InterfaceAudience</bannedImport>
                      <bannedImport>org.apache.hadoop.classification.InterfaceStability</bannedImport>
                    </bannedImports>
                    <excludedSourceRoots>
                      <excludedSourceRoot>${project.build.directory}/generated-sources/java</excludedSourceRoot>
                      <excludedSourceRoot>${project.build.directory}/generated-sources/protobuf/java</excludedSourceRoot>
                    </excludedSourceRoots>
                    <exclusions>
                      <exclusion>org.apache.hadoop.fs.contract.*</exclusion>
                      <exclusion>org.apache.hadoop.tools.contract.*</exclusion>
                    </exclusions>
                  </restrictImports>
                  <restrictImports>
                    <includeTestCode>true</includeTestCode>
                    <reason>Use Ozone's similar class</reason>
                    <bannedImports>
                      <bannedImport>org.apache.hadoop.hdfs.MiniDFSCluster</bannedImport>
                      <bannedImport>org.apache.hadoop.hdfs.DFSConfigKeys</bannedImport>
                    </bannedImports>
                    <excludedSourceRoots>
                      <excludedSourceRoot>${project.build.directory}/generated-sources/java</excludedSourceRoot>
                      <excludedSourceRoot>${project.build.directory}/generated-sources/protobuf/java</excludedSourceRoot>
                    </excludedSourceRoots>
                  </restrictImports>
                  <restrictImports>
                    <includeTestCode>true</includeTestCode>
                    <parseFullCompilationUnit>true</parseFullCompilationUnit>
                    <reason>Use JUnit5</reason>
                    <bannedImports>
                      <bannedImport>org.junit.**</bannedImport>
                    </bannedImports>
                    <allowedImports>
                      <allowedImport>org.junit.jupiter.**</allowedImport>
                      <allowedImport>org.junit.platform.**</allowedImport>
                    </allowedImports>
                    <excludedSourceRoots>
                      <excludedSourceRoot>${project.build.directory}/generated-sources/java</excludedSourceRoot>
                      <excludedSourceRoot>${project.build.directory}/generated-sources/protobuf/java</excludedSourceRoot>
                    </excludedSourceRoots>
                  </restrictImports>
                  <restrictImports>
                    <includeTestCode>true</includeTestCode>
                    <reason>Use jakarta.annotation</reason>
                    <bannedImports>
                      <bannedImport>javax.annotation.Nonnull</bannedImport>
                      <bannedImport>javax.annotation.Nullable</bannedImport>
                      <bannedImport>org.checkerframework.checker.nullness.qual.NonNull</bannedImport>
                      <bannedImport>org.checkerframework.checker.nullness.qual.Nullable</bannedImport>
                      <bannedImport>org.jetbrains.annotations.NotNull</bannedImport>
                      <bannedImport>org.jetbrains.annotations.Nullable</bannedImport>
                    </bannedImports>
                    <excludedSourceRoots>
                      <excludedSourceRoot>${project.build.directory}/generated-sources/java</excludedSourceRoot>
                      <excludedSourceRoot>${project.build.directory}/generated-sources/protobuf/java</excludedSourceRoot>
                    </excludedSourceRoots>
                  </restrictImports>
                  <restrictImports>
                    <includeTestCode>true</includeTestCode>
                    <reason>Use commons-lang v3</reason>
                    <bannedImports>
                      <bannedImport>org.apache.commons.lang.**</bannedImport>
                    </bannedImports>
                    <excludedSourceRoots>
                      <excludedSourceRoot>${project.build.directory}/generated-sources/java</excludedSourceRoot>
                      <excludedSourceRoot>${project.build.directory}/generated-sources/protobuf/java</excludedSourceRoot>
                    </excludedSourceRoots>
                  </restrictImports>
                  <restrictImports>
                    <includeTestCode>true</includeTestCode>
                    <reason>Use commons-collections v4</reason>
                    <bannedImports>
                      <bannedImport>org.apache.commons.collections.**</bannedImport>
                    </bannedImports>
                    <excludedSourceRoots>
                      <excludedSourceRoot>${project.build.directory}/generated-sources/java</excludedSourceRoot>
                      <excludedSourceRoot>${project.build.directory}/generated-sources/protobuf/java</excludedSourceRoot>
                    </excludedSourceRoots>
                  </restrictImports>
                  <restrictImports>
                    <includeTestCode>true</includeTestCode>
                    <reason>Use Jackson 2 (com.fasterxml.jackson)</reason>
                    <bannedImports>
                      <bannedImport>org.codehaus.jackson.**</bannedImport>
                    </bannedImports>
                    <excludedSourceRoots>
                      <excludedSourceRoot>${project.build.directory}/generated-sources/java</excludedSourceRoot>
                      <excludedSourceRoot>${project.build.directory}/generated-sources/protobuf/java</excludedSourceRoot>
                    </excludedSourceRoots>
                  </restrictImports>
                  <restrictImports>
                    <includeTestCode>true</includeTestCode>
                    <reason>Use similar class from Apache Commons Lang</reason>
                    <bannedImports>
                      <bannedImport>org.eclipse.jetty.util.StringUtil</bannedImport>
                    </bannedImports>
                  </restrictImports>
                </rules>
              </configuration>
            </execution>
            <execution>
              <id>ban-annotations</id>
              <goals>
                <goal>enforce</goal>
              </goals>
              <phase>process-sources</phase>
              <configuration>
                <rules>
                  <restrictImports>
                    <reason>Annotation processing is disabled by default.  Override this ban in modules where processing is enabled.</reason>
                    <bannedImports>
                      <bannedImport>org.apache.hadoop.hdds.conf.Config</bannedImport>
                      <bannedImport>org.apache.hadoop.hdds.conf.ConfigGroup</bannedImport>
                      <bannedImport>org.apache.hadoop.ozone.om.request.validation.RequestFeatureValidator</bannedImport>
                      <bannedImport>org.apache.hadoop.hdds.scm.metadata.Replicate</bannedImport>
                      <bannedImport>org.kohsuke.MetaInfServices</bannedImport>
                    </bannedImports>
                    <excludedSourceRoots>
                      <excludedSourceRoot>${project.build.directory}/generated-sources/java</excludedSourceRoot>
                      <excludedSourceRoot>${project.build.directory}/generated-sources/protobuf/java</excludedSourceRoot>
                    </excludedSourceRoots>
                  </restrictImports>
                </rules>
              </configuration>
            </execution>
          </executions>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-assembly-plugin</artifactId>
          <version>${maven-assembly-plugin.version}</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>${maven-deploy-plugin.version}</version>
        </plugin>
        <plugin>
          <groupId>org.apache.rat</groupId>
          <artifactId>apache-rat-plugin</artifactId>
          <version>${apache-rat-plugin.version}</version>
        </plugin>
        <plugin>
          <groupId>org.jacoco</groupId>
          <artifactId>jacoco-maven-plugin</artifactId>
          <version>${jacoco.version}</version>
        </plugin>
        <plugin>
          <groupId>io.fabric8</groupId>
          <artifactId>docker-maven-plugin</artifactId>
          <version>${docker-maven-plugin.version}</version>
        </plugin>
        <plugin>
          <groupId>com.googlecode.maven-download-plugin</groupId>
          <artifactId>download-maven-plugin</artifactId>
          <version>${download-maven-plugin.version}</version>
        </plugin>
        <plugin>
          <groupId>org.cyclonedx</groupId>
          <artifactId>cyclonedx-maven-plugin</artifactId>
          <version>${cyclonedx.version}</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-pmd-plugin</artifactId>
          <version>${pmd.version}</version>
          <configuration>
            <rulesets>
              <ruleset>dev-support/pmd/pmd-ruleset.xml</ruleset>
            </rulesets>
            <printFailingErrors>true</printFailingErrors>
            <includeTests>true</includeTests>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.xolstice.maven.plugins</groupId>
          <artifactId>protobuf-maven-plugin</artifactId>
          <version>${protobuf-maven-plugin.version}</version>
          <extensions>true</extensions>
        </plugin>
      </plugins>
    </pluginManagement>

    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
          <execution>
            <id>analyze</id>
            <goals>
              <goal>analyze-only</goal>
            </goals>
            <configuration>
              <failOnWarning>true</failOnWarning>
              <ignoreNonCompile>true</ignoreNonCompile>
              <excludedClasses>
                <!-- disabled test -->
                <excludedClass>org.apache.hadoop.ozone.om.service.TestRangerBGSyncService</excludedClass>
              </excludedClasses>
              <ignoredNonTestScopedDependencies>
                <!--
                  Ignore false positive "Non-test scoped test only dependencies": these are test-only in some module, compile scope transitively.
                  See:
                  - https://issues.apache.org/jira/browse/MDEP-791
                  - https://issues.apache.org/jira/browse/MNG-6058
                -->
                <ignoredNonTestScopedDependency>com.fasterxml.jackson.core:jackson-databind:jar</ignoredNonTestScopedDependency>
                <ignoredNonTestScopedDependency>org.apache.commons:commons-compress:jar</ignoredNonTestScopedDependency>
                <ignoredNonTestScopedDependency>org.apache.ozone:hdds-client:jar</ignoredNonTestScopedDependency>
                <ignoredNonTestScopedDependency>org.apache.ozone:ozone-interface-client:jar</ignoredNonTestScopedDependency>
                <ignoredNonTestScopedDependency>org.glassfish.jersey.core:jersey-common:jar</ignoredNonTestScopedDependency>
                <ignoredNonTestScopedDependency>org.rocksdb:rocksdbjni:jar</ignoredNonTestScopedDependency>
                <ignoredNonTestScopedDependency>org.springframework:spring-core:jar</ignoredNonTestScopedDependency>
              </ignoredNonTestScopedDependencies>
            </configuration>
          </execution>
          <execution>
            <id>add-classpath-descriptor</id>
            <goals>
              <goal>build-classpath</goal>
            </goals>
            <phase>prepare-package</phase>
            <configuration>
              <outputFile>${project.build.outputDirectory}/${project.artifactId}.classpath</outputFile>
              <prefix>$HDDS_LIB_JARS_DIR</prefix>
              <outputFilterFile>true</outputFilterFile>
              <includeScope>runtime</includeScope>
              <skip>${classpath.skip}</skip>
            </configuration>
          </execution>
          <execution>
            <id>copy-jars</id>
            <goals>
              <goal>copy-dependencies</goal>
            </goals>
            <phase>prepare-package</phase>
            <configuration>
              <outputDirectory>${project.build.directory}/share/ozone/lib</outputDirectory>
              <includeScope>runtime</includeScope>
              <skip>${classpath.skip}</skip>
            </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>dependency-reduced-pom.xml</include>
              </includes>
            </fileset>
          </filesets>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-remote-resources-plugin</artifactId>
        <version>${maven-remote-resources-plugin.version}</version>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>${maven-antrun-plugin.version}</version>
        <executions>
          <execution>
            <id>create-testdirs</id>
            <goals>
              <goal>run</goal>
            </goals>
            <phase>validate</phase>
            <configuration>
              <target>
                <mkdir dir="${test.build.dir}" />
                <mkdir dir="${test.build.data}" />
              </target>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <configuration>
          <fileSets>
            <fileSet>
              <directory>${project.basedir}</directory>
              <includes>
                <include>**/jacoco.exec</include>
              </includes>
              <useDefaultExcludes>false</useDefaultExcludes>
            </fileSet>
          </fileSets>
        </configuration>
        <executions>
          <execution>
            <id>default-prepare-agent</id>
            <goals>
              <goal>prepare-agent</goal>
            </goals>
            <configuration>
              <includes>org.apache.hadoop.hdds.*,org.apache.hadoop.ozone.*,org.apache.hadoop.fs.ozone.*,org.apache.ozone.*</includes>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <reuseForks>false</reuseForks>
          <forkedProcessTimeoutInSeconds>${surefire.fork.timeout}</forkedProcessTimeoutInSeconds>
          <enableProcessChecker>all</enableProcessChecker>
          <!-- @argLine is filled by jacoco maven plugin. @{} means late evaluation -->
          <argLine>${maven-surefire-plugin.argLine} ${maven-surefire-plugin.argLineAccessArgs} @{argLine}</argLine>
          <environmentVariables>
            <MALLOC_ARENA_MAX>4</MALLOC_ARENA_MAX>
          </environmentVariables>
          <trimStackTrace>false</trimStackTrace>
          <systemPropertyVariables>
            <hadoop.log.dir>${project.build.directory}/log</hadoop.log.dir>
            <hadoop.tmp.dir>${project.build.directory}/tmp</hadoop.tmp.dir>
            <java.net.preferIPv4Stack>true</java.net.preferIPv4Stack>
            <java.security.egd>${java.security.egd}</java.security.egd>
            <java.security.krb5.conf>${project.build.directory}/test-classes/krb5.conf</java.security.krb5.conf>
            <require.test.libhadoop>${require.test.libhadoop}</require.test.libhadoop>
            <!-- TODO: all references in testcases should be updated to this default -->
            <test.build.classes>${project.build.directory}/test-classes</test.build.classes>
            <test.build.dir>${test.build.dir}</test.build.dir>
            <test.build.data>${test.build.data}</test.build.data>
            <test.build.webapps>${test.build.webapps}</test.build.webapps>
            <test.cache.data>${test.cache.data}</test.cache.data>
          </systemPropertyVariables>
          <properties>
            <configurationParameters>junit.platform.output.capture.stdout = true
              junit.platform.output.capture.stderr = true
              junit.jupiter.execution.timeout.default = 5m</configurationParameters>
          </properties>
          <includes>
            <include>**/Test*.java</include>
          </includes>
          <excludedGroups>${excluded-test-groups}</excludedGroups>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <version>${maven-checkstyle-plugin.version}</version>
        <configuration>
          <configLocation>hadoop-hdds/dev-support/checkstyle/checkstyle.xml</configLocation>
          <suppressionsLocation>hadoop-hdds/dev-support/checkstyle/suppressions.xml</suppressionsLocation>
          <includeTestSourceDirectory>true</includeTestSourceDirectory>
          <failOnViolation>false</failOnViolation>
          <format>xml</format>
          <format>html</format>
          <outputFile>${project.build.directory}/test/checkstyle-errors.xml</outputFile>
        </configuration>
        <dependencies>
          <dependency>
            <groupId>com.puppycrawl.tools</groupId>
            <artifactId>checkstyle</artifactId>
            <version>${checkstyle.version}</version>
          </dependency>
        </dependencies>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-site-plugin</artifactId>
        <version>${maven-site-plugin.version}</version>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <inherited>false</inherited>
        <executions>
          <execution>
            <id>enforce-property</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <requireProperty>
                  <property>ozone.version</property>
                  <message>You must set a ozone.version to be the same as ${project.version}</message>
                  <regex>${project.version}</regex>
                  <regexMessage>The ozone.version property should be set and should be ${project.version}.</regexMessage>
                </requireProperty>
              </rules>
              <fail>true</fail>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>properties-maven-plugin</artifactId>
        <version>${properties.maven.plugin.version}</version>
        <dependencies>
          <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-core</artifactId>
            <version>${maven.core.version}</version>
          </dependency>
        </dependencies>
      </plugin>
      <plugin>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-plugin</artifactId>
        <configuration>
          <excludesFile>dev-support/rat/rat-exclusions.txt</excludesFile>
        </configuration>
      </plugin>
      <plugin>
        <groupId>com.github.ekryd.sortpom</groupId>
        <artifactId>sortpom-maven-plugin</artifactId>
        <configuration>
          <createBackupFile>false</createBackupFile>
          <encoding>${project.build.sourceEncoding}</encoding>
          <expandEmptyElements>false</expandEmptyElements>
          <keepBlankLines>true</keepBlankLines>
          <nrOfIndentSpace>2</nrOfIndentSpace>
          <predefinedSortOrder>custom_1</predefinedSortOrder>
          <sortDependencies>scope,groupId,artifactId</sortDependencies>
          <sortDependencyExclusions>groupId,artifactId</sortDependencyExclusions>
          <sortModules>true</sortModules>
          <sortProperties>true</sortProperties>
          <spaceBeforeCloseEmptyElement>true</spaceBeforeCloseEmptyElement>
          <verifyFail>Stop</verifyFail>
          <verifyFailOn>Strict</verifyFailOn>
        </configuration>
        <executions>
          <execution>
            <goals>
              <goal>verify</goal>
            </goals>
            <phase>validate</phase>
          </execution>
        </executions>
      </plugin>
    </plugins>
    <extensions>
      <extension>
        <groupId>kr.motd.maven</groupId>
        <artifactId>os-maven-plugin</artifactId>
        <version>${os-maven-plugin.version}</version>
      </extension>
    </extensions>
  </build>

  <organization>
    <name>Apache Software Foundation</name>
    <url>http://www.apache.org</url>
  </organization>

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

  <repositories>
    <repository>
      <releases>
        <enabled>false</enabled>
        <updatePolicy>never</updatePolicy>
      </releases>
      <snapshots>
        <enabled>false</enabled>
        <updatePolicy>never</updatePolicy>
      </snapshots>
      <id>apache.snapshots</id>
      <url>https://repository.apache.org/snapshots</url>
    </repository>
    <repository>
      <releases>
        <enabled>false</enabled>
        <updatePolicy>never</updatePolicy>
      </releases>
      <snapshots>
        <enabled>false</enabled>
        <updatePolicy>never</updatePolicy>
      </snapshots>
      <id>apache.snapshots.https</id>
      <url>https://repository.apache.org/content/repositories/snapshots</url>
    </repository>
  </repositories>

  <distributionManagement>
    <repository>
      <id>${distMgmtStagingId}</id>
      <name>${distMgmtStagingName}</name>
      <url>${distMgmtStagingUrl}</url>
    </repository>
    <snapshotRepository>
      <id>${distMgmtSnapshotsId}</id>
      <name>${distMgmtSnapshotsName}</name>
      <url>${distMgmtSnapshotsUrl}</url>
    </snapshotRepository>
  </distributionManagement>

  <profiles>
    <profile>
      <id>dist</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <executions>
              <execution>
                <!-- build javadoc jars per jar for publishing to maven -->
                <id>module-javadocs</id>
                <goals>
                  <goal>jar</goal>
                </goals>
                <phase>package</phase>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <executions>
              <execution>
                <!-- builds source jars and attaches them to the project for publishing -->
                <id>hadoop-java-sources</id>
                <goals>
                  <goal>jar-no-fork</goal>
                  <goal>test-jar-no-fork</goal>
                </goals>
                <phase>package</phase>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-enforcer-plugin</artifactId>
            <executions>
              <execution>
                <id>dist-enforce</id>
                <goals>
                  <goal>enforce</goal>
                </goals>
                <phase>package</phase>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.cyclonedx</groupId>
            <artifactId>cyclonedx-maven-plugin</artifactId>
            <executions>
              <execution>
                <goals>
                  <goal>makeBom</goal>
                </goals>
                <phase>package</phase>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>sign</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-gpg-plugin</artifactId>
            <version>${maven-gpg-plugin.version}</version>
            <executions>
              <execution>
                <id>sign-artifacts</id>
                <goals>
                  <goal>sign</goal>
                </goals>
                <phase>verify</phase>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>clover</id>
      <activation>
        <activeByDefault>false</activeByDefault>
        <property>
          <name>clover</name>
        </property>
      </activation>
      <properties>
        <!-- NB: This additional parametrization is made in order
             to be able to re-define these properties with "-Dk=v" maven options.
             By some reason the expressions declared in clover
             docs like "${maven.clover.generateHtml}" do not work in that way.
             However, the below properties are confirmed to work: e.g.
             -DcloverGenHtml=false switches off the Html generation.
             The default values provided here exactly correspond to Clover defaults, so
             the behavior is 100% backwards compatible. -->
        <cloverAlwaysReport>true</cloverAlwaysReport>
        <cloverDatabase>${project.build.directory}/clover/hadoop-coverage.db</cloverDatabase>
        <cloverGenHistorical>false</cloverGenHistorical>
        <cloverGenHtml>true</cloverGenHtml>
        <cloverGenXml>true</cloverGenXml>
        <cloverLicenseLocation>${user.home}/.clover.license</cloverLicenseLocation>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>com.atlassian.maven.plugins</groupId>
            <artifactId>maven-clover2-plugin</artifactId>
            <configuration>
              <includesAllSourceRoots>false</includesAllSourceRoots>
              <includesTestSourceRoots>true</includesTestSourceRoots>
              <licenseLocation>${cloverLicenseLocation}</licenseLocation>
              <cloverDatabase>${cloverDatabase}</cloverDatabase>
              <targetPercentage>50%</targetPercentage>
              <outputDirectory>${project.build.directory}/clover</outputDirectory>
              <alwaysReport>${cloverAlwaysReport}</alwaysReport>
              <generateHtml>${cloverGenHtml}</generateHtml>
              <generateXml>${cloverGenXml}</generateXml>
              <generateHistorical>${cloverGenHistorical}</generateHistorical>
              <excludes>
                <exclude>**/examples/**/*.java</exclude>
                <exclude>**/hamlet/*.java</exclude>
                <exclude>**/ha/proto/*.java</exclude>
                <exclude>**/protocol/proto/*.java</exclude>
                <exclude>**/compiler/generated/*.java</exclude>
                <exclude>**/protobuf/*.java</exclude>
                <exclude>**/v2/proto/*.java</exclude>
                <exclude>**/yarn/proto/*.java</exclude>
                <exclude>**/security/proto/*.java</exclude>
                <exclude>**/tools/proto/*.java</exclude>
                <exclude>**/hs/proto/*.java</exclude>
              </excludes>
            </configuration>
            <executions>
              <execution>
                <id>clover-setup</id>
                <goals>
                  <goal>setup</goal>
                </goals>
                <phase>process-sources</phase>
              </execution>
              <execution>
                <id>clover</id>
                <goals>
                  <goal>clover</goal>
                </goals>
                <phase>test</phase>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- Profiles for specific aspectj versions -->
    <profile>
      <id>aspectj-java11-20</id>
      <activation>
        <jdk>[11,20]</jdk>
      </activation>
      <properties>
        <aspectj.version>${aspectj.java11.version}</aspectj.version>
      </properties>
    </profile>
    <profile>
      <id>aspectj-java21-or-later</id>
      <activation>
        <jdk>[21,]</jdk>
      </activation>
      <properties>
        <aspectj.version>${aspectj.java21.version}</aspectj.version>
      </properties>
    </profile>
    <profile>
      <id>go-offline</id>
      <properties>
        <maven.javadoc.skip>true</maven.javadoc.skip>
        <maven.shade.skip>true</maven.shade.skip>
        <mdep.analyze.skip>true</mdep.analyze.skip>
        <skip.installnodepnpm>true</skip.installnodepnpm>
        <skip.pnpm>true</skip.pnpm>
        <skipDocs>true</skipDocs>
        <test>void</test>
      </properties>
    </profile>
    <profile>
      <id>skip-frontend</id>
      <activation>
        <property>
          <name>skipRecon</name>
        </property>
      </activation>
      <properties>
        <skip.installnodepnpm>true</skip.installnodepnpm>
        <skip.pnpm>true</skip.pnpm>
      </properties>
    </profile>
    <!-- The following profiles define test splits for CI -->
    <profile>
      <id>test-client</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <includes>
                <include>org.apache.hadoop.ozone.client.**</include>
              </includes>
              <excludedGroups>${unstable-test-groups}</excludedGroups>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>test-container</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <includes>
                <include>org.apache.hadoop.hdds.scm.container.**</include>
                <include>org.apache.hadoop.ozone.container.**</include>
              </includes>
              <excludedGroups>${unstable-test-groups}</excludedGroups>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>test-om</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <includes>
                <include>org.apache.hadoop.ozone.om.**</include>
              </includes>
              <excludes>
                <exclude>org.apache.hadoop.ozone.om.snapshot.**</exclude>
                <!-- default excludes -->
                <exclude>**/*$*</exclude>
              </excludes>
              <excludedGroups>${unstable-test-groups}</excludedGroups>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>test-snapshot</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <includes>
                <include>org.apache.hadoop.ozone.om.snapshot.**</include>
              </includes>
              <excludedGroups>${unstable-test-groups}</excludedGroups>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>test-filesystem</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <includes>
                <include>org.apache.hadoop.fs.**</include>
              </includes>
              <excludedGroups>${unstable-test-groups}</excludedGroups>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>test-hdds</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <includes>
                <include>org.apache.hadoop.hdds.**</include>
              </includes>
              <excludes>
                <exclude>org.apache.hadoop.hdds.scm.container.**</exclude>
                <!-- default excludes -->
                <exclude>**/*$*</exclude>
              </excludes>
              <excludedGroups>${unstable-test-groups}</excludedGroups>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>test-ozone</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <includes>
                <include>org.apache.ozone.**</include>
                <include>org.apache.hadoop.ozone.**</include>
              </includes>
              <excludes>
                <exclude>org.apache.hadoop.ozone.client.**</exclude>
                <exclude>org.apache.hadoop.ozone.container.**</exclude>
                <exclude>org.apache.hadoop.ozone.om.**</exclude>
                <exclude>org.apache.hadoop.ozone.recon.**</exclude>
                <!-- default excludes -->
                <exclude>**/*$*</exclude>
              </excludes>
              <excludedGroups>${unstable-test-groups}</excludedGroups>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>test-recon</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <includes>
                <include>org.apache.hadoop.ozone.recon.**</include>
              </includes>
              <excludedGroups>${unstable-test-groups}</excludedGroups>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>stable-tests</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <excludedGroups>${unstable-test-groups}</excludedGroups>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <!-- Test split dedicated for running @Flaky tests -->
      <id>test-flaky</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <groups>flaky</groups>
              <excludedGroups>slow | unhealthy</excludedGroups>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>
