<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">
  <!--
/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


  ON MVN COMPILE NOT WORKING

  If you wondering why 'mvn compile' does not work building HBase
  (in particular, if you are doing it for the first time), instead do
  'mvn package'.  If you are interested in the full story, see
  https://issues.apache.org/jira/browse/HBASE-6795.

-->
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.apache</groupId>
    <artifactId>apache</artifactId>
    <version>23</version>
    <relativePath/>
    <!-- no parent resolution -->
  </parent>
  <groupId>org.apache.hbase</groupId>
  <artifactId>hbase</artifactId>
  <version>${revision}</version>
  <packaging>pom</packaging>
  <name>Apache HBase</name>
  <description>Apache HBase™ is the Hadoop database. Use it when you need
    random, realtime read/write access to your Big Data.
    This project's goal is the hosting of very large tables -- billions of rows X millions of columns -- atop clusters
    of commodity hardware.</description>
  <url>https://hbase.apache.org</url>
  <inceptionYear>2007</inceptionYear>
  <!-- Set here so we can consistently use the correct name, even on branches with
       an ASF parent pom older than v15. Also uses the url from v18.
    -->
  <licenses>
    <license>
      <name>Apache License, Version 2.0</name>
      <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
      <distribution>repo</distribution>
    </license>
  </licenses>
  <developers>
    <developer>
      <id>achouhan</id>
      <name>Abhishek Singh Chouhan</name>
      <email>achouhan@apache.org</email>
      <timezone>+5</timezone>
    </developer>
    <developer>
      <id>acube123</id>
      <name>Amitanand S. Aiyer</name>
      <email>acube123@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>allan163</id>
      <name>Allan Yang</name>
      <email>allan163@apache.org</email>
      <timezone>+8</timezone>
    </developer>
    <developer>
      <id>appy</id>
      <name>Apekshit Sharma</name>
      <email>appy@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>anastasia</id>
      <name>Anastasia Braginsky</name>
      <email>anastasia@apache.org</email>
      <timezone>+2</timezone>
    </developer>
    <developer>
      <id>apurtell</id>
      <name>Andrew Purtell</name>
      <email>apurtell@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>anoopsamjohn</id>
      <name>Anoop Sam John</name>
      <email>anoopsamjohn@apache.org</email>
      <timezone>+5</timezone>
    </developer>
    <developer>
      <id>antonov</id>
      <name>Mikhail Antonov</name>
      <email>antonov@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>ashishsinghi</id>
      <name>Ashish Singhi</name>
      <email>ashishsinghi@apache.org</email>
      <timezone>+5</timezone>
    </developer>
    <developer>
      <id>ashu</id>
      <name>Ashu Pachauri</name>
      <email>ashu@apache.org</email>
      <timezone>+5</timezone>
    </developer>
    <developer>
      <id>bharathv</id>
      <name>Bharath Vissapragada</name>
      <email>bharathv@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>binlijin</id>
      <name>Lijin Bin</name>
      <email>binlijin@apache.org</email>
      <timezone>+8</timezone>
    </developer>
    <developer>
      <id>brfrn169</id>
      <name>Toshihiro Suzuki</name>
      <email>brfrn169@apache.org</email>
      <timezone>+9</timezone>
    </developer>
    <developer>
      <id>busbey</id>
      <name>Sean Busbey</name>
      <email>busbey@apache.org</email>
      <timezone>-6</timezone>
    </developer>
    <developer>
      <id>chenglei</id>
      <name>Cheng Lei</name>
      <email>chenglei@apache.org</email>
      <timezone>+8</timezone>
    </developer>
    <developer>
      <id>chenheng</id>
      <name>Heng Chen</name>
      <email>chenheng@apache.org</email>
      <timezone>+8</timezone>
    </developer>
    <developer>
      <id>chia7712</id>
      <name>Chia-Ping Tsai</name>
      <email>chia7712@apache.org</email>
      <timezone>+8</timezone>
    </developer>
    <developer>
      <id>ddas</id>
      <name>Devaraj Das</name>
      <email>ddas@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>dimaspivak</id>
      <name>Dima Spivak</name>
      <email>dimaspivak@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>dmeil</id>
      <name>Doug Meil</name>
      <email>dmeil@apache.org</email>
      <timezone>-5</timezone>
    </developer>
    <developer>
      <id>eclark</id>
      <name>Elliott Clark</name>
      <email>eclark@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>elserj</id>
      <name>Josh Elser</name>
      <email>elserj@apache.org</email>
      <timezone>-5</timezone>
    </developer>
    <developer>
      <id>enis</id>
      <name>Enis Soztutar</name>
      <email>enis@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>eshcar</id>
      <name>Eshcar Hillel</name>
      <email>eshcar@apache.org</email>
      <timezone>+2</timezone>
    </developer>
    <developer>
      <id>fenghh</id>
      <name>Honghua Feng</name>
      <email>fenghh@apache.org</email>
      <timezone>+8</timezone>
    </developer>
    <developer>
      <id>garyh</id>
      <name>Gary Helmling</name>
      <email>garyh@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>gchanan</id>
      <name>Gregory Chanan</name>
      <email>gchanan@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>gjacoby</id>
      <name>Geoffrey Jacoby</name>
      <email>gjacoby@apache.org</email>
      <timezone>-5</timezone>
    </developer>
    <developer>
      <id>gxcheng</id>
      <name>Guangxu Cheng</name>
      <email>gxcheng@apache.org</email>
      <timezone>+8</timezone>
    </developer>
    <developer>
      <id>haxiaolin</id>
      <name>Xiaolin Ha</name>
      <email>haxiaolin@apache.org</email>
      <timezone>+8</timezone>
    </developer>
    <developer>
      <id>huaxiangsun</id>
      <name>Huaxiang Sun</name>
      <email>huaxiangsun@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>jdcryans</id>
      <name>Jean-Daniel Cryans</name>
      <email>jdcryans@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>jeffreyz</id>
      <name>Jeffrey Zhong</name>
      <email>jeffreyz@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>jerryjch</id>
      <name>Jing Chen (Jerry) He</name>
      <email>jerryjch@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>jyates</id>
      <name>Jesse Yates</name>
      <email>jyates@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>jgray</id>
      <name>Jonathan Gray</name>
      <email>jgray@fb.com</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>jingchengdu</id>
      <name>Jingcheng Du</name>
      <email>jingchengdu@apache.org</email>
      <timezone>+8</timezone>
    </developer>
    <developer>
      <id>esteban</id>
      <name>Esteban Gutierrez</name>
      <email>esteban@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>janh</id>
      <name>Jan Hentschel</name>
      <email>janh@apache.org</email>
      <timezone>+1</timezone>
    </developer>
    <developer>
      <id>jmhsieh</id>
      <name>Jonathan Hsieh</name>
      <email>jmhsieh@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>jxiang</id>
      <name>Jimmy Xiang</name>
      <email>jxiang@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>kannan</id>
      <name>Kannan Muthukkaruppan</name>
      <email>kannan@fb.com</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>karthik</id>
      <name>Karthik Ranganathan</name>
      <email>kranganathan@fb.com</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>larsfrancke</id>
      <name>Lars Francke</name>
      <email>larsfrancke@apache.org</email>
      <timezone>Europe/Berlin</timezone>
    </developer>
    <developer>
      <id>larsgeorge</id>
      <name>Lars George</name>
      <email>larsgeorge@apache.org</email>
      <timezone>+1</timezone>
    </developer>
    <developer>
      <id>larsh</id>
      <name>Lars Hofhansl</name>
      <email>larsh@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>liangxie</id>
      <name>Liang Xie</name>
      <email>liangxie@apache.org</email>
      <timezone>+8</timezone>
    </developer>
    <developer>
      <id>liushaohui</id>
      <name>Shaohui Liu</name>
      <email>liushaohui@apache.org</email>
      <timezone>+8</timezone>
    </developer>
    <developer>
      <id>liyin</id>
      <name>Liyin Tang</name>
      <email>liyin.tang@fb.com</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>liyu</id>
      <name>Yu Li</name>
      <email>liyu@apache.org</email>
      <timezone>+8</timezone>
    </developer>
    <developer>
      <id>mbautin</id>
      <name>Mikhail Bautin</name>
      <email>mbautin@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>mbertozzi</id>
      <name>Matteo Bertozzi</name>
      <email>mbertozzi@apache.org</email>
      <timezone>0</timezone>
    </developer>
    <developer>
      <id>mdrob</id>
      <name>Mike Drob</name>
      <email>mdrob@apache.org</email>
      <timezone>-5</timezone>
    </developer>
    <developer>
      <id>meszibalu</id>
      <name>Balazs Meszaros</name>
      <email>meszibalu@apache.org</email>
      <timezone>+1</timezone>
    </developer>
    <developer>
      <id>misty</id>
      <name>Misty Stanley-Jones</name>
      <email>misty@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>ndimiduk</id>
      <name>Nick Dimiduk</name>
      <email>ndimiduk@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>niuyulin</id>
      <name>Yulin Niu</name>
      <email>niuyulin@apache.org</email>
      <timezone>+8</timezone>
    </developer>
    <developer>
      <id>nkeywal</id>
      <name>Nicolas Liochon</name>
      <email>nkeywal@apache.org</email>
      <timezone>+1</timezone>
    </developer>
    <developer>
      <id>nspiegelberg</id>
      <name>Nicolas Spiegelberg</name>
      <email>nspiegelberg@fb.com</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>octo47</id>
      <name>Andrey Stepachev</name>
      <email>octo47@gmail.com</email>
      <timezone>0</timezone>
    </developer>
    <developer>
      <id>openinx</id>
      <name>Zheng Hu</name>
      <email>openinx@apache.org</email>
      <timezone>+8</timezone>
    </developer>
    <developer>
      <id>pankajkumar</id>
      <name>Pankaj Kumar</name>
      <email>pankajkumar@apache.org</email>
      <timezone>+5</timezone>
    </developer>
    <developer>
      <id>psomogyi</id>
      <name>Peter Somogyi</name>
      <email>psomogyi@apache.org</email>
      <timezone>+1</timezone>
    </developer>
    <developer>
      <id>rajeshbabu</id>
      <name>Rajeshbabu Chintaguntla</name>
      <email>rajeshbabu@apache.org</email>
      <timezone>+5</timezone>
    </developer>
    <developer>
      <id>ramkrishna</id>
      <name>Ramkrishna S Vasudevan</name>
      <email>ramkrishna@apache.org</email>
      <timezone>+5</timezone>
    </developer>
    <developer>
      <id>rawson</id>
      <name>Ryan Rawson</name>
      <email>rawson@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>reidchan</id>
      <name>Reid Chan</name>
      <email>reidchan@apache.org</email>
      <timezone>+8</timezone>
    </developer>
    <developer>
      <id>shahrs87</id>
      <name>Rushabh Shah</name>
      <email>shahrs87@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>sakthi</id>
      <name>Sakthi Vel</name>
      <email>sakthi@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>sershe</id>
      <name>Sergey Shelukhin</name>
      <email>sershe@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>ssrungarapu</id>
      <name>Srikanth Srungarapu</name>
      <email>ssrungarapu@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>stack</id>
      <name>Michael Stack</name>
      <email>stack@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>syuanjiang</id>
      <name>Stephen Yuan Jiang</name>
      <email>syuanjiang@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>taklwu</id>
      <name>Tak-Lon (Stephen) Wu</name>
      <email>taklwu@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>tedyu</id>
      <name>Ted Yu</name>
      <email>yuzhihong@gmail.com</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>tianjy</id>
      <email>tianjy@apache.org</email>
      <timezone>+8</timezone>
    </developer>
    <developer>
      <id>todd</id>
      <name>Todd Lipcon</name>
      <email>todd@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>toffer</id>
      <name>Francis Liu</name>
      <email>toffer@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>vikasv</id>
      <name>Vikas Vishwakarma</name>
      <email>vikasv@apache.org</email>
      <timezone>+5</timezone>
    </developer>
    <developer>
      <id>virag</id>
      <name>Virag Kothari</name>
      <email>virag@yahoo-inc.com</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>vjasani</id>
      <name>Viraj Jasani</name>
      <email>vjasani@apache.org</email>
      <timezone>+5</timezone>
    </developer>
    <developer>
      <id>water</id>
      <name>Xiang Li</name>
      <email>xiangli@apache.org</email>
      <timezone>+8</timezone>
    </developer>
    <developer>
      <id>wchevreuil</id>
      <name>Wellington Chevreuil</name>
      <email>wchevreuil@apache.org</email>
      <timezone>0</timezone>
    </developer>
    <developer>
      <id>weichiu</id>
      <name>Wei-Chiu Chuang</name>
      <email>weichiu@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>xucang</id>
      <name>Xu Cang</name>
      <email>xucang@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>yangzhe1991</id>
      <name>Phil Yang</name>
      <email>yangzhe1991@apache.org</email>
      <timezone>+8</timezone>
    </developer>
    <developer>
      <id>zghao</id>
      <name>Guanghao Zhang</name>
      <email>zghao@apache.org</email>
      <timezone>+8</timezone>
    </developer>
    <developer>
      <id>zhangduo</id>
      <name>Duo Zhang</name>
      <email>zhangduo@apache.org</email>
      <timezone>+8</timezone>
    </developer>
    <developer>
      <id>zhaobaiqiang</id>
      <name>Baiqiang Zhao</name>
      <email>zhaobaiqiang@apache.org</email>
      <timezone>+8</timezone>
    </developer>
    <developer>
      <id>zjushch</id>
      <name>Chunhui Shen</name>
      <email>zjushch@apache.org</email>
      <timezone>+8</timezone>
    </developer>
    <developer>
      <id>churro</id>
      <name>Rahul Gidwani</name>
      <email>churro@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>yiliang</id>
      <name>Yi Liang</name>
      <email>yiliang@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>zyork</id>
      <name>Zach York</name>
      <email>zyork@apache.org</email>
      <timezone>-8</timezone>
    </developer>
    <developer>
      <id>meiyi</id>
      <name>Yi Mei</name>
      <email>meiyi@apache.org</email>
      <timezone>+8</timezone>
    </developer>
    <developer>
      <id>wangzheng</id>
      <name>Zheng (bsglz) Wang</name>
      <email>wangzheng@apache.org</email>
      <timezone>+8</timezone>
    </developer>
    <developer>
      <id>sunxin</id>
      <name>Xin Sun</name>
      <email>sunxin@apache.org</email>
      <timezone>+8</timezone>
    </developer>
    <developer>
      <id>huangzhuoyue</id>
      <name>Zhuoyue Huang</name>
      <email>huangzhuoyue@apache.org</email>
      <timezone>+8</timezone>
    </developer>
    <developer>
      <id>xiaoyt</id>
      <name>Yutong Xiao</name>
      <email>xiaoyt@apache.org</email>
      <timezone>+8</timezone>
    </developer>
    <developer>
      <id>bbeaudreault</id>
      <name>Bryan Beaudreault</name>
      <email>bbeaudreault@apache.org</email>
      <timezone>-5</timezone>
    </developer>
    <developer>
      <id>heliangjun</id>
      <name>Liangjun He</name>
      <email>heliangjun@apache.org</email>
      <timezone>+8</timezone>
    </developer>
  </developers>
  <mailingLists>
    <mailingList>
      <name>User List</name>
      <subscribe>user-subscribe@hbase.apache.org</subscribe>
      <unsubscribe>user-unsubscribe@hbase.apache.org</unsubscribe>
      <post>user@hbase.apache.org</post>
      <archive>https://lists.apache.org/list.html?user@hbase.apache.org</archive>
      <otherArchives>
        <otherArchive>https://dir.gmane.org/gmane.comp.java.hadoop.hbase.user</otherArchive>
      </otherArchives>
    </mailingList>
    <mailingList>
      <name>Developer List</name>
      <subscribe>dev-subscribe@hbase.apache.org</subscribe>
      <unsubscribe>dev-unsubscribe@hbase.apache.org</unsubscribe>
      <post>dev@hbase.apache.org</post>
      <archive>https://lists.apache.org/list.html?dev@hbase.apache.org</archive>
      <otherArchives>
        <otherArchive>https://dir.gmane.org/gmane.comp.java.hadoop.hbase.devel</otherArchive>
      </otherArchives>
    </mailingList>
    <mailingList>
      <name>Commits List</name>
      <subscribe>commits-subscribe@hbase.apache.org</subscribe>
      <unsubscribe>commits-unsubscribe@hbase.apache.org</unsubscribe>
      <archive>https://lists.apache.org/list.html?commits@hbase.apache.org</archive>
    </mailingList>
    <mailingList>
      <name>Issues List</name>
      <subscribe>issues-subscribe@hbase.apache.org</subscribe>
      <unsubscribe>issues-unsubscribe@hbase.apache.org</unsubscribe>
      <archive>https://lists.apache.org/list.html?issues@hbase.apache.org</archive>
    </mailingList>
    <mailingList>
      <name>Builds List</name>
      <subscribe>builds-subscribe@hbase.apache.org</subscribe>
      <unsubscribe>builds-unsubscribe@hbase.apache.org</unsubscribe>
      <archive>https://lists.apache.org/list.html?builds@hbase.apache.org</archive>
    </mailingList>
    <mailingList>
      <name>User (ZH) List</name>
      <subscribe>user-zh-subscribe@hbase.apache.org</subscribe>
      <unsubscribe>user-zh-unsubscribe@hbase.apache.org</unsubscribe>
      <post>user-zh@hbase.apache.org</post>
      <archive>https://lists.apache.org/list.html?user-zh@hbase.apache.org</archive>
    </mailingList>
  </mailingLists>

  <modules>
    <module>hbase-build-configuration</module>
    <module>hbase-replication</module>
    <module>hbase-balancer</module>
    <module>hbase-mapreduce</module>
    <module>hbase-resource-bundle</module>
    <module>hbase-http</module>
    <module>hbase-server</module>
    <module>hbase-thrift</module>
    <module>hbase-shell</module>
    <module>hbase-protocol-shaded</module>
    <module>hbase-client</module>
    <module>hbase-hadoop-compat</module>
    <module>hbase-common</module>
    <module>hbase-procedure</module>
    <module>hbase-endpoint</module>
    <module>hbase-it</module>
    <module>hbase-examples</module>
    <module>hbase-assembly</module>
    <module>hbase-testing-util</module>
    <module>hbase-annotations</module>
    <module>hbase-rest</module>
    <module>hbase-checkstyle</module>
    <module>hbase-external-blockcache</module>
    <module>hbase-shaded</module>
    <module>hbase-archetypes</module>
    <module>hbase-metrics-api</module>
    <module>hbase-metrics</module>
    <module>hbase-backup</module>
    <module>hbase-zookeeper</module>
    <module>hbase-hbtop</module>
    <module>hbase-asyncfs</module>
    <module>hbase-logging</module>
    <module>hbase-compression</module>
  </modules>
  <scm>
    <connection>scm:git:git://gitbox.apache.org/repos/asf/hbase.git</connection>
    <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/hbase.git</developerConnection>
    <url>https://gitbox.apache.org/repos/asf?p=hbase.git</url>
  </scm>
  <issueManagement>
    <system>JIRA</system>
    <url>https://issues.apache.org/jira/browse/HBASE</url>
  </issueManagement>
  <distributionManagement>
    <site>
      <id>hbase.apache.org</id>
      <name>HBase Website at hbase.apache.org</name>
      <!-- On why this is the tmp dir and not hbase.apache.org, see
        https://issues.apache.org/jira/browse/HBASE-7593?focusedCommentId=13555866&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13555866
       -->
      <url>file:///tmp</url>
    </site>
  </distributionManagement>
  <properties>
    <revision>3.0.0-alpha-4-SNAPSHOT</revision>
    <!-- override on command line to have generated LICENSE files include
         diagnostic info for verifying notice requirements -->
    <license.debug.print.included>false</license.debug.print.included>
    <!-- When a particular module bundles its depenendencies, should be true -->
    <license.bundles.dependencies>false</license.bundles.dependencies>
    <!-- modules that include a the logo in their source tree should set true -->
    <license.bundles.logo>false</license.bundles.logo>
    <!-- modules that include bootstrap in their source tree should set true -->
    <license.bundles.bootstrap>false</license.bundles.bootstrap>
    <!-- modules that include jquery in their source tree should set true -->
    <license.bundles.jquery>false</license.bundles.jquery>
    <!-- modules that include vega in their source tree should set true -->
    <license.bundles.vega>false</license.bundles.vega>
    <tar.name>${project.build.finalName}.tar.gz</tar.name>
    <maven.build.timestamp.format>yyyy-MM-dd'T'HH:mm</maven.build.timestamp.format>
    <buildDate>${maven.build.timestamp}</buildDate>
    <compileSource>1.8</compileSource>
    <releaseTarget>8</releaseTarget>
    <!-- Build dependencies -->
    <!-- The $revision feature is introduced in 3.5.0 -->
    <maven.min.version>3.5.0</maven.min.version>
    <java.min.version>${compileSource}</java.min.version>
    <!-- Dependencies -->
    <hadoop-three.version>3.2.4</hadoop-three.version>
    <!-- These must be defined here for downstream build tools that don't look at profiles.
    -->
    <hadoop.version>${hadoop-three.version}</hadoop.version>
    <assembly.file>src/main/assembly/hadoop-three-compat.xml</assembly.file>
    <!--This property is for hadoops netty. HBase netty
         comes in via hbase-thirdparty hbase-shaded-netty-->
    <netty.hadoop.version>3.10.5.Final</netty.hadoop.version>
    <!-- end HBASE-15925 default hadoop compatibility values -->
    <audience-annotations.version>0.13.0</audience-annotations.version>
    <!--
      The version used when generating javadoc, 0.13.0 is the latest version which supports jdk8.
      When building with jdk11, we will use 0.14.1, please see the build-with-jdk11 profile.
    -->
    <javadoc.audience-annotations.version>0.13.0</javadoc.audience-annotations.version>
    <avro.version>1.11.0</avro.version>
    <caffeine.version>2.8.1</caffeine.version>
    <commons-codec.version>1.15</commons-codec.version>
    <commons-validator.version>1.6</commons-validator.version>
    <commons-io.version>2.11.0</commons-io.version>
    <commons-lang3.version>3.9</commons-lang3.version>
    <commons-math.version>3.6.1</commons-math.version>
    <disruptor.version>3.4.2</disruptor.version>
    <httpclient.version>4.5.13</httpclient.version>
    <httpcore.version>4.4.13</httpcore.version>
    <metrics-core.version>3.2.6</metrics-core.version>
    <jackson.version>2.14.1</jackson.version>
    <jackson.databind.version>2.14.1</jackson.databind.version>
    <jaxb-api.version>2.3.1</jaxb-api.version>
    <servlet.api.version>3.1.0</servlet.api.version>
    <wx.rs.api.version>2.1.1</wx.rs.api.version>
    <glassfish.jsp.version>2.3.2</glassfish.jsp.version>
    <glassfish.el.version>3.0.1-b08</glassfish.el.version>
    <jruby.version>9.3.9.0</jruby.version>
    <junit.version>4.13.2</junit.version>
    <hamcrest.version>1.3</hamcrest.version>
    <opentelemetry.version>1.15.0</opentelemetry.version>
    <opentelemetry-javaagent.version>1.15.0</opentelemetry-javaagent.version>
    <log4j2.version>2.17.2</log4j2.version>
    <mockito.version>4.11.0</mockito.version>
    <protobuf.plugin.version>0.6.1</protobuf.plugin.version>
    <thrift.path>thrift</thrift.path>
    <thrift.version>0.14.1</thrift.version>
    <zookeeper.version>3.5.7</zookeeper.version>
    <jline.version>2.11</jline.version>
    <slf4j.version>1.7.30</slf4j.version>
    <clover.version>4.0.3</clover.version>
    <jamon-runtime.version>2.4.1</jamon-runtime.version>
    <jettison.version>1.5.2</jettison.version>
    <!--Make sure these joni/jcodings are compatible with the versions used by jruby-->
    <joni.version>2.1.43</joni.version>
    <jcodings.version>1.0.57</jcodings.version>
    <spy.version>2.12.2</spy.version>
    <bouncycastle.version>1.70</bouncycastle.version>
    <skyscreamer.version>1.5.1</skyscreamer.version>
    <kerby.version>1.0.1</kerby.version>
    <commons-crypto.version>1.1.0</commons-crypto.version>
    <curator.version>4.2.0</curator.version>
    <!-- Plugin Dependencies -->
    <asciidoctor.plugin.version>2.2.2</asciidoctor.plugin.version>
    <asciidoctorj.pdf.version>2.0.6</asciidoctorj.pdf.version>
    <build.helper.maven.version>3.0.0</build.helper.maven.version>
    <buildnumber.maven.version>1.4</buildnumber.maven.version>
    <!--
      When updating checkstyle.version, please make the same change in `.idea/checkstyle-idea.xml`
    -->
    <checkstyle.version>8.29</checkstyle.version>
    <exec.maven.version>1.6.0</exec.maven.version>
    <error-prone.version>2.16</error-prone.version>
    <jamon.plugin.version>2.4.2</jamon.plugin.version>
    <lifecycle.mapping.version>1.0.0</lifecycle.mapping.version>
    <maven.antrun.version>1.8</maven.antrun.version>
    <maven.bundle.version>3.3.0</maven.bundle.version>
    <maven.checkstyle.version>3.1.0</maven.checkstyle.version>
    <maven.eclipse.version>2.10</maven.eclipse.version>
    <maven.gpg.version>3.0.1</maven.gpg.version>
    <maven.javadoc.version>3.4.0</maven.javadoc.version>
    <maven.warbucks.version>1.1.0</maven.warbucks.version>
    <maven.project.info.report.version>3.1.2</maven.project.info.report.version>
    <os.maven.version>1.5.0.Final</os.maven.version>
    <findbugs-annotations.version>1.3.9-1</findbugs-annotations.version>
    <spotbugs.version>4.7.3</spotbugs.version>
    <spotbugs.maven.version>4.7.2.1</spotbugs.maven.version>
    <surefire.version>3.0.0-M6</surefire.version>
    <wagon.ssh.version>2.12</wagon.ssh.version>
    <xml.maven.version>1.0.1</xml.maven.version>
    <spotless.version>2.27.2</spotless.version>
    <maven-site.version>3.12.0</maven-site.version>
    <!-- compression -->
    <aircompressor.version>0.21</aircompressor.version>
    <brotli4j.version>1.8.0</brotli4j.version>
    <lz4.version>1.8.0</lz4.version>
    <snappy.version>1.1.8.4</snappy.version>
    <xz.version>1.9</xz.version>
    <zstd-jni.version>1.5.0-4</zstd-jni.version>
    <hbase-thirdparty.version>4.1.4</hbase-thirdparty.version>
    <!-- Intraproject jar naming properties -->
    <!-- TODO this is pretty ugly, but works for the moment.
      Modules are pretty heavy-weight things, so doing this work isn't too bad. -->
    <server.test.jar>hbase-server-${project.version}-tests.jar</server.test.jar>
    <common.test.jar>hbase-common-${project.version}-tests.jar</common.test.jar>
    <procedure.test.jar>hbase-procedure-${project.version}-tests.jar</procedure.test.jar>
    <it.test.jar>hbase-it-${project.version}-tests.jar</it.test.jar>
    <annotations.test.jar>hbase-annotations-${project.version}-tests.jar</annotations.test.jar>
    <mapreduce.test.jar>hbase-mapreduce-${project.version}-tests.jar</mapreduce.test.jar>
    <zookeeper.test.jar>hbase-zookeeper-${project.version}-tests.jar</zookeeper.test.jar>
    <asyncfs.test.jar>hbase-asyncfs-${project.version}-tests.jar</asyncfs.test.jar>
    <shell-executable>bash</shell-executable>
    <surefire.provider>surefire-junit47</surefire.provider>
    <!-- default: run small & medium, medium with 2 threads -->
    <surefire.skipFirstPart>false</surefire.skipFirstPart>
    <surefire.skipSecondPart>false</surefire.skipSecondPart>
    <!-- Fork count varies w/ CPU count. Setting is conservative mostly determined
        by what apache jenkins nightly builds will tolerate (See HBASE-24072). Up this
      value is you want to burn through tests faster (could make for more failures
      if more contention around resources). There is a matching MAVEN_ARG
      in our yetus personality where we set the maven -T command to 0.25C too.
      For example, to run at a rate that is more furious than our 0.25C, do
      something like this:
         f="0.5C" ;  mvn -T$f -Dsurefire.firstPartForkCount=$f -Dsurefire.secondPartForkCount=$f test -PrunAllTests
    -->
    <surefire.firstPartForkCount>0.25C</surefire.firstPartForkCount>
    <surefire.secondPartForkCount>0.25C</surefire.secondPartForkCount>
    <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.SmallTests</surefire.firstPartGroups>
    <surefire.secondPartGroups>org.apache.hadoop.hbase.testclassification.MediumTests</surefire.secondPartGroups>
    <surefire.testFailureIgnore>false</surefire.testFailureIgnore>
    <test.output.tofile>true</test.output.tofile>
    <surefire.timeout>900</surefire.timeout>
    <test.exclude.pattern/>
    <!--
      Use -Dsurefire.Xmx=xxg to run tests with different JVM Xmx value.
      This value is managed separately for jdk11. See below.
    -->
    <surefire.Xmx>2200m</surefire.Xmx>
    <surefire.cygwinXmx>2200m</surefire.cygwinXmx>
    <!--Mark our test runs with '-Dhbase.build.id' so we can identify a surefire test as ours in a process listing

      And for netty eventloops that have no explicit configuration, netty sets
      nioeventloopgroup thread count to CPU count * 2. Thats too much for mini
      clusters/tests.
     -->
    <hbase-surefire.argLine>-enableassertions -Dhbase.build.id=${build.id} -Xmx${surefire.Xmx}
      -Djava.security.egd=file:/dev/./urandom -Djava.net.preferIPv4Stack=true
      -Djava.awt.headless=true -Djdk.net.URLClassPath.disableClassPathURLCheck=true
      -Dorg.apache.hbase.thirdparty.io.netty.leakDetection.level=advanced
      -Dio.netty.eventLoopThreads=3 -Dio.opentelemetry.context.enableStrictContext=true</hbase-surefire.argLine>
    <hbase-surefire.cygwin-argLine>-enableassertions -Xmx${surefire.cygwinXmx}
      -Djava.security.egd=file:/dev/./urandom -Djava.net.preferIPv4Stack=true
      "-Djava.library.path=${hadoop.library.path};${java.library.path}"
      -Dorg.apache.hbase.thirdparty.io.netty.leakDetection.level=advanced
      -Dio.opentelemetry.context.enableStrictContext=true</hbase-surefire.cygwin-argLine>
    <!-- Surefire argLine defaults to Linux, cygwin argLine is used in the os.windows profile -->
    <argLine>${hbase-surefire.argLine}</argLine>
    <jacoco.version>0.7.5.201505241946</jacoco.version>
    <extra.enforcer.version>1.5.1</extra.enforcer.version>
    <enforcer.version>3.0.0</enforcer.version>
    <restrict-imports.enforcer.version>0.14.0</restrict-imports.enforcer.version>
    <!-- Location of test resources -->
    <test.build.classes>${project.build.directory}/test-classes</test.build.classes>
    <test.tmp.dir>${project.build.directory}</test.tmp.dir>
    <maven.build.timestamp.format>yyyy-MM-dd'T'HH:mm:ss'Z'</maven.build.timestamp.format>
    <!--This build.id we'll add as flag so can identify which forked processes belong to our build.
        Default is the build start timestamp. Up on jenkins pass in the jenkins build id by setting
        this parameter by invoking mvn with -Dbuild.id=$BUILD_ID-->
    <build.id>${maven.build.timestamp}</build.id>
    <shell-executable>bash</shell-executable>
    <!-- Still need this to ignore some errors when building javadoc-->
    <doclint>none</doclint>
  </properties>
  <!-- Sorted by groups of dependencies then groupId and artifactId -->
  <dependencyManagement>
    <dependencies>
      <!--
      Note: There are a few exclusions to prevent duplicate code in different jars to be included:
          org.mortbay.jetty:servlet-api, javax.servlet:servlet-api: These are excluded because they are
          the same implementations. I chose org.mortbay.jetty:servlet-api-2.5 instead, which is a third
          implementation of the same, because Hadoop also uses this version
          javax.servlet:jsp-api in favour of javax.servlet.jsp:javax.servlet.jsp-api:2.3.1 since it
          is what glassfish's jspC jar uses and that's where we get our own need for a jsp-api.
        -->
      <!-- Intra-module dependencies -->
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-annotations</artifactId>
        <version>${project.version}</version>
        <type>test-jar</type>
        <!--Was test scope only but if we want to run hbase-it tests, need the annotations test jar-->
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-backup</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-common</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-common</artifactId>
        <version>${project.version}</version>
        <type>test-jar</type>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-logging</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-logging</artifactId>
        <version>${project.version}</version>
        <type>test-jar</type>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-protocol-shaded</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-procedure</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-procedure</artifactId>
        <version>${project.version}</version>
        <type>test-jar</type>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-hadoop-compat</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-hadoop-compat</artifactId>
        <version>${project.version}</version>
        <type>test-jar</type>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-replication</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-balancer</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-balancer</artifactId>
        <version>${project.version}</version>
        <type>test-jar</type>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-http</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-http</artifactId>
        <version>${project.version}</version>
        <type>test-jar</type>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-server</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-server</artifactId>
        <version>${project.version}</version>
        <type>test-jar</type>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-mapreduce</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-mapreduce</artifactId>
        <version>${project.version}</version>
        <type>test-jar</type>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-endpoint</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-shell</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-shell</artifactId>
        <version>${project.version}</version>
        <type>test-jar</type>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-thrift</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-thrift</artifactId>
        <version>${project.version}</version>
        <type>test-jar</type>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-testing-util</artifactId>
        <version>${project.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-examples</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-external-blockcache</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-it</artifactId>
        <version>${project.version}</version>
        <type>test-jar</type>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-client</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-client</artifactId>
        <version>${project.version}</version>
        <type>test-jar</type>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-metrics-api</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-metrics-api</artifactId>
        <version>${project.version}</version>
        <type>test-jar</type>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-metrics</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-metrics</artifactId>
        <version>${project.version}</version>
        <type>test-jar</type>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-rest</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-resource-bundle</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-zookeeper</artifactId>
        <version>${project.version}</version>
        <exclusions>
          <exclusion>
            <groupId>com.google.code.findbugs</groupId>
            <artifactId>jsr305</artifactId>
          </exclusion>
          <exclusion>
            <groupId>com.github.spotbugs</groupId>
            <artifactId>spotbugs-annotations</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-zookeeper</artifactId>
        <version>${project.version}</version>
        <type>test-jar</type>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-hbtop</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-shaded-client</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-shaded-client-byo-hadoop</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-shaded-mapreduce</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-asyncfs</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-asyncfs</artifactId>
        <version>${project.version}</version>
        <type>test-jar</type>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-compression-aircompressor</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-compression-brotli</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-compression-lz4</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-compression-snappy</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-compression-xz</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-compression-zstd</artifactId>
        <version>${project.version}</version>
      </dependency>
      <!-- General dependencies -->
      <dependency>
        <groupId>com.github.stephenc.findbugs</groupId>
        <artifactId>findbugs-annotations</artifactId>
        <version>${findbugs-annotations.version}</version>
      </dependency>
      <!--
        Logging dependencies. In general, we use slf4j as the log facade in HBase, so all sub
        modules should depend on slf4j-api at compile scope, and then depend on log4j-slf4j-impl
        and log4j2 at test scope(and in hbase-assembly when shipping the binary) to redirect the
        log message to log4j. Do not introduce logging dependencies other than slf4j-api at compile
        scope as it will mess up the logging framework for downstream users.
        Here we also depend on jcl-over-slf4j and jul-to-slf4j, as some of the libraries we depend
        on use these logging framework so we need to redirect their log message to slf4j, and then
        redirect the log message to our log4j framework.
      -->
      <dependency>
        <groupId>org.codehaus.jettison</groupId>
        <artifactId>jettison</artifactId>
        <version>${jettison.version}</version>
      </dependency>
      <!-- Logging -->
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
      </dependency>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>${slf4j.version}</version>
      </dependency>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jul-to-slf4j</artifactId>
        <version>${slf4j.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-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.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>${log4j2.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-1.2-api</artifactId>
        <version>${log4j2.version}</version>
      </dependency>
      <!-- Avro dependencies we mostly get transitively, manual version coallescing -->
      <dependency>
        <groupId>org.apache.avro</groupId>
        <artifactId>avro</artifactId>
        <version>${avro.version}</version>
      </dependency>
      <dependency>
        <groupId>com.github.ben-manes.caffeine</groupId>
        <artifactId>caffeine</artifactId>
        <version>${caffeine.version}</version>
      </dependency>
      <dependency>
        <groupId>io.dropwizard.metrics</groupId>
        <artifactId>metrics-core</artifactId>
        <version>${metrics-core.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>${httpclient.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpcore</artifactId>
        <version>${httpcore.version}</version>
      </dependency>
      <dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
        <version>${commons-codec.version}</version>
      </dependency>
      <dependency>
        <groupId>commons-validator</groupId>
        <artifactId>commons-validator</artifactId>
        <version>${commons-validator.version}</version>
      </dependency>
      <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>${commons-io.version}</version>
      </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-math.version}</version>
      </dependency>
      <dependency>
        <!-- commons-logging is only used by hbase-http's HttpRequestLog and hbase-server's
             HBaseTestingUtil.
          -->
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.2</version>
      </dependency>
      <dependency>
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
        <version>${zookeeper.version}</version>
        <exclusions>
          <exclusion>
            <groupId>com.google.code.findbugs</groupId>
            <artifactId>jsr305</artifactId>
          </exclusion>
          <exclusion>
            <groupId>com.github.spotbugs</groupId>
            <artifactId>spotbugs-annotations</artifactId>
          </exclusion>
          <exclusion>
            <groupId>jline</groupId>
            <artifactId>jline</artifactId>
          </exclusion>
          <exclusion>
            <groupId>com.sun.jmx</groupId>
            <artifactId>jmxri</artifactId>
          </exclusion>
          <exclusion>
            <groupId>com.sun.jdmk</groupId>
            <artifactId>jmxtools</artifactId>
          </exclusion>
          <exclusion>
            <groupId>javax.jms</groupId>
            <artifactId>jms</artifactId>
          </exclusion>
          <exclusion>
            <groupId>io.netty</groupId>
            <artifactId>netty</artifactId>
          </exclusion>
          <exclusion>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
          </exclusion>
          <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>jline</groupId>
        <artifactId>jline</artifactId>
        <version>${jline.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.thrift</groupId>
        <artifactId>libthrift</artifactId>
        <version>${thrift.version}</version>
        <exclusions>
          <exclusion>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-core</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.jruby</groupId>
        <artifactId>jruby-complete</artifactId>
        <version>${jruby.version}</version>
      </dependency>
      <dependency>
        <groupId>org.jruby.jcodings</groupId>
        <artifactId>jcodings</artifactId>
        <version>${jcodings.version}</version>
      </dependency>
      <dependency>
        <groupId>org.jruby.joni</groupId>
        <artifactId>joni</artifactId>
        <version>${joni.version}</version>
      </dependency>
      <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>${jackson.version}</version>
      </dependency>
      <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>${jackson.version}</version>
      </dependency>
      <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>${jackson.databind.version}</version>
      </dependency>
      <dependency>
        <groupId>org.jamon</groupId>
        <artifactId>jamon-runtime</artifactId>
        <version>${jamon-runtime.version}</version>
      </dependency>
      <!-- REST dependencies -->
      <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>${servlet.api.version}</version>
      </dependency>
      <dependency>
        <groupId>javax.ws.rs</groupId>
        <artifactId>javax.ws.rs-api</artifactId>
        <version>${wx.rs.api.version}</version>
      </dependency>
      <dependency>
        <groupId>com.sun.activation</groupId>
        <artifactId>javax.activation</artifactId>
        <version>1.2.0</version>
      </dependency>
      <dependency>
        <groupId>javax.annotation</groupId>
        <artifactId>javax.annotation-api</artifactId>
        <version>1.2</version>
      </dependency>
      <dependency>
        <!--This lib has JspC in it. Needed precompiling jsps in hbase-rest, etc.-->
        <groupId>org.glassfish.web</groupId>
        <artifactId>javax.servlet.jsp</artifactId>
        <version>${glassfish.jsp.version}</version>
      </dependency>
      <dependency>
        <!-- this lib is used by the compiled Jsp from the above JspC -->
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>javax.servlet.jsp-api</artifactId>
        <version>2.3.1</version>
      </dependency>
      <dependency>
        <groupId>org.glassfish</groupId>
        <artifactId>javax.el</artifactId>
        <version>${glassfish.el.version}</version>
      </dependency>
      <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>${jaxb-api.version}</version>
        <exclusions>
          <exclusion>
            <groupId>javax.xml.stream</groupId>
            <artifactId>stax-api</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit.version}</version>
      </dependency>
      <dependency>
        <groupId>org.hamcrest</groupId>
        <artifactId>hamcrest-core</artifactId>
        <version>${hamcrest.version}</version>
      </dependency>
      <dependency>
        <groupId>org.hamcrest</groupId>
        <artifactId>hamcrest-library</artifactId>
        <version>${hamcrest.version}</version>
      </dependency>
      <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-bom</artifactId>
        <version>${mockito.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-bom</artifactId>
        <version>${opentelemetry.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-semconv</artifactId>
        <version>${opentelemetry.version}-alpha</version>
      </dependency>
      <dependency>
        <groupId>io.opentelemetry.javaagent</groupId>
        <artifactId>opentelemetry-javaagent</artifactId>
        <version>${opentelemetry-javaagent.version}</version>
      </dependency>
      <dependency>
        <groupId>com.lmax</groupId>
        <artifactId>disruptor</artifactId>
        <version>${disruptor.version}</version>
      </dependency>
      <dependency>
        <groupId>net.spy</groupId>
        <artifactId>spymemcached</artifactId>
        <version>${spy.version}</version>
        <optional>true</optional>
      </dependency>
      <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcprov-jdk15on</artifactId>
        <version>${bouncycastle.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.skyscreamer</groupId>
        <artifactId>jsonassert</artifactId>
        <version>${skyscreamer.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcpkix-jdk15on</artifactId>
        <version>${bouncycastle.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.apache.kerby</groupId>
        <artifactId>kerb-core</artifactId>
        <version>${kerby.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.kerby</groupId>
        <artifactId>kerb-client</artifactId>
        <version>${kerby.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.kerby</groupId>
        <artifactId>kerb-simplekdc</artifactId>
        <version>${kerby.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-crypto</artifactId>
        <version>${commons-crypto.version}</version>
        <exclusions>
          <exclusion>
            <groupId>net.java.dev.jna</groupId>
            <artifactId>jna</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-framework</artifactId>
        <version>${curator.version}</version>
        <exclusions>
          <exclusion>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-client</artifactId>
        <version>${curator.version}</version>
        <exclusions>
          <exclusion>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-recipes</artifactId>
        <version>${curator.version}</version>
        <exclusions>
          <exclusion>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.apache.yetus</groupId>
        <artifactId>audience-annotations</artifactId>
        <version>${audience-annotations.version}</version>
      </dependency>
      <!-- compression -->
      <dependency>
        <groupId>io.airlift</groupId>
        <artifactId>aircompressor</artifactId>
        <version>${aircompressor.version}</version>
      </dependency>
      <dependency>
        <groupId>org.lz4</groupId>
        <artifactId>lz4-java</artifactId>
        <version>${lz4.version}</version>
      </dependency>
      <dependency>
        <groupId>org.tukaani</groupId>
        <artifactId>xz</artifactId>
        <version>${xz.version}</version>
      </dependency>
      <dependency>
        <groupId>org.xerial.snappy</groupId>
        <artifactId>snappy-java</artifactId>
        <version>${snappy.version}</version>
      </dependency>
      <dependency>
        <groupId>com.github.luben</groupId>
        <artifactId>zstd-jni</artifactId>
        <version>${zstd-jni.version}</version>
      </dependency>
      <!-- shaded thirdparty -->
      <dependency>
        <groupId>org.apache.hbase.thirdparty</groupId>
        <artifactId>hbase-shaded-gson</artifactId>
        <version>${hbase-thirdparty.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase.thirdparty</groupId>
        <artifactId>hbase-shaded-miscellaneous</artifactId>
        <version>${hbase-thirdparty.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase.thirdparty</groupId>
        <artifactId>hbase-shaded-netty</artifactId>
        <version>${hbase-thirdparty.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase.thirdparty</groupId>
        <artifactId>hbase-shaded-protobuf</artifactId>
        <version>${hbase-thirdparty.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase.thirdparty</groupId>
        <artifactId>hbase-shaded-jetty</artifactId>
        <version>${hbase-thirdparty.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase.thirdparty</groupId>
        <artifactId>hbase-shaded-jersey</artifactId>
        <version>${hbase-thirdparty.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase.thirdparty</groupId>
        <artifactId>hbase-shaded-jackson-jaxrs-json-provider</artifactId>
        <version>${hbase-thirdparty.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase.thirdparty</groupId>
        <artifactId>hbase-unsafe</artifactId>
        <version>${hbase-thirdparty.version}</version>
      </dependency>
      <dependency>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>jaxws-ri</artifactId>
        <version>2.3.2</version>
        <type>pom</type>
        <exclusions>
          <exclusion>
            <groupId>javax.activation</groupId>
            <artifactId>javax.activation-api</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <dependencies>
    <!--REMOVE THIS. HERE TEMPORARILY.
         Implication is that every module needs junit which is not so.
         Cannot undo though because build runs test on each module and
         it fails if no junit. TODO. -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <build>
    <!-- Plugin versions are inherited from ASF parent pom: https://maven.apache.org/pom/asf/
         For specific version use a property and define it in the parent pom.
     -->
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-remote-resources-plugin</artifactId>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-release-plugin</artifactId>
          <configuration>
            <!--You need this profile. It'll sign your artifacts.
                I'm not sure if this config. actually works though.
                I've been specifying -Papache-release on the command-line
             -->
            <releaseProfiles>apache-release</releaseProfiles>
            <!--This stops our running tests for each stage of maven release.
                But it builds the test jar.  From SUREFIRE-172.
              -->
            <arguments>-Dmaven.test.skip.exec ${arguments}</arguments>
            <goals>${goals}</goals>
            <pomFileName>pom.xml</pomFileName>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <configuration>
            <showWarnings>true</showWarnings>
            <showDeprecation>false</showDeprecation>
            <useIncrementalCompilation>false</useIncrementalCompilation>
            <compilerArgument>-Xlint:-options</compilerArgument>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>${maven.javadoc.version}</version>
          <configuration>
            <source>${compileSource}</source>
          </configuration>
        </plugin>
        <!-- Test oriented plugins -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>${surefire.version}</version>
          <!-- Generic testing configuration for all packages -->
          <configuration>
            <groups>${surefire.firstPartGroups}</groups>
            <failIfNoTests>false</failIfNoTests>
            <failIfNoSpecifiedTests>false</failIfNoSpecifiedTests>
            <trimStackTrace>false</trimStackTrace>
            <skip>${surefire.skipFirstPart}</skip>
            <forkCount>${surefire.firstPartForkCount}</forkCount>
            <!--
              The counter in HBaseTestAppender will be broken if we set reuseForks to true, be
              careful when you want to change this value. See HBASE-26947 for more details.
            -->
            <reuseForks>false</reuseForks>
            <reportsDirectory>${surefire.reportsDirectory}</reportsDirectory>
            <tempDir>${surefire.tempDir}</tempDir>
            <testFailureIgnore>${surefire.testFailureIgnore}</testFailureIgnore>
            <forkedProcessTimeoutInSeconds>${surefire.timeout}</forkedProcessTimeoutInSeconds>
            <redirectTestOutputToFile>${test.output.tofile}</redirectTestOutputToFile>
            <systemPropertyVariables>
              <test.build.classes>${test.build.classes}</test.build.classes>
              <java.io.tmpdir>${test.tmp.dir}</java.io.tmpdir>
              <java.util.logging.config.class>org.apache.hadoop.hbase.logging.JulToSlf4jInitializer</java.util.logging.config.class>
            </systemPropertyVariables>
            <excludes>
              <!-- users can add -D option to skip particular test classes
             ex: mvn test -Dtest.exclude.pattern=**/TestFoo.java,**/TestBar.java
              -->
              <exclude>${test.exclude.pattern}</exclude>
            </excludes>
            <properties>
              <property>
                <name>listener</name>
                <value>org.apache.hadoop.hbase.TimedOutTestsListener,org.apache.hadoop.hbase.HBaseClassTestRuleChecker,org.apache.hadoop.hbase.ResourceCheckerJUnitListener</value>
              </property>
            </properties>
          </configuration>
          <dependencies>
            <!-- by default surefire selects dynamically the connector to the unit tests
              tool. We want to use always the same as the different connectors can have different
              bugs and behaviour. -->
            <dependency>
              <groupId>org.apache.maven.surefire</groupId>
              <artifactId>${surefire.provider}</artifactId>
              <version>${surefire.version}</version>
            </dependency>
          </dependencies>
          <executions>
            <execution>
              <id>secondPartTestsExecution</id>
              <goals>
                <goal>test</goal>
              </goals>
              <phase>test</phase>
              <configuration>
                <skip>${surefire.skipSecondPart}</skip>
                <testFailureIgnore>${surefire.testFailureIgnore}</testFailureIgnore>
                <!--
                  The counter in HBaseTestAppender will be broken if we set reuseForks to true, be
                  careful when you want to change this value. See HBASE-26947 for more details.
                -->
                <reuseForks>false</reuseForks>
                <forkCount>${surefire.secondPartForkCount}</forkCount>
                <groups>${surefire.secondPartGroups}</groups>
                <forkedProcessTimeoutInSeconds>${surefire.timeout}</forkedProcessTimeoutInSeconds>
              </configuration>
            </execution>
          </executions>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-report-plugin</artifactId>
          <version>${surefire.version}</version>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>buildnumber-maven-plugin</artifactId>
          <version>${buildnumber.maven.version}</version>
        </plugin>
        <plugin>
          <groupId>com.github.spotbugs</groupId>
          <artifactId>spotbugs-maven-plugin</artifactId>
          <version>${spotbugs.maven.version}</version>
          <configuration>
            <excludeFilterFile>${project.basedir}/../dev-support/spotbugs-exclude.xml</excludeFilterFile>
            <spotbugsXmlOutput>true</spotbugsXmlOutput>
            <xmlOutput>true</xmlOutput>
            <effort>Max</effort>
          </configuration>
          <dependencies>
            <!-- overwrite dependency on spotbugs if you want to specify the version of spotbugs -->
            <dependency>
              <groupId>com.github.spotbugs</groupId>
              <artifactId>spotbugs</artifactId>
              <version>${spotbugs.version}</version>
            </dependency>
          </dependencies>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>build-helper-maven-plugin</artifactId>
          <version>${build.helper.maven.version}</version>
        </plugin>
        <plugin>
          <artifactId>maven-antrun-plugin</artifactId>
          <version>${maven.antrun.version}</version>
        </plugin>
        <plugin>
          <groupId>org.jamon</groupId>
          <artifactId>jamon-maven-plugin</artifactId>
          <version>${jamon.plugin.version}</version>
        </plugin>
        <!-- Make a jar and put the sources in the jar.
        In the parent pom, so submodules will do the right thing. -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-source-plugin</artifactId>
          <executions>
            <execution>
              <id>attach-sources</id>
              <goals>
                <goal>jar-no-fork</goal>
                <goal>test-jar-no-fork</goal>
              </goals>
              <phase>prepare-package</phase>
              <configuration>
                <excludes>
                  <exclude>log4j2.xml</exclude>
                </excludes>
              </configuration>
            </execution>
          </executions>
        </plugin>
        <!-- General configuration for submodules who want to build a test jar -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <configuration>
            <skipIfEmpty>true</skipIfEmpty>
            <excludes>
              <exclude>hbase-site.xml</exclude>
              <exclude>hdfs-site.xml</exclude>
              <exclude>mapred-queues.xml</exclude>
              <exclude>mapred-site.xml</exclude>
            </excludes>
          </configuration>
          <executions>
            <execution>
              <goals>
                <!--This goal will install a -test.jar when we do install
                      See https://maven.apache.org/guides/mini/guide-attached-tests.html
                   -->
                <goal>test-jar</goal>
              </goals>
              <phase>prepare-package</phase>
            </execution>
          </executions>
        </plugin>
        <plugin>
          <!-- excludes are inherited -->
          <groupId>org.apache.rat</groupId>
          <artifactId>apache-rat-plugin</artifactId>
          <configuration>
            <excludes>
              <exclude>**/*.versionsBackup</exclude>
              <exclude>**/*.log</exclude>
              <exclude>**/.*</exclude>
              <exclude>**/*.tgz</exclude>
              <exclude>**/*.orig</exclude>
              <exclude>**/0000000000000016310</exclude>
              <exclude>**/a6a6562b777440fd9c34885428f5cb61.21e75333ada3d5bafb34bb918f29576c</exclude>
              <exclude>**/8e8ab58dcf39412da19833fcd8f687ac</exclude>
              <exclude>**/.idea/**</exclude>
              <exclude>**/*.iml</exclude>
              <exclude>**/CHANGES.txt</exclude>
              <exclude>**/generated/**</exclude>
              <exclude>**/gen-*/**</exclude>
              <!-- No material contents -->
              <exclude>conf/regionservers</exclude>
              <exclude>**/*.avpr</exclude>
              <exclude>**/*.svg</exclude>
              <!-- non-standard notice file from jruby included by reference -->
              <exclude>**/src/main/resources/META-INF/LEGAL</exclude>
              <!-- MIT: https://github.com/asciidoctor/asciidoctor/blob/master/LICENSE.adoc -->
              <exclude>**/src/main/asciidoc/hbase.css</exclude>
              <!-- MIT https://jquery.org/license -->
              <exclude>**/jquery.min.js</exclude>
              <exclude>**/jquery.tablesorter.min.js</exclude>
              <exclude>**/parser-date-iso8601.min.js</exclude>
              <!-- MIT: bootstrap -->
              <exclude>**/src/main/resources/hbase-webapps/static/*/bootstrap*</exclude>
              <!-- BSD 3-clause: Vega, Vega-Lite, Vega-Embed -->
              <exclude>**/hbase-webapps/static/js/vega*.min.js</exclude>
              <!-- vector graphics -->
              <exclude>**/*.vm</exclude>
              <!-- apache doxia generated -->
              <exclude>**/control</exclude>
              <exclude>**/conffile</exclude>
              <!-- auto-gen docs -->
              <exclude>docs/*</exclude>
              <exclude>logs/*</exclude>
              <!--  exclude source control files -->
              <exclude>.git/**</exclude>
              <exclude>.svn/**</exclude>
              <exclude>**/.settings/**</exclude>
              <exclude>**/patchprocess/**</exclude>
              <exclude>src/site/resources/repo/**</exclude>
              <exclude>**/dependency-reduced-pom.xml</exclude>
              <exclude>**/rat.txt</exclude>
              <!-- exclude the shaded protobuf files -->
              <exclude>**/shaded/com/google/protobuf/**</exclude>
              <exclude>**/src/main/patches/**</exclude>
              <exclude>**/vote.tmpl</exclude>
              <!-- gzipped list of S3N URIs for hbase-it -->
              <exclude>**/CC-MAIN-2021-10-warc.paths.gz</exclude>
            </excludes>
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-assembly-plugin</artifactId>
          <configuration>
            <!--Defer to the hbase-assembly sub-module.  It
             does all assembly-->
            <skipAssembly>true</skipAssembly>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.xolstice.maven.plugins</groupId>
          <artifactId>protobuf-maven-plugin</artifactId>
          <version>${protobuf.plugin.version}</version>
          <configuration>
            <protoSourceRoot>${basedir}/src/main/protobuf/</protoSourceRoot>
            <clearOutputDirectory>false</clearOutputDirectory>
            <checkStaleness>true</checkStaleness>
          </configuration>
        </plugin>
        <plugin>
          <!-- Approach followed here is roughly the same as mentioned here:
          https://maven.apache.org/plugins/maven-checkstyle-plugin/examples/multi-module-config.html
          -->
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-checkstyle-plugin</artifactId>
          <version>${maven.checkstyle.version}</version>
          <configuration>
            <configLocation>hbase/checkstyle.xml</configLocation>
            <suppressionsLocation>hbase/checkstyle-suppressions.xml</suppressionsLocation>
            <includeTestSourceDirectory>true</includeTestSourceDirectory>
          </configuration>
          <dependencies>
            <dependency>
              <groupId>org.apache.hbase</groupId>
              <artifactId>hbase-checkstyle</artifactId>
              <version>${project.version}</version>
            </dependency>
            <dependency>
              <groupId>com.puppycrawl.tools</groupId>
              <artifactId>checkstyle</artifactId>
              <version>${checkstyle.version}</version>
            </dependency>
          </dependencies>
        </plugin>
        <plugin>
          <groupId>net.revelc.code</groupId>
          <artifactId>warbucks-maven-plugin</artifactId>
          <version>${maven.warbucks.version}</version>
          <configuration>
            <ignoreRuleFailures>false</ignoreRuleFailures>
            <rules>
              <rule>
                <!-- exclude the generated java files -->
                <classPattern>(?!.*(.generated.|.tmpl.|\$)).*</classPattern>
                <includeTestClasses>false</includeTestClasses>
                <includePublicClasses>true</includePublicClasses>
                <includePackagePrivateClasses>false</includePackagePrivateClasses>
                <includeProtectedClasses>false</includeProtectedClasses>
                <includePrivateClasses>false</includePrivateClasses>
                <classAnnotationPattern>org[.]apache[.]yetus[.]audience[.]InterfaceAudience.*</classAnnotationPattern>
              </rule>
            </rules>
          </configuration>
          <executions>
            <execution>
              <id>run-warbucks</id>
              <goals>
                <goal>check</goal>
                <!-- runs at process-test-classes phase -->
              </goals>
            </execution>
          </executions>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-enforcer-plugin</artifactId>
          <version>${enforcer.version}</version>
          <dependencies>
            <dependency>
              <groupId>org.codehaus.mojo</groupId>
              <artifactId>extra-enforcer-rules</artifactId>
              <version>${extra.enforcer.version}</version>
            </dependency>
            <dependency>
              <groupId>de.skuzzle.enforcer</groupId>
              <artifactId>restrict-imports-enforcer-rule</artifactId>
              <version>${restrict-imports.enforcer.version}</version>
            </dependency>
          </dependencies>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-gpg-plugin</artifactId>
          <version>${maven.gpg.version}</version>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>flatten-maven-plugin</artifactId>
        <version>1.3.0</version>
        <configuration>
          <embedBuildProfileDependencies>true</embedBuildProfileDependencies>
          <updatePomFile>true</updatePomFile>
        </configuration>
        <executions>
          <!-- enable flattening -->
          <execution>
            <id>flatten</id>
            <goals>
              <goal>flatten</goal>
            </goals>
            <phase>process-resources</phase>
          </execution>
          <!-- ensure proper cleanup -->
          <execution>
            <id>flatten.clean</id>
            <goals>
              <goal>clean</goal>
            </goals>
            <phase>clean</phase>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>negate-license-bundles-property</id>
            <goals>
              <goal>bsh-property</goal>
            </goals>
            <configuration>
              <source>skip.license.check = !${license.bundles.dependencies};</source>
              <properties>
                <property>skip.license.check</property>
              </properties>
            </configuration>
          </execution>
          <!-- sets where to find the generated LICENSE files -->
          <execution>
            <id>create-license-file-path-property</id>
            <goals>
              <goal>regex-property</goal>
            </goals>
            <configuration>
              <name>license.aggregate.path</name>
              <value>${project.build.directory}/maven-shared-archive-resources/META-INF/LICENSE</value>
              <regex>\\</regex>
              <replacement>/</replacement>
              <failIfNoMatch>false</failIfNoMatch>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <executions>
          <execution>
            <id>display-info</id>
            <goals>
              <goal>display-info</goal>
            </goals>
            <phase>initialize</phase>
            <inherited>false</inherited>
          </execution>
          <execution>
            <id>hadoop-profile-min-maven-min-java-banned-xerces</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <!-- Help people activate profiles correctly -->
                <evaluateBeanshell>
                  <condition>System.getProperty("hadoop-profile", "").isEmpty()</condition>
                  <message>The hadoop-profile property is unused, did you mean to set hadoop.profile instead?</message>
                </evaluateBeanshell>
                <!-- The earliest maven version we verify builds for via ASF Jenkins -->
                <requireMavenVersion>
                  <version>[${maven.min.version},)</version>
                  <message>Maven is out of date.
  HBase requires at least version ${maven.min.version} of Maven to properly build from source.
  You appear to be using an older version. You can use either "mvn -version" or
  "mvn enforcer:display-info" to verify what version is active.
  See the reference guide on building for more information: https://hbase.apache.org/book.html#build</message>
                </requireMavenVersion>
                <!-- The earliest JVM version we verify builds for via ASF Jenkins -->
                <requireJavaVersion>
                  <version>[${java.min.version},)</version>
                  <message>Java is out of date.
  HBase requires at least version ${java.min.version} of the JDK to properly build from source.
  You appear to be using an older version. You can use either "mvn -version" or
  "mvn enforcer:display-info" to verify what version is active.
  See the reference guide on building for more information: https://hbase.apache.org/book.html#build</message>
                </requireJavaVersion>
                <bannedDependencies>
                  <excludes>
                    <exclude>xerces:xercesImpl</exclude>
                  </excludes>
                  <message>We avoid adding our own Xerces jars to the classpath, see HBASE-16340.</message>
                </bannedDependencies>
              </rules>
            </configuration>
          </execution>
          <execution>
            <id>banned-jsr305</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <bannedDependencies>
                  <excludes>
                    <exclude>com.google.code.findbugs:jsr305</exclude>
                  </excludes>
                  <message>We don't allow the JSR305 jar from the Findbugs project, see HBASE-16321.</message>
                </bannedDependencies>
              </rules>
            </configuration>
          </execution>
          <execution>
            <id>banned-scala</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <bannedDependencies>
                  <excludes>
                    <exclude>org.scala-lang:scala-library</exclude>
                  </excludes>
                  <message>We don't allow Scala, see HBASE-13992.</message>
                </bannedDependencies>
              </rules>
            </configuration>
          </execution>
          <execution>
            <id>banned-commons-logging</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <bannedDependencies>
                  <excludes>
                    <exclude>commons-logging:commons-logging</exclude>
                  </excludes>
                  <message>We don't use commons-logging any more, so do not depend on it directly.</message>
                  <searchTransitive>false</searchTransitive>
                </bannedDependencies>
              </rules>
            </configuration>
          </execution>
          <execution>
            <id>banned-other-logging-framework</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <bannedDependencies>
                  <excludes>
                    <exclude>log4j:*</exclude>
                    <exclude>org.slf4j:slf4j-log4j12</exclude>
                    <exclude>ch.qos.reload4j:*</exclude>
                    <exclude>org.slf4j:slf4j-reload4j</exclude>
                    <exclude>ch.qos.logback:*</exclude>
                  </excludes>
                  <message>We do not allow other logging frameworks as now we use log4j2</message>
                </bannedDependencies>
              </rules>
            </configuration>
          </execution>
          <execution>
            <id>banned-jetty</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <bannedDependencies>
                  <excludes>
                    <exclude>org.eclipse.jetty:**</exclude>
                  </excludes>
                  <message>Use shaded jetty instead</message>
                  <searchTransitive>false</searchTransitive>
                </bannedDependencies>
              </rules>
            </configuration>
          </execution>
          <execution>
            <id>banned-jersey</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <bannedDependencies>
                  <excludes>
                    <exclude>org.glassfish.jersey.containers:**</exclude>
                    <exclude>org.glassfish.jersey.core:**</exclude>
                  </excludes>
                  <message>Use shaded jersey instead</message>
                  <searchTransitive>false</searchTransitive>
                </bannedDependencies>
              </rules>
            </configuration>
          </execution>
          <execution>
            <id>banned-htrace</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <bannedDependencies>
                  <excludes>
                    <exclude>org.apache.htrace:**</exclude>
                  </excludes>
                  <message>Use OpenTelemetry instead</message>
                  <searchTransitive>false</searchTransitive>
                </bannedDependencies>
              </rules>
            </configuration>
          </execution>
          <execution>
            <id>check-aggregate-license</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <!-- must check after LICENSE is built at 'generate-resources' -->
            <phase>process-resources</phase>
            <configuration>
              <rules>
                <evaluateBeanshell>
                  <condition>File license = new File("${license.aggregate.path}");

                    // Beanshell does not support try-with-resources,
                    // so we must close this scanner manually
                    Scanner scanner = new Scanner(license);

                    while (scanner.hasNextLine()) {
                      if (scanner.nextLine().startsWith("ERROR:")) {
                        scanner.close();
                        return false;
                      }
                    }
                    scanner.close();
                    return true;</condition>
                  <message>License errors detected, for more detail find ERROR in
                    ${license.aggregate.path}</message>
                </evaluateBeanshell>
              </rules>
              <skip>${skip.license.check}</skip>
            </configuration>
          </execution>
          <execution>
            <id>banned-illegal-imports</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <phase>process-sources</phase>
            <configuration>
              <rules>
                <restrictImports implementation="de.skuzzle.enforcer.restrictimports.rule.RestrictImports">
                  <includeTestCode>true</includeTestCode>
                  <commentLineBufferSize>512</commentLineBufferSize>
                  <reason>Use SLF4j for logging</reason>
                  <bannedImports>
                    <bannedImport>org.apache.commons.logging.**</bannedImport>
                    <bannedImport>org.apache.log4j.**</bannedImport>
                    <bannedImport>org.apache.logging.log4j.**</bannedImport>
                  </bannedImports>
                  <exclusions>
                    <!-- Exclude this one as it is a log4j2 appender implementation -->
                    <exclusion>org.apache.hadoop.hbase.logging.HBaseTestAppender</exclusion>
                  </exclusions>
                </restrictImports>
                <restrictImports implementation="de.skuzzle.enforcer.restrictimports.rule.RestrictImports">
                  <includeTestCode>false</includeTestCode>
                  <commentLineBufferSize>512</commentLineBufferSize>
                  <reason>Do not use log4j2 directly in code, see Log4jUtils in hbase-logging for more details.</reason>
                  <bannedImports>
                    <bannedImport>org.apache.logging.log4j.**</bannedImport>
                  </bannedImports>
                </restrictImports>
                <restrictImports implementation="de.skuzzle.enforcer.restrictimports.rule.RestrictImports">
                  <includeTestCode>true</includeTestCode>
                  <commentLineBufferSize>512</commentLineBufferSize>
                  <reason>Use shaded version in hbase-thirdparty</reason>
                  <bannedImports>
                    <bannedImport>com.google.common.**</bannedImport>
                    <bannedImport>io.netty.**</bannedImport>
                    <bannedImport>org.apache.commons.cli.**</bannedImport>
                    <bannedImport>org.apache.commons.collections.**</bannedImport>
                    <bannedImport>org.apache.commons.collections4.**</bannedImport>
                  </bannedImports>
                </restrictImports>
                <restrictImports implementation="de.skuzzle.enforcer.restrictimports.rule.RestrictImports">
                  <includeTestCode>true</includeTestCode>
                  <commentLineBufferSize>512</commentLineBufferSize>
                  <reason>Do not use shaded classes from other dependencies</reason>
                  <bannedImports>
                    <bannedImport>org.apache.curator.shaded.**</bannedImport>
                    <bannedImport>org.apache.htrace.shaded.**</bannedImport>
                  </bannedImports>
                </restrictImports>
                <restrictImports implementation="de.skuzzle.enforcer.restrictimports.rule.RestrictImports">
                  <includeTestCode>true</includeTestCode>
                  <commentLineBufferSize>512</commentLineBufferSize>
                  <reason>Use shaded gson in hbase-thirdparty</reason>
                  <bannedImports>
                    <bannedImport>org.codehaus.jackson.**</bannedImport>
                  </bannedImports>
                </restrictImports>
                <restrictImports implementation="de.skuzzle.enforcer.restrictimports.rule.RestrictImports">
                  <includeTestCode>true</includeTestCode>
                  <commentLineBufferSize>512</commentLineBufferSize>
                  <reason>Use commons lang 3</reason>
                  <bannedImports>
                    <bannedImport>org.apache.commons.lang.**</bannedImport>
                  </bannedImports>
                </restrictImports>
                <restrictImports implementation="de.skuzzle.enforcer.restrictimports.rule.RestrictImports">
                  <includeTestCode>true</includeTestCode>
                  <commentLineBufferSize>512</commentLineBufferSize>
                  <reason>Use yetus IA and IS annotations</reason>
                  <bannedImports>
                    <bannedImport>org.apache.hadoop.classificatio.**</bannedImport>
                  </bannedImports>
                </restrictImports>
                <restrictImports implementation="de.skuzzle.enforcer.restrictimports.rule.RestrictImports">
                  <includeTestCode>true</includeTestCode>
                  <commentLineBufferSize>512</commentLineBufferSize>
                  <reason>Do not use htrace</reason>
                  <bannedImports>
                    <bannedImport>org.htrace.**</bannedImport>
                    <bannedImport>org.apache.htrace.**</bannedImport>
                  </bannedImports>
                </restrictImports>
                <restrictImports implementation="de.skuzzle.enforcer.restrictimports.rule.RestrictImports">
                  <includeTestCode>true</includeTestCode>
                  <commentLineBufferSize>512</commentLineBufferSize>
                  <reason>Use shaded jetty in hbase-thirdparty</reason>
                  <bannedImports>
                    <bannedImport>org.eclipse.jetty.**</bannedImport>
                  </bannedImports>
                </restrictImports>
                <restrictImports implementation="de.skuzzle.enforcer.restrictimports.rule.RestrictImports">
                  <includeTestCode>true</includeTestCode>
                  <commentLineBufferSize>512</commentLineBufferSize>
                  <reason>Use shaded jersey in hbase-thirdparty</reason>
                  <bannedImports>
                    <bannedImport>org.glassfish.jersey.**</bannedImport>
                  </bannedImports>
                </restrictImports>
                <restrictImports implementation="de.skuzzle.enforcer.restrictimports.rule.RestrictImports">
                  <includeTestCode>true</includeTestCode>
                  <commentLineBufferSize>512</commentLineBufferSize>
                  <reason>You should never use this style of annotations(i.e, 'this is for test only')
                    in IA.Public or IA.LimitedPrivate classes. Use IA.Private to tell users this is
                    not for public use.
                    For IA.Private classes, use RestrictedApi annotation in error prone instead.</reason>
                  <bannedImports>
                    <bannedImport>org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting</bannedImport>
                  </bannedImports>
                </restrictImports>
                <restrictImports implementation="de.skuzzle.enforcer.restrictimports.rule.RestrictImports">
                  <includeTestCode>true</includeTestCode>
                  <commentLineBufferSize>512</commentLineBufferSize>
                  <reason>Use shaded javax.ws.rs in hbase-thirdparty</reason>
                  <bannedImports>
                    <bannedImport>javax.ws.rs.**</bannedImport>
                  </bannedImports>
                </restrictImports>
                <restrictImports implementation="de.skuzzle.enforcer.restrictimports.rule.RestrictImports">
                  <includeTestCode>true</includeTestCode>
                  <commentLineBufferSize>512</commentLineBufferSize>
                  <reason>Use shaded jackson-jaxrs-json-provider in hbase-thirdparty</reason>
                  <bannedImports>
                    <bannedImport>com.fasterxml.jackson.jaxrs.**</bannedImport>
                  </bannedImports>
                </restrictImports>
                <restrictImports implementation="de.skuzzle.enforcer.restrictimports.rule.RestrictImports">
                  <includeTestCode>true</includeTestCode>
                  <commentLineBufferSize>512</commentLineBufferSize>
                  <reason>Use junit4 instead</reason>
                  <bannedImports>
                    <bannedImport>junit.framework.**</bannedImport>
                  </bannedImports>
                </restrictImports>
              </rules>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <!-- parent-module only plugins -->
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>xml-maven-plugin</artifactId>
        <version>${xml.maven.version}</version>
        <inherited>false</inherited>
        <configuration>
          <transformationSets>
            <!-- For asciidoc -->
            <transformationSet>
              <!--Reaching up and over into common sub-module for hbase-default.xml-->
              <dir>${basedir}/hbase-common/src/main/resources/</dir>
              <includes>
                <include>hbase-default.xml</include>
              </includes>
              <stylesheet>${basedir}/src/main/xslt/configuration_to_asciidoc_chapter.xsl</stylesheet>
              <fileMappers>
                <fileMapper implementation="org.codehaus.plexus.components.io.filemappers.RegExpFileMapper">
                  <pattern>^(.*)\.xml$</pattern>
                  <replacement>$1.adoc</replacement>
                </fileMapper>
              </fileMappers>
              <outputDir>${basedir}/target/asciidoc</outputDir>
            </transformationSet>
          </transformationSets>
        </configuration>
        <executions>
          <execution>
            <!-- Run the hbase-default.xml through a stylesheet so can show it in doc-->
            <goals>
              <goal>transform</goal>
            </goals>
            <phase>site</phase>
          </execution>
        </executions>
      </plugin>
      <!-- Special configuration for spotbugs just in the parent so
      the filter file location can be more general (see definition in pluginManagement) -->
      <plugin>
        <groupId>com.github.spotbugs</groupId>
        <artifactId>spotbugs-maven-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>spotbugs</goal>
            </goals>
            <inherited>false</inherited>
            <configuration>
              <excludeFilterFile>${basedir}/dev-support/spotbugs-exclude.xml</excludeFilterFile>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-site-plugin</artifactId>
        <version>${maven-site.version}</version>
        <configuration>
          <siteDirectory>${basedir}/src/site</siteDirectory>
          <customBundle>${basedir}/src/site/custom/project-info-report.properties</customBundle>
          <inputEncoding>UTF-8</inputEncoding>
          <outputEncoding>UTF-8</outputEncoding>
        </configuration>
        <dependencies>
          <dependency>
            <!-- add support for ssh/scp -->
            <groupId>org.apache.maven.wagon</groupId>
            <artifactId>wagon-ssh</artifactId>
            <version>${wagon.ssh.version}</version>
          </dependency>
        </dependencies>
      </plugin>
      <!-- For AsciiDoc docs building -->
      <plugin>
        <groupId>org.asciidoctor</groupId>
        <artifactId>asciidoctor-maven-plugin</artifactId>
        <version>${asciidoctor.plugin.version}</version>
        <inherited>false</inherited>
        <configuration>
          <outputDirectory>${project.reporting.outputDirectory}/</outputDirectory>
          <doctype>book</doctype>
          <attributes>
            <docVersion>${project.version}</docVersion>
            <imagesdir>images</imagesdir>
            <source-highlighter>coderay</source-highlighter>
          </attributes>
        </configuration>
        <dependencies>
          <dependency>
            <groupId>org.asciidoctor</groupId>
            <artifactId>asciidoctorj-pdf</artifactId>
            <version>${asciidoctorj.pdf.version}</version>
          </dependency>
        </dependencies>
        <executions>
          <execution>
            <id>output-html</id>
            <goals>
              <goal>process-asciidoc</goal>
            </goals>
            <phase>site</phase>
            <configuration>
              <attributes>
                <stylesheet>hbase.css</stylesheet>
              </attributes>
              <backend>html5</backend>
            </configuration>
          </execution>
          <execution>
            <id>output-pdf</id>
            <goals>
              <goal>process-asciidoc</goal>
            </goals>
            <phase>site</phase>
            <configuration>
              <backend>pdf</backend>
              <attributes>
                <pagenums/>
                <toc/>
                <idprefix/>
                <idseparator>-</idseparator>
              </attributes>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <!--$NO-MVN-MAN-VER$ -->
        <inherited>false</inherited>
        <configuration>
          <escapeString>\</escapeString>
        </configuration>
        <executions>
          <execution>
            <id>copy-htaccess</id>
            <goals>
              <goal>copy-resources</goal>
            </goals>
            <phase>site</phase>
            <configuration>
              <outputDirectory>${project.reporting.outputDirectory}/</outputDirectory>
              <resources>
                <resource>
                  <directory>${basedir}/src/site/resources/</directory>
                  <includes>
                    <include>.htaccess</include>
                  </includes>
                </resource>
              </resources>
            </configuration>
          </execution>
          <!-- needed to make the redirect above work -->
          <execution>
            <id>copy-empty-book-dir</id>
            <goals>
              <goal>copy-resources</goal>
            </goals>
            <phase>site</phase>
            <configuration>
              <outputDirectory>${project.reporting.outputDirectory}/</outputDirectory>
              <resources>
                <resource>
                  <directory>${basedir}/src/site/resources/</directory>
                  <includes>
                    <include>book/**</include>
                  </includes>
                </resource>
              </resources>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>${maven.antrun.version}</version>
        <inherited>false</inherited>
        <!-- Rename the book.pdf generated by asciidoctor -->
        <executions>
          <execution>
            <id>rename-pdf</id>
            <goals>
              <goal>run</goal>
            </goals>
            <phase>site</phase>
            <configuration>
              <target name="rename file">
                <move file="${project.reporting.outputDirectory}/book.pdf" tofile="${project.reporting.outputDirectory}/apache_hbase_reference_guide.pdf"/>
              </target>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>buildnumber-maven-plugin</artifactId>
        <configuration>
          <timestampFormat>yyyy</timestampFormat>
          <timestampPropertyName>build.year</timestampPropertyName>
        </configuration>
        <executions>
          <execution>
            <goals>
              <goal>create-timestamp</goal>
            </goals>
            <phase>validate</phase>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <version>${maven.bundle.version}</version>
        <extensions>true</extensions>
        <inherited>true</inherited>
      </plugin>
      <plugin>
        <groupId>com.diffplug.spotless</groupId>
        <artifactId>spotless-maven-plugin</artifactId>
        <version>${spotless.version}</version>
        <configuration>
          <!-- define a language-specific format -->
          <java>
            <excludes>
              <exclude>**/generated/*</exclude>
              <exclude>**/package-info.java</exclude>
            </excludes>
            <!--
              e.g., remove the following lines:
              "* @param paramName"
              "* @throws ExceptionType"
              "* @return returnType"'
              Multiline to allow anchors on newlines
              See https://errorprone.info/bugpattern/EmptyBlockTag
            -->
            <replaceRegex>
              <name>Remove unhelpful javadoc stubs</name>
              <searchRegex>(?m)^ *\* *@(?:param|throws|return) *\w* *\n</searchRegex>
              <replacement/>
            </replaceRegex>
            <!--
              e.g., rewrite
              /** @return blabla */
              or
              /**
               * @return blabla
               */
              to
              /** Returns blabla */
              See https://errorprone.info/bugpattern/MissingSummary
              https://google.github.io/styleguide/javaguide.html#s7.2-summary-fragment
            -->
            <replaceRegex>
              <name>Purge single returns tag multi line</name>
              <searchRegex>(?m)^ */\*\*\n *\* *@return *(.*) *\n *\*/$</searchRegex>
              <replacement>/** Returns $1 */</replacement>
            </replaceRegex>
            <replaceRegex>
              <name>Purge single returns tag single line</name>
              <searchRegex>^ */\*\* *@return *(.*) *\*/$</searchRegex>
              <replacement>/** Returns $1 */</replacement>
            </replaceRegex>
            <!-- apply a specific flavor -->
            <eclipse>
              <file>${session.executionRootDirectory}/dev-support/hbase_eclipse_formatter.xml</file>
            </eclipse>
            <importOrder>
              <file>${session.executionRootDirectory}/dev-support/eclipse.importorder</file>
            </importOrder>
            <trimTrailingWhitespace/>
            <endWithNewline/>
            <removeUnusedImports/>
          </java>
          <pom>
            <sortPom>
              <expandEmptyElements>false</expandEmptyElements>
            </sortPom>
          </pom>
          <formats>
            <!-- you can define as many formats as you want, each is independent -->
            <format>
              <!-- define the files to apply to -->
              <includes>
                <include>**/*.xml</include>
                <include>**/*.sh</include>
                <include>**/*.py</include>
                <include>**/Jenkinsfile*</include>
                <include>**/*.md</include>
                <include>*.md</include>
                <include>**/*.txt</include>
                <include>*.txt</include>
              </includes>
              <excludes>
                <exclude>**/target/**</exclude>
                <exclude>**/dependency-reduced-pom.xml</exclude>
              </excludes>
              <!-- define the steps to apply to those files -->
              <trimTrailingWhitespace/>
              <endWithNewline/>
            </format>
            <format>
              <!--
                We have some files which have special license header which must be kept, so
                here we add a special format section to apply license header, and leave the
                java section above only used for formatting code style
              -->
              <includes>
                <include>src/main/java/**/*.java</include>
                <include>src/test/java/**/*.java</include>
              </includes>
              <excludes>
                <exclude>**/generated/*</exclude>
                <exclude>**/package-info.java</exclude>
                <!-- ByteRange, from Google protobuf -->
                <exclude>src/main/java/org/apache/hadoop/hbase/util/AbstractByteRange.java</exclude>
                <exclude>src/main/java/org/apache/hadoop/hbase/util/SimpleMutableByteRange.java</exclude>
                <exclude>src/main/java/org/apache/hadoop/hbase/util/SimplePositionedMutableByteRange.java</exclude>
                <!-- Metrics, from Josh Elser -->
                <exclude>src/main/java/org/apache/hadoop/hbase/metrics/impl/HBaseMetrics2HadoopMetricsAdapter.java</exclude>
                <!-- https://github.com/ept/warc-hadoop, from Martin Kleppmann -->
                <exclude>src/test/java/org/apache/hadoop/hbase/test/util/warc/WARCFileReader.java</exclude>
                <exclude>src/test/java/org/apache/hadoop/hbase/test/util/warc/WARCFileWriter.java</exclude>
                <exclude>src/test/java/org/apache/hadoop/hbase/test/util/warc/WARCInputFormat.java</exclude>
                <exclude>src/test/java/org/apache/hadoop/hbase/test/util/warc/WARCOutputFormat.java</exclude>
                <exclude>src/test/java/org/apache/hadoop/hbase/test/util/warc/WARCRecord.java</exclude>
                <exclude>src/test/java/org/apache/hadoop/hbase/test/util/warc/WARCWritable.java</exclude>
              </excludes>
              <licenseHeader>
                <file>${session.executionRootDirectory}/dev-support/license-header</file>
                <delimiter>package</delimiter>
              </licenseHeader>
            </format>
          </formats>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.cyclonedx</groupId>
        <artifactId>cyclonedx-maven-plugin</artifactId>
        <version>2.7.3</version>
        <executions>
          <execution>
            <goals>
              <goal>makeBom</goal>
            </goals>
            <phase>package</phase>
          </execution>
        </executions>
      </plugin>
    </plugins>
    <extensions>
      <extension>
        <groupId>kr.motd.maven</groupId>
        <artifactId>os-maven-plugin</artifactId>
        <version>${os.maven.version}</version>
      </extension>
    </extensions>
  </build>
  <!-- See https://jira.codehaus.org/browse/MSITE-443 why the settings need to be here and not in pluginManagement. -->
  <reporting>
    <plugins>
      <plugin>
        <artifactId>maven-project-info-reports-plugin</artifactId>
        <version>${maven.project.info.report.version}</version>
        <!-- see src/site/site.xml for selected reports -->
        <configuration>
          <dependencyLocationsEnabled>false</dependencyLocationsEnabled>
        </configuration>
        <reportSets>
          <reportSet>
            <reports>
              <report>dependencies</report>
              <report>dependency-convergence</report>
              <report>dependency-info</report>
              <report>dependency-management</report>
              <report>index</report>
              <report>issue-management</report>
              <report>licenses</report>
              <report>mailing-lists</report>
              <report>plugin-management</report>
              <report>plugins</report>
              <report>team</report>
              <report>scm</report>
              <report>summary</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <configuration>
          <tags>
            <tag>
              <name>apiNote</name>
              <placement>a</placement>
              <head>API Note:</head>
            </tag>
          </tags>
        </configuration>
        <reportSets>
          <!-- Dev API -->
          <reportSet>
            <id>devapi</id>
            <reports>
              <report>aggregate-no-fork</report>
            </reports>
            <configuration>
              <destDir>devapidocs</destDir>
              <name>Developer API</name>
              <description>The full HBase API, including private and unstable APIs</description>
              <sourceFileExcludes>
                <exclude>**/generated/*</exclude>
                <exclude>**/protobuf/*</exclude>
              </sourceFileExcludes>
              <excludePackageNames>org.apache.hadoop.hbase.tmpl.common:com.google.protobuf:org.apache.hadoop.hbase.generated*</excludePackageNames>
              <show>private</show>
              <!-- (shows all classes and members) -->
              <quiet>true</quiet>
              <linksource>true</linksource>
              <sourcetab>2</sourcetab>
              <validateLinks>true</validateLinks>
              <fixClassComment>true</fixClassComment>
              <fixFieldComment>true</fixFieldComment>
              <fixMethodComment>true</fixMethodComment>
              <fixTags>all</fixTags>
              <notimestamp>true</notimestamp>
              <locale>en_US</locale>
              <!-- Pass some options straight to the javadoc executable since it is easier -->
              <additionalJOption>-J-Xmx2G</additionalJOption>
              <!-- JDK8 javadoc requires test scope transitive dependencies due to our custom doclet -->
              <additionalDependencies>
                <additionalDependency>
                  <groupId>org.mockito</groupId>
                  <artifactId>mockito-core</artifactId>
                  <version>${mockito-core.version}</version>
                </additionalDependency>
                <additionalDependency>
                  <groupId>org.hamcrest</groupId>
                  <artifactId>hamcrest-core</artifactId>
                  <version>${hamcrest.version}</version>
                </additionalDependency>
                <!-- javadoc tooling requires jsr305 due to references to it from things we rely on -->
                <additionalDependency>
                  <groupId>com.google.code.findbugs</groupId>
                  <artifactId>jsr305</artifactId>
                  <version>3.0.2</version>
                </additionalDependency>
              </additionalDependencies>
              <inherited>false</inherited>
            </configuration>
          </reportSet>
          <reportSet>
            <id>testdevapi</id>
            <reports>
              <report>test-aggregate-no-fork</report>
            </reports>
            <configuration>
              <destDir>testdevapidocs</destDir>
              <name>Developer API</name>
              <description>The full HBase API test code, including private and unstable APIs</description>
              <sourceFileExcludes>
                <exclude>**/generated/*</exclude>
                <exclude>**/protobuf/*</exclude>
              </sourceFileExcludes>
              <excludePackageNames>org.apache.hadoop.hbase.tmpl.common:com.google.protobuf:org.apache.hadoop.hbase.generated*</excludePackageNames>
              <show>private</show>
              <!-- (shows all classes and members) -->
              <quiet>true</quiet>
              <linksource>true</linksource>
              <sourcetab>2</sourcetab>
              <validateLinks>true</validateLinks>
              <fixClassComment>true</fixClassComment>
              <fixFieldComment>true</fixFieldComment>
              <fixMethodComment>true</fixMethodComment>
              <fixTags>all</fixTags>
              <notimestamp>true</notimestamp>
              <locale>en_US</locale>
              <!-- Pass some options straight to the javadoc executable since it is easier -->
              <additionalJOption>-J-Xmx2G</additionalJOption>
              <!-- JDK8 javadoc requires test scope transitive dependencies due to our custom doclet -->
              <additionalDependencies>
                <additionalDependency>
                  <groupId>org.mockito</groupId>
                  <artifactId>mockito-core</artifactId>
                  <version>${mockito-core.version}</version>
                </additionalDependency>
                <additionalDependency>
                  <groupId>org.hamcrest</groupId>
                  <artifactId>hamcrest-core</artifactId>
                  <version>${hamcrest.version}</version>
                </additionalDependency>
                <!-- javadoc tooling requires jsr305 due to references to it from things we rely on -->
                <additionalDependency>
                  <groupId>com.google.code.findbugs</groupId>
                  <artifactId>jsr305</artifactId>
                  <version>3.0.2</version>
                </additionalDependency>
              </additionalDependencies>
              <inherited>false</inherited>
            </configuration>
          </reportSet>

          <!-- User API -->
          <reportSet>
            <id>userapi</id>
            <reports>
              <report>aggregate-no-fork</report>
            </reports>
            <configuration>
              <doclet>org.apache.yetus.audience.tools.IncludePublicAnnotationsStandardDoclet</doclet>
              <docletArtifact>
                <groupId>org.apache.yetus</groupId>
                <artifactId>audience-annotations</artifactId>
                <version>${javadoc.audience-annotations.version}</version>
              </docletArtifact>
              <useStandardDocletOptions>true</useStandardDocletOptions>
              <destDir>apidocs</destDir>
              <name>User API</name>
              <description>The HBase Application Programmer's API</description>
              <excludePackageNames>org.apache.hadoop.hbase.backup*:org.apache.hadoop.hbase.catalog:org.apache.hadoop.hbase.client.coprocessor:org.apache.hadoop.hbase.client.metrics:org.apache.hadoop.hbase.codec*:org.apache.hadoop.hbase.constraint:org.apache.hadoop.hbase.coprocessor.*:org.apache.hadoop.hbase.executor:org.apache.hadoop.hbase.fs:*.generated.*:org.apache.hadoop.hbase.io.hfile.*:org.apache.hadoop.hbase.mapreduce.hadoopbackport:org.apache.hadoop.hbase.mapreduce.replication:org.apache.hadoop.hbase.master.*:org.apache.hadoop.hbase.metrics*:org.apache.hadoop.hbase.migration:org.apache.hadoop.hbase.monitoring:org.apache.hadoop.hbase.p*:org.apache.hadoop.hbase.regionserver.compactions:org.apache.hadoop.hbase.regionserver.handler:org.apache.hadoop.hbase.regionserver.snapshot:org.apache.hadoop.hbase.replication.*:org.apache.hadoop.hbase.rest.filter:org.apache.hadoop.hbase.rest.model:org.apache.hadoop.hbase.rest.p*:org.apache.hadoop.hbase.security.*:org.apache.hadoop.hbase.thrift*:org.apache.hadoop.hbase.tmpl.*:org.apache.hadoop.hbase.tool:org.apache.hadoop.hbase.trace:org.apache.hadoop.hbase.util.byterange*:org.apache.hadoop.hbase.util.test:org.apache.hadoop.hbase.util.vint:org.apache.hadoop.metrics2*:org.apache.hadoop.hbase.io.compress*</excludePackageNames>
              <!-- switch on dependency-driven aggregation -->
              <includeDependencySources>false</includeDependencySources>
              <sourceFilesExclude>**/generated/*</sourceFilesExclude>
              <show>protected</show>
              <!-- (shows only public and protected classes and members) -->
              <quiet>true</quiet>
              <linksource>true</linksource>
              <sourcetab>2</sourcetab>
              <validateLinks>true</validateLinks>
              <fixClassComment>true</fixClassComment>
              <fixFieldComment>true</fixFieldComment>
              <fixMethodComment>true</fixMethodComment>
              <fixTags>all</fixTags>
              <notimestamp>true</notimestamp>
              <locale>en_US</locale>
              <!-- Pass some options straight to the javadoc executable since it is easier -->
              <additionalJOption>-J-Xmx2G</additionalJOption>
              <!-- JDK8 javadoc requires test scope transitive dependencies due to our custom doclet -->
              <additionalDependencies>
                <additionalDependency>
                  <groupId>org.mockito</groupId>
                  <artifactId>mockito-core</artifactId>
                  <version>${mockito-core.version}</version>
                </additionalDependency>
                <additionalDependency>
                  <groupId>org.hamcrest</groupId>
                  <artifactId>hamcrest-core</artifactId>
                  <version>${hamcrest.version}</version>
                </additionalDependency>
                <!-- javadoc tooling requires jsr305 due to references to it from things we rely on -->
                <additionalDependency>
                  <groupId>com.google.code.findbugs</groupId>
                  <artifactId>jsr305</artifactId>
                  <version>3.0.2</version>
                </additionalDependency>
              </additionalDependencies>
              <inherited>false</inherited>
            </configuration>
          </reportSet>
          <!-- User Test API -->
          <reportSet>
            <id>testuserapi</id>
            <reports>
              <report>test-aggregate-no-fork</report>
            </reports>
            <configuration>
              <doclet>org.apache.yetus.audience.tools.IncludePublicAnnotationsStandardDoclet</doclet>
              <docletArtifact>
                <groupId>org.apache.yetus</groupId>
                <artifactId>audience-annotations</artifactId>
                <version>${javadoc.audience-annotations.version}</version>
              </docletArtifact>
              <useStandardDocletOptions>true</useStandardDocletOptions>
              <destDir>testapidocs</destDir>
              <name>User API</name>
              <description>The HBase Application Programmer's API</description>
              <excludePackageNames>org.apache.hadoop.hbase.backup*:org.apache.hadoop.hbase.catalog:org.apache.hadoop.hbase.client.coprocessor:org.apache.hadoop.hbase.client.metrics:org.apache.hadoop.hbase.codec*:org.apache.hadoop.hbase.constraint:org.apache.hadoop.hbase.coprocessor.*:org.apache.hadoop.hbase.executor:org.apache.hadoop.hbase.fs:*.generated.*:org.apache.hadoop.hbase.io.hfile.*:org.apache.hadoop.hbase.mapreduce.hadoopbackport:org.apache.hadoop.hbase.mapreduce.replication:org.apache.hadoop.hbase.master.*:org.apache.hadoop.hbase.metrics*:org.apache.hadoop.hbase.migration:org.apache.hadoop.hbase.monitoring:org.apache.hadoop.hbase.p*:org.apache.hadoop.hbase.regionserver.compactions:org.apache.hadoop.hbase.regionserver.handler:org.apache.hadoop.hbase.regionserver.snapshot:org.apache.hadoop.hbase.replication.*:org.apache.hadoop.hbase.rest.filter:org.apache.hadoop.hbase.rest.model:org.apache.hadoop.hbase.rest.p*:org.apache.hadoop.hbase.security.*:org.apache.hadoop.hbase.thrift*:org.apache.hadoop.hbase.tmpl.*:org.apache.hadoop.hbase.tool:org.apache.hadoop.hbase.trace:org.apache.hadoop.hbase.util.byterange*:org.apache.hadoop.hbase.util.test:org.apache.hadoop.hbase.util.vint:org.apache.hadoop.metrics2*:org.apache.hadoop.hbase.io.compress*</excludePackageNames>
              <!-- switch on dependency-driven aggregation -->
              <includeDependencySources>false</includeDependencySources>
              <sourceFilesExclude>**/generated/*</sourceFilesExclude>
              <show>protected</show>
              <!-- (shows only public and protected classes and members) -->
              <quiet>true</quiet>
              <linksource>true</linksource>
              <sourcetab>2</sourcetab>
              <validateLinks>true</validateLinks>
              <fixClassComment>true</fixClassComment>
              <fixFieldComment>true</fixFieldComment>
              <fixMethodComment>true</fixMethodComment>
              <fixTags>all</fixTags>
              <notimestamp>true</notimestamp>
              <locale>en_US</locale>
              <!-- Pass some options straight to the javadoc executable since it is easier -->
              <additionalJOption>-J-Xmx2G</additionalJOption>
              <!-- JDK8 javadoc requires test scope transitive dependencies due to our custom doclet -->
              <additionalDependencies>
                <additionalDependency>
                  <groupId>org.mockito</groupId>
                  <artifactId>mockito-core</artifactId>
                  <version>${mockito-core.version}</version>
                </additionalDependency>
                <additionalDependency>
                  <groupId>org.hamcrest</groupId>
                  <artifactId>hamcrest-core</artifactId>
                  <version>${hamcrest.version}</version>
                </additionalDependency>
                <!-- javadoc tooling requires jsr305 due to references to it from things we rely on -->
                <additionalDependency>
                  <groupId>com.google.code.findbugs</groupId>
                  <artifactId>jsr305</artifactId>
                  <version>3.0.2</version>
                </additionalDependency>
              </additionalDependencies>
              <inherited>false</inherited>
            </configuration>
          </reportSet>
        </reportSets>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <version>${maven.checkstyle.version}</version>
        <configuration>
          <excludes>target/**</excludes>
        </configuration>
      </plugin>

    </plugins>
  </reporting>

  <!--
  To publish, use the following settings.xml file ( placed in ~/.m2/settings.xml )

 <settings>
  <servers>
    <server>
      <id>apache.releases.https</id>
      <username>hbase_committer</username>
      <password>********</password>
    </server>

    <server>
      <id>apache.snapshots.https</id>
      <username>hbase_committer</username>
      <password>********</password>
    </server>

  </servers>
 </settings>

  $ mvn deploy
(or)
  $ mvn -s /my/path/settings.xml deploy

  -->
  <profiles>
    <profile>
      <id>build-with-jdk8</id>
      <activation>
        <jdk>1.8</jdk>
      </activation>
      <properties>
        <maven.compiler.source>${compileSource}</maven.compiler.source>
        <maven.compiler.target>${compileSource}</maven.compiler.target>
      </properties>
    </profile>
    <profile>
      <id>build-with-jdk11</id>
      <activation>
        <jdk>[11,)</jdk>
      </activation>
      <properties>
        <maven.compiler.release>${releaseTarget}</maven.compiler.release>
        <!-- TODO: replicate logic for windows support -->
        <argLine>-Dorg.apache.hbase.thirdparty.io.netty.tryReflectionSetAccessible=true
          --add-modules jdk.unsupported
          --add-opens java.base/java.nio=ALL-UNNAMED
          --add-opens java.base/sun.nio.ch=ALL-UNNAMED
          --add-opens java.base/java.lang=ALL-UNNAMED
          --add-opens java.base/jdk.internal.ref=ALL-UNNAMED
          --add-opens java.base/java.lang.reflect=ALL-UNNAMED
          --add-opens java.base/java.util=ALL-UNNAMED
          --add-exports java.base/jdk.internal.misc=ALL-UNNAMED
          --add-exports java.security.jgss/sun.security.krb5=ALL-UNNAMED
          ${hbase-surefire.argLine}</argLine>
        <!--
          Value to use for surefire when running jdk11.
          TODO: replicate logic for windows
        -->
        <surefire.Xmx>2200m</surefire.Xmx>
        <!--
          com.sun.javadoc and com.sun.tools.doclets are both deprecated in java 11 and will
          fail the javadoc generating, so we need to use yetus 0.14.1 where it uses jdk.javadoc
          and jdk.javadoc.doclet instead
        -->
        <javadoc.audience-annotations.version>0.14.1</javadoc.audience-annotations.version>
      </properties>
      <build>
        <pluginManagement>
          <plugins>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-javadoc-plugin</artifactId>
              <version>${maven.javadoc.version}</version>
              <configuration>
                <source>${compileSource}</source>
                <!--
                  Need to add this option to ignore the source errors, epsecially that we reference
                  test code in hbase-testing-util's main code.
                -->
                <additionalOptions>--ignore-source-errors</additionalOptions>
                <additionalJOptions>
                  <additionalJOption>-J-Xmx2G</additionalJOption>
                  <additionalJOption>-J--add-exports</additionalJOption>
                  <additionalJOption>-Jjdk.javadoc/jdk.javadoc.internal.tool=ALL-UNNAMED</additionalJOption>
                </additionalJOptions>
              </configuration>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </profile>
    <!-- profile activated by the Jenkins patch testing job -->
    <profile>
      <id>jenkins.patch</id>
      <activation>
        <activeByDefault>false</activeByDefault>
        <property>
          <name>HBasePatchProcess</name>
        </property>
      </activation>
      <properties>
        <surefire.rerunFailingTestsCount>2</surefire.rerunFailingTestsCount>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <inherited>false</inherited>
            <executions>
              <execution>
                <goals>
                  <goal>run</goal>
                </goals>
                <phase>validate</phase>
                <configuration>
                  <tasks>
                    <echo>Maven Execution Environment</echo>
                    <echo>MAVEN_OPTS="${env.MAVEN_OPTS}"</echo>
                  </tasks>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>jacoco</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>${jacoco.version}</version>
            <configuration>
              <systemPropertyVariables>
                <jacoco-agent.destfile>target/jacoco.exec</jacoco-agent.destfile>
              </systemPropertyVariables>
              <excludes>
                <exclude>**/generated/**/*.class</exclude>
              </excludes>
            </configuration>
            <executions>
              <execution>
                <id>prepare-agent</id>
                <goals>
                  <goal>prepare-agent</goal>
                </goals>
              </execution>
              <execution>
                <id>report</id>
                <goals>
                  <goal>report</goal>
                </goals>
                <phase>prepare-package</phase>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>os.linux</id>
      <activation>
        <activeByDefault>false</activeByDefault>
        <os>
          <family>Linux</family>
        </os>
      </activation>
      <properties>
        <build.platform>${os.name}-${os.arch}-${sun.arch.data.model}</build.platform>
      </properties>
    </profile>
    <profile>
      <id>os.mac</id>
      <activation>
        <os>
          <family>Mac</family>
        </os>
      </activation>
      <properties>
        <build.platform>Mac_OS_X-${sun.arch.data.model}</build.platform>
      </properties>
    </profile>
    <profile>
      <id>os.windows</id>
      <activation>
        <os>
          <family>Windows</family>
        </os>
      </activation>
      <properties>
        <build.platform>cygwin</build.platform>
        <argLine>${hbase-surefire.cygwin-argLine}</argLine>
      </properties>
    </profile>
    <!-- this profile should match the name of the release profile in the root asf pom -->
    <profile>
      <id>apache-release</id>
      <build>
        <plugins>
          <!-- This should insert itself in place of the normal deploy plugin and then
               handle either closing or dropping the staging repository for us depending
               on if the build succeeds.
            -->
          <plugin>
            <groupId>org.sonatype.plugins</groupId>
            <artifactId>nexus-staging-maven-plugin</artifactId>
            <version>1.6.8</version>
            <extensions>true</extensions>
            <configuration>
              <nexusUrl>https://repository.apache.org/</nexusUrl>
              <serverId>apache.releases.https</serverId>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- this profile should be activated for release builds -->
    <profile>
      <id>release</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.rat</groupId>
            <artifactId>apache-rat-plugin</artifactId>
            <executions>
              <execution>
                <goals>
                  <goal>check</goal>
                </goals>
                <phase>package</phase>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-enforcer-plugin</artifactId>
            <version>${enforcer.version}</version>
            <configuration>
              <rules>
                <enforceBytecodeVersion>
                  <maxJdkVersion>${compileSource}</maxJdkVersion>
                  <message>HBase has unsupported dependencies.
  HBase requires that all dependencies be compiled with version ${compileSource} or earlier
  of the JDK to properly build from source.  You appear to be using a newer dependency. You can use
  either "mvn -version" or "mvn enforcer:display-info" to verify what version is active.
  Non-release builds can temporarily build with a newer JDK version by setting the
  'compileSource' property (eg. mvn -DcompileSource=1.8 clean package).</message>
                  <ignoreClasses>
                    <ignoreClass>module-info</ignoreClass>
                  </ignoreClasses>
                </enforceBytecodeVersion>
              </rules>
            </configuration>
            <dependencies>
              <dependency>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>extra-enforcer-rules</artifactId>
                <version>${extra.enforcer.version}</version>
              </dependency>
            </dependencies>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- Dependency management profiles for submodules when building against specific hadoop branches.-->
    <!-- Submodules that need hadoop dependencies should declare
         profiles with activation properties matching the profile here.
         Generally, it should be sufficient to copy the first
         few lines of the profile you want to match. -->
    <!-- Profile for building against Hadoop 3.0.0. Activate by default -->
    <profile>
      <id>hadoop-3.0</id>
      <activation>
        <property>
          <name>!hadoop.profile</name>
        </property>
      </activation>
      <properties>
        <hadoop.version>${hadoop-three.version}</hadoop.version>
        <assembly.file>src/main/assembly/hadoop-three-compat.xml</assembly.file>
      </properties>
      <dependencyManagement>
        <dependencies>
          <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-mapreduce-client-core</artifactId>
            <version>${hadoop-three.version}</version>
            <exclusions>
              <exclusion>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
              </exclusion>
              <exclusion>
                <groupId>com.sun.jersey</groupId>
                <artifactId>jersey-core</artifactId>
              </exclusion>
              <exclusion>
                <groupId>javax.xml.bind</groupId>
                <artifactId>jaxb-api</artifactId>
              </exclusion>
              <exclusion>
                <groupId>javax.ws.rs</groupId>
                <artifactId>jsr311-api</artifactId>
              </exclusion>
              <exclusion>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>*</artifactId>
              </exclusion>
              <exclusion>
                <groupId>io.netty</groupId>
                <artifactId>netty</artifactId>
              </exclusion>
              <exclusion>
                <groupId>io.netty</groupId>
                <artifactId>netty-all</artifactId>
              </exclusion>
              <exclusion>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
              </exclusion>
              <exclusion>
                <groupId>javax.inject</groupId>
                <artifactId>javax.inject</artifactId>
              </exclusion>
              <exclusion>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
              </exclusion>
              <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
              </exclusion>
              <exclusion>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
              </exclusion>
              <exclusion>
                <groupId>ch.qos.reload4j</groupId>
                <artifactId>reload4j</artifactId>
              </exclusion>
              <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-reload4j</artifactId>
              </exclusion>
            </exclusions>
          </dependency>
          <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-mapreduce-client-app</artifactId>
            <version>${hadoop-three.version}</version>
            <type>test-jar</type>
            <exclusions>
              <exclusion>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>jackson-mapper-asl</artifactId>
              </exclusion>
              <exclusion>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>jackson-core-asl</artifactId>
              </exclusion>
              <exclusion>
                <groupId>javax.xml.bind</groupId>
                <artifactId>jaxb-api</artifactId>
              </exclusion>
              <exclusion>
                <groupId>javax.ws.rs</groupId>
                <artifactId>jsr311-api</artifactId>
              </exclusion>
              <exclusion>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>*</artifactId>
              </exclusion>
              <exclusion>
                <groupId>javax.xml.bind</groupId>
                <artifactId>jaxb-api</artifactId>
              </exclusion>
              <exclusion>
                <groupId>javax.ws.rs</groupId>
                <artifactId>jsr311-api</artifactId>
              </exclusion>
              <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
              </exclusion>
              <exclusion>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
              </exclusion>
              <exclusion>
                <groupId>ch.qos.reload4j</groupId>
                <artifactId>reload4j</artifactId>
              </exclusion>
              <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-reload4j</artifactId>
              </exclusion>
            </exclusions>
          </dependency>
          <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-mapreduce-client-jobclient</artifactId>
            <version>${hadoop-three.version}</version>
            <exclusions>
              <exclusion>
                <groupId>com.sun.jersey</groupId>
                <artifactId>jersey-core</artifactId>
              </exclusion>
              <exclusion>
                <groupId>io.netty</groupId>
                <artifactId>netty</artifactId>
              </exclusion>
              <exclusion>
                <groupId>io.netty</groupId>
                <artifactId>netty-all</artifactId>
              </exclusion>
              <exclusion>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
              </exclusion>
              <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
              </exclusion>
              <exclusion>
                <groupId>ch.qos.reload4j</groupId>
                <artifactId>reload4j</artifactId>
              </exclusion>
              <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-reload4j</artifactId>
              </exclusion>
            </exclusions>
          </dependency>
          <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-mapreduce-client-jobclient</artifactId>
            <version>${hadoop-three.version}</version>
            <type>test-jar</type>
            <scope>test</scope>
            <exclusions>
              <exclusion>
                <groupId>com.sun.jersey</groupId>
                <artifactId>jersey-core</artifactId>
              </exclusion>
              <exclusion>
                <groupId>io.netty</groupId>
                <artifactId>netty</artifactId>
              </exclusion>
              <exclusion>
                <groupId>io.netty</groupId>
                <artifactId>netty-all</artifactId>
              </exclusion>
              <exclusion>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
              </exclusion>
              <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
              </exclusion>
              <exclusion>
                <groupId>ch.qos.reload4j</groupId>
                <artifactId>reload4j</artifactId>
              </exclusion>
              <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-reload4j</artifactId>
              </exclusion>
            </exclusions>
          </dependency>
          <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>${hadoop-three.version}</version>
            <exclusions>
              <exclusion>
                <groupId>com.sun.jersey</groupId>
                <artifactId>jersey-core</artifactId>
              </exclusion>
              <exclusion>
                <groupId>com.sun.jersey</groupId>
                <artifactId>jersey-server</artifactId>
              </exclusion>
              <exclusion>
                <groupId>javax.servlet.jsp</groupId>
                <artifactId>jsp-api</artifactId>
              </exclusion>
              <exclusion>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
              </exclusion>
              <exclusion>
                <groupId>stax</groupId>
                <artifactId>stax-api</artifactId>
              </exclusion>
              <exclusion>
                <groupId>xerces</groupId>
                <artifactId>xercesImpl</artifactId>
              </exclusion>
              <exclusion>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>*</artifactId>
              </exclusion>
              <exclusion>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
              </exclusion>
              <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
              </exclusion>
              <exclusion>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
              </exclusion>
              <exclusion>
                <groupId>ch.qos.reload4j</groupId>
                <artifactId>reload4j</artifactId>
              </exclusion>
              <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-reload4j</artifactId>
              </exclusion>
              <exclusion>
                <groupId>org.fusesource.leveldbjni</groupId>
                <artifactId>leveldbjni-all</artifactId>
              </exclusion>
              <exclusion>
                <groupId>org.openlabtesting.leveldbjni</groupId>
                <artifactId>leveldbjni-all</artifactId>
              </exclusion>
            </exclusions>
          </dependency>
          <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>${hadoop-three.version}</version>
            <type>test-jar</type>
            <scope>test</scope>
            <exclusions>
              <exclusion>
                <groupId>javax.servlet.jsp</groupId>
                <artifactId>jsp-api</artifactId>
              </exclusion>
              <exclusion>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
              </exclusion>
              <exclusion>
                <groupId>stax</groupId>
                <artifactId>stax-api</artifactId>
              </exclusion>
              <exclusion>
                <groupId>xerces</groupId>
                <artifactId>xercesImpl</artifactId>
              </exclusion>
              <exclusion>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>*</artifactId>
              </exclusion>
              <exclusion>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
              </exclusion>
              <exclusion>
                <groupId>com.sun.jersey</groupId>
                <artifactId>jersey-core</artifactId>
              </exclusion>
              <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
              </exclusion>
              <exclusion>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
              </exclusion>
              <exclusion>
                <groupId>ch.qos.reload4j</groupId>
                <artifactId>reload4j</artifactId>
              </exclusion>
              <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-reload4j</artifactId>
              </exclusion>
            </exclusions>
          </dependency>
          <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>${hadoop-three.version}</version>
            <classifier>tests</classifier>
            <type>test-jar</type>
            <scope>test</scope>
            <exclusions>
              <exclusion>
                <groupId>com.sun.jersey</groupId>
                <artifactId>jersey-core</artifactId>
              </exclusion>
              <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
              </exclusion>
              <exclusion>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
              </exclusion>
              <exclusion>
                <groupId>ch.qos.reload4j</groupId>
                <artifactId>reload4j</artifactId>
              </exclusion>
              <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-reload4j</artifactId>
              </exclusion>
            </exclusions>
          </dependency>
          <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-auth</artifactId>
            <version>${hadoop-three.version}</version>
            <exclusions>
              <exclusion>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
              </exclusion>
              <exclusion>
                <groupId>net.minidev</groupId>
                <artifactId>json-smart</artifactId>
              </exclusion>
              <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
              </exclusion>
              <exclusion>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
              </exclusion>
              <exclusion>
                <groupId>ch.qos.reload4j</groupId>
                <artifactId>reload4j</artifactId>
              </exclusion>
              <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-reload4j</artifactId>
              </exclusion>
            </exclusions>
          </dependency>
          <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>${hadoop-three.version}</version>
            <exclusions>
              <exclusion>
                <groupId>com.sun.jersey</groupId>
                <artifactId>jersey-core</artifactId>
              </exclusion>
              <exclusion>
                <groupId>com.sun.jersey</groupId>
                <artifactId>jersey-json</artifactId>
              </exclusion>
              <exclusion>
                <groupId>com.sun.jersey</groupId>
                <artifactId>jersey-servlet</artifactId>
              </exclusion>
              <exclusion>
                <groupId>com.sun.jersey</groupId>
                <artifactId>jersey-server</artifactId>
              </exclusion>
              <exclusion>
                <groupId>javax.servlet.jsp</groupId>
                <artifactId>jsp-api</artifactId>
              </exclusion>
              <exclusion>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
              </exclusion>
              <exclusion>
                <groupId>stax</groupId>
                <artifactId>stax-api</artifactId>
              </exclusion>
              <exclusion>
                <groupId>io.netty</groupId>
                <artifactId>netty</artifactId>
              </exclusion>
              <!-- MiniMRCluster needs the hadoop netty-all transitive include... a
               netty-all 4.0.52 version.... so we have to let it through.
             <exclusion>
               <groupId>io.netty</groupId>
               <artifactId>netty-all</artifactId>
             </exclusion>
             -->
              <exclusion>
                <groupId>com.google.code.findbugs</groupId>
                <artifactId>jsr305</artifactId>
              </exclusion>
              <exclusion>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
              </exclusion>
              <exclusion>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>*</artifactId>
              </exclusion>
              <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
              </exclusion>
              <exclusion>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
              </exclusion>
              <exclusion>
                <groupId>ch.qos.reload4j</groupId>
                <artifactId>reload4j</artifactId>
              </exclusion>
              <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-reload4j</artifactId>
              </exclusion>
              <exclusion>
                <groupId>io.netty</groupId>
                <artifactId>netty</artifactId>
              </exclusion>
              <exclusion>
                <groupId>io.netty</groupId>
                <artifactId>netty-all</artifactId>
              </exclusion>
            </exclusions>
          </dependency>
          <dependency>
            <!--
             a missing transitive dependency on JDK9+ (obsoleted by Hadoop-3.3.0+, HADOOP-15775)
           -->
            <groupId>javax.activation</groupId>
            <artifactId>javax.activation-api</artifactId>
            <version>1.2.0</version>
            <scope>test</scope>
          </dependency>
          <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>${hadoop-three.version}</version>
            <classifier>tests</classifier>
            <type>test-jar</type>
            <exclusions>
              <exclusion>
                <groupId>com.sun.jersey</groupId>
                <artifactId>jersey-core</artifactId>
              </exclusion>
              <exclusion>
                <groupId>com.google.code.findbugs</groupId>
                <artifactId>jsr305</artifactId>
              </exclusion>
              <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
              </exclusion>
              <exclusion>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
              </exclusion>
              <exclusion>
                <groupId>ch.qos.reload4j</groupId>
                <artifactId>reload4j</artifactId>
              </exclusion>
              <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-reload4j</artifactId>
              </exclusion>
              <!--
              Needed in test context when hadoop-3.3 runs.
              <exclusion>
                <groupId>io.netty</groupId>
                <artifactId>netty-all</artifactId>
              </exclusion>
              -->
              <exclusion>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>*</artifactId>
              </exclusion>
              <exclusion>
                <groupId>javax.servlet.jsp</groupId>
                <artifactId>jsp-api</artifactId>
              </exclusion>
              <exclusion>
                <groupId>javax.xml.bind</groupId>
                <artifactId>jaxb-api</artifactId>
              </exclusion>
              <exclusion>
                <groupId>javax.ws.rs</groupId>
                <artifactId>jsr311-api</artifactId>
              </exclusion>
            </exclusions>
          </dependency>
          <dependency>
            <!-- Is this needed? Seems a duplicate of the above dependency but for the
            classifier-->
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>${hadoop-three.version}</version>
          </dependency>
          <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-annotations</artifactId>
            <version>${hadoop-three.version}</version>
          </dependency>
          <!-- This was marked as test dep in earlier pom, but was scoped compile.
           Where do we actually need it? -->
          <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-minicluster</artifactId>
            <version>${hadoop-three.version}</version>
            <exclusions>
              <!--If we comment this in, a few tests in hbase-mapreduce
                   fail. They depend on jersey-core somehow. But excluding
                   jersey-core here messes up hbase-it because jersey-core
                   implements a 1.x jaxrs Response Interface when we depend
                   on the 2.x Interface... . Letting this jar come in
                   transitively here but will exclude it down in hbase-it.
                   See HBASE-22029.
             <exclusion>
               <groupId>com.sun.jersey</groupId>
               <artifactId>jersey-core</artifactId>
             </exclusion>
             -->
              <exclusion>
                <groupId>commons-httpclient</groupId>
                <artifactId>commons-httpclient</artifactId>
              </exclusion>
              <exclusion>
                <groupId>javax.servlet.jsp</groupId>
                <artifactId>jsp-api</artifactId>
              </exclusion>
              <exclusion>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
              </exclusion>
              <exclusion>
                <groupId>stax</groupId>
                <artifactId>stax-api</artifactId>
              </exclusion>
              <exclusion>
                <groupId>io.netty</groupId>
                <artifactId>netty</artifactId>
              </exclusion>
              <exclusion>
                <groupId>io.netty</groupId>
                <artifactId>netty-all</artifactId>
              </exclusion>
              <exclusion>
                <groupId>com.google.code.findbugs</groupId>
                <artifactId>jsr305</artifactId>
              </exclusion>
              <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
              </exclusion>
              <exclusion>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
              </exclusion>
              <exclusion>
                <groupId>ch.qos.reload4j</groupId>
                <artifactId>reload4j</artifactId>
              </exclusion>
              <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-reload4j</artifactId>
              </exclusion>
            </exclusions>
          </dependency>
          <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-minikdc</artifactId>
            <version>${hadoop-three.version}</version>
            <scope>test</scope>
            <exclusions>
              <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
              </exclusion>
              <exclusion>
                <groupId>ch.qos.reload4j</groupId>
                <artifactId>reload4j</artifactId>
              </exclusion>
              <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-reload4j</artifactId>
              </exclusion>
              <exclusion>
                <groupId>bouncycastle</groupId>
                <artifactId>bcprov-jdk15</artifactId>
              </exclusion>
            </exclusions>
          </dependency>
          <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-distcp</artifactId>
            <version>${hadoop-three.version}</version>
          </dependency>

          <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs-client</artifactId>
            <version>${hadoop-three.version}</version>
          </dependency>
        </dependencies>
      </dependencyManagement>

    </profile>
    <!-- profiles for the tests
         See as well the properties of the project for the values
         when no profile is active.     -->
    <profile>
      <!-- Use it to launch all tests in the same JVM  -->
      <id>singleJVMTests</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <properties>
        <surefire.firstPartForkCount>1</surefire.firstPartForkCount>
        <surefire.skipFirstPart>false</surefire.skipFirstPart>
        <surefire.skipSecondPart>true</surefire.skipSecondPart>
        <surefire.firstPartGroups/>
      </properties>
    </profile>
    <profile>
      <!-- Use it to launch small tests only -->
      <id>runSmallTests</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <properties>
        <surefire.skipFirstPart>false</surefire.skipFirstPart>
        <surefire.skipSecondPart>true</surefire.skipSecondPart>
        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.SmallTests</surefire.firstPartGroups>
        <surefire.secondPartGroups/>
      </properties>
    </profile>
    <profile>
      <!-- Use it to launch medium tests only -->
      <id>runMediumTests</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <properties>
        <surefire.skipFirstPart>false</surefire.skipFirstPart>
        <surefire.skipSecondPart>true</surefire.skipSecondPart>
        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.MediumTests</surefire.firstPartGroups>
        <surefire.secondPartGroups/>
      </properties>
    </profile>
    <profile>
      <!-- Use it to launch large tests only -->
      <id>runLargeTests</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <properties>
        <surefire.skipFirstPart>false</surefire.skipFirstPart>
        <surefire.skipSecondPart>true</surefire.skipSecondPart>
        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.LargeTests</surefire.firstPartGroups>
        <surefire.secondPartGroups/>
      </properties>
    </profile>
    <profile>
      <!-- Use it to launch small & medium tests -->
      <id>runDevTests</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <properties>
        <surefire.firstPartForkCount>1</surefire.firstPartForkCount>
        <surefire.skipFirstPart>false</surefire.skipFirstPart>
        <surefire.skipSecondPart>false</surefire.skipSecondPart>
        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.SmallTests</surefire.firstPartGroups>
        <surefire.secondPartGroups>org.apache.hadoop.hbase.testclassification.MediumTests</surefire.secondPartGroups>
      </properties>
    </profile>
    <profile>
      <!-- Use it to launch all tests -->
      <id>runAllTests</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <properties>
        <surefire.skipFirstPart>false</surefire.skipFirstPart>
        <surefire.skipSecondPart>false</surefire.skipSecondPart>
        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.SmallTests</surefire.firstPartGroups>
        <surefire.secondPartGroups>org.apache.hadoop.hbase.testclassification.MediumTests,org.apache.hadoop.hbase.testclassification.LargeTests</surefire.secondPartGroups>
      </properties>
    </profile>
    <profile>
      <id>runMiscTests</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <properties>
        <surefire.skipFirstPart>false</surefire.skipFirstPart>
        <surefire.skipSecondPart>true</surefire.skipSecondPart>
        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.MiscTests</surefire.firstPartGroups>
        <surefire.secondPartGroups/>
      </properties>
    </profile>
    <profile>
      <id>runCoprocessorTests</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <properties>
        <surefire.firstPartForkCount>1</surefire.firstPartForkCount>
        <surefire.secondPartForkCount>1</surefire.secondPartForkCount>
        <surefire.skipFirstPart>false</surefire.skipFirstPart>
        <surefire.skipSecondPart>true</surefire.skipSecondPart>
        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.CoprocessorTests</surefire.firstPartGroups>
        <surefire.secondPartGroups/>
      </properties>
    </profile>
    <profile>
      <id>runClientTests</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <properties>
        <surefire.firstPartForkCount>1</surefire.firstPartForkCount>
        <surefire.secondPartForkCount>1</surefire.secondPartForkCount>
        <surefire.skipFirstPart>false</surefire.skipFirstPart>
        <surefire.skipSecondPart>true</surefire.skipSecondPart>
        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.ClientTests</surefire.firstPartGroups>
        <surefire.secondPartGroups/>
      </properties>
    </profile>
    <profile>
      <id>runMasterTests</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <properties>
        <surefire.firstPartForkCount>1</surefire.firstPartForkCount>
        <surefire.secondPartForkCount>1</surefire.secondPartForkCount>
        <surefire.skipFirstPart>false</surefire.skipFirstPart>
        <surefire.skipSecondPart>true</surefire.skipSecondPart>
        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.MasterTests</surefire.firstPartGroups>
        <surefire.secondPartGroups/>
      </properties>
    </profile>
    <profile>
      <id>runMapredTests</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <properties>
        <surefire.firstPartForkCount>1</surefire.firstPartForkCount>
        <surefire.secondPartForkCount>1</surefire.secondPartForkCount>
        <surefire.skipFirstPart>false</surefire.skipFirstPart>
        <surefire.skipSecondPart>true</surefire.skipSecondPart>
        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.MapredTests</surefire.firstPartGroups>
        <surefire.secondPartGroups/>
      </properties>
    </profile>
    <profile>
      <id>runMapreduceTests</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <properties>
        <surefire.firstPartForkCount>1</surefire.firstPartForkCount>
        <surefire.secondPartForkCount>1</surefire.secondPartForkCount>
        <surefire.skipFirstPart>false</surefire.skipFirstPart>
        <surefire.skipSecondPart>true</surefire.skipSecondPart>
        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.MapReduceTests</surefire.firstPartGroups>
        <surefire.secondPartGroups/>
      </properties>
    </profile>
    <profile>
      <id>runRegionServerTests</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <properties>
        <surefire.firstPartForkCount>1</surefire.firstPartForkCount>
        <surefire.secondPartForkCount>1</surefire.secondPartForkCount>
        <surefire.skipFirstPart>false</surefire.skipFirstPart>
        <surefire.skipSecondPart>true</surefire.skipSecondPart>
        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.RegionServerTests</surefire.firstPartGroups>
        <surefire.secondPartGroups/>
      </properties>
    </profile>
    <profile>
      <id>runVerySlowMapReduceTests</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <properties>
        <surefire.firstPartForkCount>2</surefire.firstPartForkCount>
        <surefire.secondPartForkCount>1</surefire.secondPartForkCount>
        <surefire.skipFirstPart>false</surefire.skipFirstPart>
        <surefire.skipSecondPart>true</surefire.skipSecondPart>
        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.VerySlowMapReduceTests</surefire.firstPartGroups>
        <surefire.secondPartGroups/>
      </properties>
    </profile>

    <profile>
      <id>runVerySlowRegionServerTests</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <properties>
        <surefire.firstPartForkCount>2</surefire.firstPartForkCount>
        <surefire.secondPartForkCount>1</surefire.secondPartForkCount>
        <surefire.skipFirstPart>false</surefire.skipFirstPart>
        <surefire.skipSecondPart>true</surefire.skipSecondPart>
        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.VerySlowRegionServerTests</surefire.firstPartGroups>
        <surefire.secondPartGroups/>
      </properties>
    </profile>

    <profile>
      <id>runFilterTests</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <properties>
        <surefire.firstPartForkCount>1</surefire.firstPartForkCount>
        <surefire.secondPartForkCount>1</surefire.secondPartForkCount>
        <surefire.skipFirstPart>false</surefire.skipFirstPart>
        <surefire.skipSecondPart>true</surefire.skipSecondPart>
        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.FilterTests</surefire.firstPartGroups>
        <surefire.secondPartGroups/>
      </properties>
    </profile>
    <profile>
      <id>runIOTests</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <properties>
        <surefire.firstPartForkCount>1</surefire.firstPartForkCount>
        <surefire.secondPartForkCount>1</surefire.secondPartForkCount>
        <surefire.skipFirstPart>false</surefire.skipFirstPart>
        <surefire.skipSecondPart>true</surefire.skipSecondPart>
        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.IOTests</surefire.firstPartGroups>
        <surefire.secondPartGroups/>
      </properties>
    </profile>
    <profile>
      <id>runRestTests</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <properties>
        <surefire.firstPartForkCount>1</surefire.firstPartForkCount>
        <surefire.secondPartForkCount>1</surefire.secondPartForkCount>
        <surefire.skipFirstPart>false</surefire.skipFirstPart>
        <surefire.skipSecondPart>true</surefire.skipSecondPart>
        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.RestTests</surefire.firstPartGroups>
        <surefire.secondPartGroups/>
      </properties>
    </profile>
    <profile>
      <id>runRPCTests</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <properties>
        <surefire.firstPartForkCount>1</surefire.firstPartForkCount>
        <surefire.secondPartForkCount>1</surefire.secondPartForkCount>
        <surefire.skipFirstPart>false</surefire.skipFirstPart>
        <surefire.skipSecondPart>true</surefire.skipSecondPart>
        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.RPCTests</surefire.firstPartGroups>
        <surefire.secondPartGroups/>
      </properties>
    </profile>
    <profile>
      <id>runReplicationTests</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <properties>
        <surefire.firstPartForkCount>1</surefire.firstPartForkCount>
        <surefire.secondPartForkCount>1</surefire.secondPartForkCount>
        <surefire.skipFirstPart>false</surefire.skipFirstPart>
        <surefire.skipSecondPart>true</surefire.skipSecondPart>
        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.ReplicationTests</surefire.firstPartGroups>
        <surefire.secondPartGroups/>
      </properties>
    </profile>
    <profile>
      <id>runSecurityTests</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <properties>
        <surefire.firstPartForkCount>1</surefire.firstPartForkCount>
        <surefire.secondPartForkCount>1</surefire.secondPartForkCount>
        <surefire.skipFirstPart>false</surefire.skipFirstPart>
        <surefire.skipSecondPart>true</surefire.skipSecondPart>
        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.SecurityTests</surefire.firstPartGroups>
        <surefire.secondPartGroups/>
      </properties>
    </profile>
    <profile>
      <id>runFlakeyTests</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <properties>
        <surefire.firstPartForkCount>1</surefire.firstPartForkCount>
        <surefire.secondPartForkCount>1</surefire.secondPartForkCount>
        <surefire.skipFirstPart>false</surefire.skipFirstPart>
        <surefire.skipSecondPart>true</surefire.skipSecondPart>
        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.FlakeyTests</surefire.firstPartGroups>
        <surefire.secondPartGroups/>
      </properties>
    </profile>
    <profile>
      <id>runZKTests</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <properties>
        <surefire.firstPartForkCount>1</surefire.firstPartForkCount>
        <surefire.secondPartForkCount>1</surefire.secondPartForkCount>
        <surefire.skipFirstPart>false</surefire.skipFirstPart>
        <surefire.skipSecondPart>true</surefire.skipSecondPart>
        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.ZKTests</surefire.firstPartGroups>
        <surefire.secondPartGroups/>
      </properties>
    </profile>
    <profile>
      <id>runRSGroupTests</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <properties>
        <surefire.firstPartForkCount>1</surefire.firstPartForkCount>
        <surefire.secondPartForkCount>1</surefire.secondPartForkCount>
        <surefire.skipFirstPart>false</surefire.skipFirstPart>
        <surefire.skipSecondPart>true</surefire.skipSecondPart>
        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.RSGroupTests</surefire.firstPartGroups>
        <surefire.secondPartGroups/>
      </properties>
    </profile>

    <profile>
      <!-- Use it to launch tests locally-->
      <id>localTests</id>
      <activation>
        <property>
          <name>test</name>
        </property>
      </activation>
      <properties>
        <surefire.provider>surefire-junit4</surefire.provider>
        <surefire.skipFirstPart>false</surefire.skipFirstPart>
        <surefire.skipSecondPart>true</surefire.skipSecondPart>
        <surefire.firstPartGroups/>
      </properties>
    </profile>
    <!-- Profile for running clover. You need to have a clover license under ~/.clover.license for ${clover.version}
         or you can provide the license with -Dmaven.clover.licenseLocation=/path/to/license. Committers can find
         the license under https://svn.apache.org/repos/private/committers/donated-licenses/clover/
         The report will be generated under target/site/clover/index.html when you run
         MAVEN_OPTS="-Xmx2048m" mvn clean package -Pclover site -->
    <profile>
      <id>clover</id>
      <activation>
        <activeByDefault>false</activeByDefault>
        <property>
          <name>clover</name>
        </property>
      </activation>
      <properties>
        <maven.clover.licenseLocation>${user.home}/.clover.license</maven.clover.licenseLocation>
      </properties>
      <build>
        <plugins>
          <!-- When Clover is active, we need to add it as a dependency for the javadoc plugin, or
             our instrumented classes for the doclet will fail
          -->
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <dependencies>
              <dependency>
                <groupId>com.atlassian.maven.plugins</groupId>
                <artifactId>maven-clover2-plugin</artifactId>
                <version>${clover.version}</version>
              </dependency>
            </dependencies>
          </plugin>
          <plugin>
            <groupId>com.atlassian.maven.plugins</groupId>
            <artifactId>maven-clover2-plugin</artifactId>
            <version>${clover.version}</version>
            <configuration>
              <includesAllSourceRoots>true</includesAllSourceRoots>
              <includesTestSourceRoots>true</includesTestSourceRoots>
              <targetPercentage>50%</targetPercentage>
              <generateHtml>true</generateHtml>
              <generateXml>true</generateXml>
              <excludes>
                <exclude>**/generated/**</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>site</phase>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <!-- Used by the website generation script on jenkins to
           do a local install of the jars we need to run a normal
           site build w/o forking.
        -->
      <id>site-install-step</id>
      <properties>
        <skipTests>true</skipTests>
        <maven.javadoc.skip>true</maven.javadoc.skip>
        <enforcer.skip>true</enforcer.skip>
        <checkstyle.skip>true</checkstyle.skip>
        <spotbugs.skip>true</spotbugs.skip>
        <warbucks.skip>true</warbucks.skip>
      </properties>
    </profile>
    <profile>
      <!-- Used by the website generation script on jenkins to
           mitigate the impact of unneeded build forks while building
           our javadocs.
        -->
      <id>site-build-step</id>
      <properties>
        <skipTests>true</skipTests>
        <enforcer.skip>true</enforcer.skip>
        <maven.main.skip>true</maven.main.skip>
        <maven.test.skip>true</maven.test.skip>
        <warbucks.skip>true</warbucks.skip>
        <protoc.skip>true</protoc.skip>
        <remoteresources.skip>true</remoteresources.skip>
      </properties>
    </profile>
    <profile>
      <id>eclipse-specific</id>
      <activation>
        <property>
          <name>m2e.version</name>
        </property>
      </activation>
      <build>
        <pluginManagement>
          <plugins>
            <!-- General config for eclipse classpath/settings -->
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-eclipse-plugin</artifactId>
              <version>${maven.eclipse.version}</version>
            </plugin>
            <!--This plugin's configuration is used to store Eclipse m2e settings
                only. It has no influence on the Maven build itself. m2e does not
                provide any safeguards against rogue maven plugins that leak
                classloaders, modify random files inside workspace or throw nasty
                exceptions to fail the build.
                Top level doesn't do any specific configuration currently - left
                to modules to decide what they want to bind, sans those plugins
                defined in this pom. -->
            <plugin>
              <groupId>org.eclipse.m2e</groupId>
              <artifactId>lifecycle-mapping</artifactId>
              <version>${lifecycle.mapping.version}</version>
              <configuration>
                <lifecycleMappingMetadata>
                  <pluginExecutions>
                    <pluginExecution>
                      <pluginExecutionFilter>
                        <groupId>org.jacoco</groupId>
                        <artifactId>jacoco-maven-plugin</artifactId>
                        <versionRange>[0.6.2.201302030002,)</versionRange>
                        <goals>
                          <goal>prepare-agent</goal>
                        </goals>
                      </pluginExecutionFilter>
                      <action>
                        <ignore/>
                      </action>
                    </pluginExecution>
                    <pluginExecution>
                      <pluginExecutionFilter>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-enforcer-plugin</artifactId>
                        <versionRange>${enforcer.version}</versionRange>
                        <goals>
                          <goal>enforce</goal>
                        </goals>
                      </pluginExecutionFilter>
                      <action>
                        <ignore/>
                      </action>
                    </pluginExecution>
                    <pluginExecution>
                      <pluginExecutionFilter>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-remote-resources-plugin</artifactId>
                        <versionRange>[1.5,)</versionRange>
                        <goals>
                          <goal>process</goal>
                          <goal>bundle</goal>
                        </goals>
                      </pluginExecutionFilter>
                      <action>
                        <ignore/>
                      </action>
                    </pluginExecution>
                    <pluginExecution>
                      <pluginExecutionFilter>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>buildnumber-maven-plugin</artifactId>
                        <versionRange>[1.3,)</versionRange>
                        <goals>
                          <goal>create-timestamp</goal>
                        </goals>
                      </pluginExecutionFilter>
                      <action>
                        <execute>
                          <runOnConfiguration>true</runOnConfiguration>
                          <runOnIncremental>true</runOnIncremental>
                        </execute>
                      </action>
                    </pluginExecution>
                  </pluginExecutions>
                </lifecycleMappingMetadata>
              </configuration>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </profile>
    <profile>
      <id>aarch64</id>
      <activation>
        <os>
          <family>linux</family>
          <arch>aarch64</arch>
        </os>
      </activation>
      <properties>
        <external.protobuf.groupid>org.openlabtesting.protobuf</external.protobuf.groupid>
      </properties>
    </profile>
  </profiles>
</project>