You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zh...@apache.org on 2022/03/28 13:08:08 UTC

[hbase] branch master updated: HBASE-26617 Use spotless to reduce the pain on fixing checkstyle issues (#4214)

This is an automated email from the ASF dual-hosted git repository.

zhangduo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/master by this push:
     new a211792  HBASE-26617 Use spotless to reduce the pain on fixing checkstyle issues (#4214)
a211792 is described below

commit a21179287b6c5a570d188a8b2f94163828052093
Author: Duo Zhang <zh...@apache.org>
AuthorDate: Sun Mar 13 23:38:00 2022 +0800

    HBASE-26617 Use spotless to reduce the pain on fixing checkstyle issues (#4214)
    
    Closes #4214
    
    Signed-off-by: GeorryHuang <hu...@apache.org>
---
 dev-support/license-header |   17 +
 pom.xml                    | 4365 ++++++++++++++++++++++----------------------
 2 files changed, 2189 insertions(+), 2193 deletions(-)

diff --git a/dev-support/license-header b/dev-support/license-header
new file mode 100644
index 0000000..2379dda
--- /dev/null
+++ b/dev-support/license-header
@@ -0,0 +1,17 @@
+/*
+ * 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.
+ */
diff --git a/pom.xml b/pom.xml
index 507caa3..b59d075 100755
--- a/pom.xml
+++ b/pom.xml
@@ -1,6 +1,6 @@
 <?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
@@ -38,15 +38,13 @@
   </parent>
   <groupId>org.apache.hbase</groupId>
   <artifactId>hbase</artifactId>
-  <packaging>pom</packaging>
   <version>3.0.0-alpha-3-SNAPSHOT</version>
+  <packaging>pom</packaging>
   <name>Apache HBase</name>
-  <description>
-    Apache HBase™ is the Hadoop database. Use it when you need
+  <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>
+    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
@@ -59,98 +57,6 @@
       <distribution>repo</distribution>
     </license>
   </licenses>
-
-  <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>
-  <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>
   <developers>
     <developer>
       <id>achouhan</id>
@@ -321,10 +227,10 @@
       <timezone>-5</timezone>
     </developer>
     <developer>
-        <id>gxcheng</id>
-        <name>Guangxu Cheng</name>
-        <email>gxcheng@apache.org</email>
-        <timezone>+8</timezone>
+      <id>gxcheng</id>
+      <name>Guangxu Cheng</name>
+      <email>gxcheng@apache.org</email>
+      <timezone>+8</timezone>
     </developer>
     <developer>
       <id>haxiaolin</id>
@@ -734,988 +640,108 @@
       <timezone>+8</timezone>
     </developer>
   </developers>
-  <build>
-    <extensions>
-      <extension>
-        <groupId>kr.motd.maven</groupId>
-        <artifactId>os-maven-plugin</artifactId>
-        <version>${os.maven.version}</version>
-      </extension>
-    </extensions>
-    <!-- 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>
-            <source>${compileSource}</source>
-            <target>${compileSource}</target>
-            <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>
-          <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>
-          <!-- Generic testing configuration for all packages -->
-          <configuration>
-            <groups>${surefire.firstPartGroups}</groups>
-            <failIfNoTests>false</failIfNoTests>
-            <trimStackTrace>false</trimStackTrace>
-            <skip>${surefire.skipFirstPart}</skip>
-            <forkCount>${surefire.firstPartForkCount}</forkCount>
-            <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>
-          <executions>
-            <execution>
-              <id>secondPartTestsExecution</id>
-              <phase>test</phase>
-              <goals>
-                <goal>test</goal>
-              </goals>
-              <configuration>
-                <skip>${surefire.skipSecondPart}</skip>
-                <testFailureIgnore>${surefire.testFailureIgnore}</testFailureIgnore>
-                <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>
-              <phase>prepare-package</phase>
-              <goals>
-                <goal>jar-no-fork</goal>
-                <goal>test-jar-no-fork</goal>
-              </goals>
-              <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>
-          <executions>
-            <execution>
-              <phase>prepare-package</phase>
-              <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>
-            </execution>
-          </executions>
-          <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>
-        </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>
-          <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>
-          <configuration>
-            <configLocation>hbase/checkstyle.xml</configLocation>
-            <suppressionsLocation>hbase/checkstyle-suppressions.xml</suppressionsLocation>
-            <includeTestSourceDirectory>true</includeTestSourceDirectory>
-          </configuration>
-        </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>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>
-            <phase>initialize</phase>
-            <goals>
-              <goal>display-info</goal>
-            </goals>
-            <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>
-            <!-- must check after LICENSE is built at 'generate-resources' -->
-            <phase>process-resources</phase>
-            <goals>
-              <goal>enforce</goal>
-            </goals>
-            <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>
-            <phase>process-sources</phase>
-            <goals>
-              <goal>enforce</goal>
-            </goals>
-            <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>
-                </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>
-        <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>
-        <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>
-      </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>
-            <inherited>false</inherited>
-            <goals>
-              <goal>spotbugs</goal>
-            </goals>
-            <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>
-        <dependencies>
-          <dependency>
-            <!-- add support for ssh/scp -->
-            <groupId>org.apache.maven.wagon</groupId>
-            <artifactId>wagon-ssh</artifactId>
-            <version>${wagon.ssh.version}</version>
-          </dependency>
-        </dependencies>
-        <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>
-      </plugin>
-      <!-- For AsciiDoc docs building -->
-      <plugin>
-        <groupId>org.asciidoctor</groupId>
-        <artifactId>asciidoctor-maven-plugin</artifactId>
-        <version>${asciidoctor.plugin.version}</version>
-        <inherited>false</inherited>
-        <dependencies>
-          <dependency>
-            <groupId>org.asciidoctor</groupId>
-            <artifactId>asciidoctorj-pdf</artifactId>
-            <version>${asciidoctorj.pdf.version}</version>
-          </dependency>
-          <dependency>
-            <groupId>org.jruby</groupId>
-            <artifactId>jruby-complete</artifactId>
-            <version>${jruby.version}</version>
-          </dependency>
-        </dependencies>
-        <configuration>
-          <outputDirectory>${project.reporting.outputDirectory}/</outputDirectory>
-          <doctype>book</doctype>
-          <attributes>
-            <docVersion>${project.version}</docVersion>
-            <imagesdir>images</imagesdir>
-            <source-highlighter>coderay</source-highlighter>
-          </attributes>
-        </configuration>
-        <executions>
-          <execution>
-            <id>output-html</id>
-            <phase>site</phase>
-            <goals>
-              <goal>process-asciidoc</goal>
-            </goals>
-            <configuration>
-              <attributes>
-                <stylesheet>hbase.css</stylesheet>
-              </attributes>
-              <backend>html5</backend>
-            </configuration>
-          </execution>
-          <execution>
-            <id>output-pdf</id>
-            <phase>site</phase>
-            <goals>
-              <goal>process-asciidoc</goal>
-            </goals>
-            <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>
-        <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>
-        <configuration>
-          <escapeString>\</escapeString>
-        </configuration>
-      </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>
-            <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>
-            <goals>
-              <goal>run</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>buildnumber-maven-plugin</artifactId>
-        <executions>
-          <execution>
-            <phase>validate</phase>
-            <goals>
-              <goal>create-timestamp</goal>
-            </goals>
-          </execution>
-        </executions>
-        <configuration>
-          <timestampFormat>yyyy</timestampFormat>
-          <timestampPropertyName>build.year</timestampPropertyName>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.felix</groupId>
-        <artifactId>maven-bundle-plugin</artifactId>
-        <version>${maven.bundle.version}</version>
-        <inherited>true</inherited>
-        <extensions>true</extensions>
-      </plugin>
-    </plugins>
-  </build>
+  <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>
     <!-- override on command line to have generated LICENSE files include
          diagnostic info for verifying notice requirements -->
@@ -1731,9 +757,7 @@
     <!-- 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>
+    <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>
@@ -1825,6 +849,7 @@
     <surefire.version>3.0.0-M4</surefire.version>
     <wagon.ssh.version>2.12</wagon.ssh.version>
     <xml.maven.version>1.0.1</xml.maven.version>
+    <spotless.version>2.21.0</spotless.version>
     <!-- compression -->
     <aircompressor.version>0.21</aircompressor.version>
     <lz4.version>1.8.0</lz4.version>
@@ -1848,7 +873,7 @@
     <!-- 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
+    <!-- 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
@@ -1864,7 +889,7 @@
     <surefire.testFailureIgnore>false</surefire.testFailureIgnore>
     <test.output.tofile>true</test.output.tofile>
     <surefire.timeout>900</surefire.timeout>
-    <test.exclude.pattern></test.exclude.pattern>
+    <test.exclude.pattern/>
     <!--
       Use -Dsurefire.Xmx=xxg to run tests with different JVM Xmx value.
       This value is managed separately for jdk11. See below.
@@ -1881,14 +906,12 @@
       -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>
+      -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>
+      -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>
@@ -1928,8 +951,8 @@
         <!--Was test scope only but if we want to run hbase-it tests, need the annotations test jar-->
       </dependency>
       <dependency>
-        <artifactId>hbase-backup</artifactId>
         <groupId>org.apache.hbase</groupId>
+        <artifactId>hbase-backup</artifactId>
         <version>${project.version}</version>
       </dependency>
       <dependency>
@@ -1985,83 +1008,83 @@
         <scope>test</scope>
       </dependency>
       <dependency>
-        <artifactId>hbase-replication</artifactId>
         <groupId>org.apache.hbase</groupId>
+        <artifactId>hbase-replication</artifactId>
         <version>${project.version}</version>
       </dependency>
       <dependency>
-        <artifactId>hbase-balancer</artifactId>
         <groupId>org.apache.hbase</groupId>
+        <artifactId>hbase-balancer</artifactId>
         <version>${project.version}</version>
       </dependency>
       <dependency>
-        <artifactId>hbase-balancer</artifactId>
         <groupId>org.apache.hbase</groupId>
+        <artifactId>hbase-balancer</artifactId>
         <version>${project.version}</version>
         <type>test-jar</type>
         <scope>test</scope>
       </dependency>
       <dependency>
-        <artifactId>hbase-http</artifactId>
         <groupId>org.apache.hbase</groupId>
+        <artifactId>hbase-http</artifactId>
         <version>${project.version}</version>
       </dependency>
       <dependency>
-        <artifactId>hbase-http</artifactId>
         <groupId>org.apache.hbase</groupId>
+        <artifactId>hbase-http</artifactId>
         <version>${project.version}</version>
         <type>test-jar</type>
         <scope>test</scope>
       </dependency>
       <dependency>
-        <artifactId>hbase-server</artifactId>
         <groupId>org.apache.hbase</groupId>
+        <artifactId>hbase-server</artifactId>
         <version>${project.version}</version>
       </dependency>
       <dependency>
-        <artifactId>hbase-server</artifactId>
         <groupId>org.apache.hbase</groupId>
+        <artifactId>hbase-server</artifactId>
         <version>${project.version}</version>
         <type>test-jar</type>
         <scope>test</scope>
       </dependency>
       <dependency>
-        <artifactId>hbase-mapreduce</artifactId>
         <groupId>org.apache.hbase</groupId>
+        <artifactId>hbase-mapreduce</artifactId>
         <version>${project.version}</version>
       </dependency>
       <dependency>
-        <artifactId>hbase-mapreduce</artifactId>
         <groupId>org.apache.hbase</groupId>
+        <artifactId>hbase-mapreduce</artifactId>
         <version>${project.version}</version>
         <type>test-jar</type>
         <scope>test</scope>
       </dependency>
       <dependency>
-        <artifactId>hbase-endpoint</artifactId>
         <groupId>org.apache.hbase</groupId>
+        <artifactId>hbase-endpoint</artifactId>
         <version>${project.version}</version>
       </dependency>
       <dependency>
-        <artifactId>hbase-shell</artifactId>
         <groupId>org.apache.hbase</groupId>
+        <artifactId>hbase-shell</artifactId>
         <version>${project.version}</version>
       </dependency>
       <dependency>
-        <artifactId>hbase-shell</artifactId>
         <groupId>org.apache.hbase</groupId>
+        <artifactId>hbase-shell</artifactId>
         <version>${project.version}</version>
         <type>test-jar</type>
         <scope>test</scope>
       </dependency>
       <dependency>
-        <artifactId>hbase-thrift</artifactId>
         <groupId>org.apache.hbase</groupId>
+        <artifactId>hbase-thrift</artifactId>
         <version>${project.version}</version>
       </dependency>
       <dependency>
-        <artifactId>hbase-thrift</artifactId>
         <groupId>org.apache.hbase</groupId>
+        <artifactId>hbase-thrift</artifactId>
         <version>${project.version}</version>
         <type>test-jar</type>
         <scope>test</scope>
@@ -2073,8 +1096,8 @@
         <scope>test</scope>
       </dependency>
       <dependency>
-        <artifactId>hbase-examples</artifactId>
         <groupId>org.apache.hbase</groupId>
+        <artifactId>hbase-examples</artifactId>
         <version>${project.version}</version>
       </dependency>
       <dependency>
@@ -2083,61 +1106,61 @@
         <version>${project.version}</version>
       </dependency>
       <dependency>
-        <artifactId>hbase-it</artifactId>
         <groupId>org.apache.hbase</groupId>
+        <artifactId>hbase-it</artifactId>
         <version>${project.version}</version>
         <type>test-jar</type>
         <scope>test</scope>
       </dependency>
       <dependency>
-        <artifactId>hbase-client</artifactId>
         <groupId>org.apache.hbase</groupId>
+        <artifactId>hbase-client</artifactId>
         <version>${project.version}</version>
       </dependency>
       <dependency>
-        <artifactId>hbase-client</artifactId>
         <groupId>org.apache.hbase</groupId>
+        <artifactId>hbase-client</artifactId>
         <version>${project.version}</version>
         <type>test-jar</type>
         <scope>test</scope>
       </dependency>
       <dependency>
-        <artifactId>hbase-metrics-api</artifactId>
         <groupId>org.apache.hbase</groupId>
+        <artifactId>hbase-metrics-api</artifactId>
         <version>${project.version}</version>
       </dependency>
       <dependency>
-        <artifactId>hbase-metrics-api</artifactId>
         <groupId>org.apache.hbase</groupId>
+        <artifactId>hbase-metrics-api</artifactId>
         <version>${project.version}</version>
         <type>test-jar</type>
         <scope>test</scope>
       </dependency>
       <dependency>
-        <artifactId>hbase-metrics</artifactId>
         <groupId>org.apache.hbase</groupId>
+        <artifactId>hbase-metrics</artifactId>
         <version>${project.version}</version>
       </dependency>
       <dependency>
-        <artifactId>hbase-metrics</artifactId>
         <groupId>org.apache.hbase</groupId>
+        <artifactId>hbase-metrics</artifactId>
         <version>${project.version}</version>
         <type>test-jar</type>
         <scope>test</scope>
       </dependency>
       <dependency>
-        <artifactId>hbase-rest</artifactId>
         <groupId>org.apache.hbase</groupId>
+        <artifactId>hbase-rest</artifactId>
         <version>${project.version}</version>
       </dependency>
       <dependency>
-        <artifactId>hbase-resource-bundle</artifactId>
         <groupId>org.apache.hbase</groupId>
+        <artifactId>hbase-resource-bundle</artifactId>
         <version>${project.version}</version>
       </dependency>
       <dependency>
-        <artifactId>hbase-zookeeper</artifactId>
         <groupId>org.apache.hbase</groupId>
+        <artifactId>hbase-zookeeper</artifactId>
         <version>${project.version}</version>
         <exclusions>
           <exclusion>
@@ -2151,15 +1174,15 @@
         </exclusions>
       </dependency>
       <dependency>
-        <artifactId>hbase-zookeeper</artifactId>
         <groupId>org.apache.hbase</groupId>
+        <artifactId>hbase-zookeeper</artifactId>
         <version>${project.version}</version>
         <type>test-jar</type>
         <scope>test</scope>
       </dependency>
       <dependency>
-        <artifactId>hbase-hbtop</artifactId>
         <groupId>org.apache.hbase</groupId>
+        <artifactId>hbase-hbtop</artifactId>
         <version>${project.version}</version>
       </dependency>
       <dependency>
@@ -2674,7 +1697,7 @@
       </dependency>
       <dependency>
         <groupId>com.sun.xml.ws</groupId>
-          <artifactId>jaxws-ri</artifactId>
+        <artifactId>jaxws-ri</artifactId>
         <version>2.3.2</version>
         <type>pom</type>
         <exclusions>
@@ -2697,6 +1720,1273 @@
       <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>
+            <source>${compileSource}</source>
+            <target>${compileSource}</target>
+            <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>
+            <trimStackTrace>false</trimStackTrace>
+            <skip>${surefire.skipFirstPart}</skip>
+            <forkCount>${surefire.firstPartForkCount}</forkCount>
+            <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>
+                <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>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>
+                </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>
+        <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>
+          <dependency>
+            <groupId>org.jruby</groupId>
+            <artifactId>jruby-complete</artifactId>
+            <version>${jruby.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>
+          <!-- optional: limit format enforcement to just the files changed from this point -->
+          <ratchetFrom>620e5c6d0af57ddb67e18bb97725e1d87ffb5fe5</ratchetFrom>
+          <!-- define a language-specific format -->
+          <java>
+            <!-- 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>
+            <!-- make sure every file has the following copyright header.
+              optionally, Spotless can set copyright years by digging
+              through git history (see "license" section below) -->
+            <licenseHeader>
+              <file>${session.executionRootDirectory}/dev-support/license-header</file>
+            </licenseHeader>
+          </java>
+          <pom>
+            <sortPom>
+              <expandEmptyElements>false</expandEmptyElements>
+            </sortPom>
+          </pom>
+        </configuration>
+      </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>${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 [...]
+              <!-- 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>${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 [...]
+              <!-- 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 )
@@ -2731,8 +3021,7 @@
       </activation>
       <build>
         <pluginManagement>
-          <plugins>
-          </plugins>
+          <plugins/>
         </pluginManagement>
       </build>
     </profile>
@@ -2760,7 +3049,7 @@
       <activation>
         <activeByDefault>false</activeByDefault>
         <property>
-            <name>HBasePatchProcess</name>
+          <name>HBasePatchProcess</name>
         </property>
       </activation>
       <properties>
@@ -2774,10 +3063,10 @@
             <inherited>false</inherited>
             <executions>
               <execution>
-                <phase>validate</phase>
                 <goals>
                   <goal>run</goal>
                 </goals>
+                <phase>validate</phase>
                 <configuration>
                   <tasks>
                     <echo>Maven Execution Environment</echo>
@@ -2801,6 +3090,14 @@
             <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>
@@ -2810,20 +3107,12 @@
               </execution>
               <execution>
                 <id>report</id>
-                <phase>prepare-package</phase>
                 <goals>
                   <goal>report</goal>
                 </goals>
+                <phase>prepare-package</phase>
               </execution>
             </executions>
-            <configuration>
-              <systemPropertyVariables>
-                <jacoco-agent.destfile>target/jacoco.exec</jacoco-agent.destfile>
-              </systemPropertyVariables>
-              <excludes>
-                <exclude>**/generated/**/*.class</exclude>
-              </excludes>
-            </configuration>
           </plugin>
         </plugins>
       </build>
@@ -2895,10 +3184,10 @@
             <artifactId>apache-rat-plugin</artifactId>
             <executions>
               <execution>
-                <phase>package</phase>
                 <goals>
                   <goal>check</goal>
                 </goals>
+                <phase>package</phase>
               </execution>
             </executions>
           </plugin>
@@ -2906,30 +3195,29 @@
             <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>
-            </dependencies>
             <configuration>
               <rules>
                 <enforceBytecodeVersion>
-                <maxJdkVersion>${compileSource}</maxJdkVersion>
-                <message>HBase has unsupported dependencies.
+                  <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>
+  '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>
@@ -2943,370 +3231,372 @@
     <profile>
       <id>hadoop-3.0</id>
       <activation>
-        <property><name>!hadoop.profile</name></property>
+        <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.sun.jersey</groupId>
-               <artifactId>jersey-core</artifactId>
-             </exclusion>
-             <exclusion>
-               <groupId>org.codehaus.jackson</groupId>
-               <artifactId>jackson-jaxrs</artifactId>
-             </exclusion>
-             <exclusion>
-               <groupId>org.codehaus.jackson</groupId>
-               <artifactId>jackson-xc</artifactId>
-             </exclusion>
-             <exclusion>
-               <groupId>io.netty</groupId>
-               <artifactId>netty</artifactId>
-             </exclusion>
-             <exclusion>
-               <groupId>io.netty</groupId>
-               <artifactId>netty-all</artifactId>
-             </exclusion>
+      <dependencyManagement>
+        <dependencies>
+          <dependency>
+            <groupId>org.apache.hadoop</groupId>
+            <artifactId>hadoop-mapreduce-client-core</artifactId>
+            <version>${hadoop-three.version}</version>
+            <exclusions>
+              <exclusion>
+                <groupId>com.sun.jersey</groupId>
+                <artifactId>jersey-core</artifactId>
+              </exclusion>
+              <exclusion>
+                <groupId>org.codehaus.jackson</groupId>
+                <artifactId>jackson-jaxrs</artifactId>
+              </exclusion>
+              <exclusion>
+                <groupId>org.codehaus.jackson</groupId>
+                <artifactId>jackson-xc</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>org.codehaus.jackson</groupId>
+                <artifactId>jackson-core-asl</artifactId>
+              </exclusion>
+              <exclusion>
+                <groupId>org.codehaus.jackson</groupId>
+                <artifactId>jackson-mapper-asl</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>
+            </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>org.codehaus.jackson</groupId>
+                <artifactId>jackson-jaxrs</artifactId>
+              </exclusion>
+              <exclusion>
+                <groupId>org.codehaus.jackson</groupId>
+                <artifactId>jackson-xc</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>
+            </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>
+            </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>
+            </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>jackson-core-asl</artifactId>
+              </exclusion>
+              <exclusion>
+                <groupId>org.codehaus.jackson</groupId>
+                <artifactId>jackson-mapper-asl</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>
+            </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>jackson-core-asl</artifactId>
+              </exclusion>
+              <exclusion>
+                <groupId>org.codehaus.jackson</groupId>
+                <artifactId>jackson-mapper-asl</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>
+            </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>
+            </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>
+            </exclusions>
+          </dependency>
+          <dependency>
+            <groupId>org.apache.hadoop</groupId>
+            <artifactId>hadoop-common</artifactId>
+            <version>${hadoop-three.version}</version>
+            <exclusions>
               <exclusion>
-                <groupId>javax.servlet</groupId>
-                <artifactId>servlet-api</artifactId>
+                <groupId>com.sun.jersey</groupId>
+                <artifactId>jersey-core</artifactId>
               </exclusion>
               <exclusion>
-                <groupId>javax.inject</groupId>
-                <artifactId>javax.inject</artifactId>
+                <groupId>com.sun.jersey</groupId>
+                <artifactId>jersey-json</artifactId>
               </exclusion>
               <exclusion>
-                <groupId>org.codehaus.jackson</groupId>
-                <artifactId>jackson-core-asl</artifactId>
+                <groupId>com.sun.jersey</groupId>
+                <artifactId>jersey-servlet</artifactId>
               </exclusion>
               <exclusion>
-                <groupId>org.codehaus.jackson</groupId>
-                <artifactId>jackson-mapper-asl</artifactId>
+                <groupId>com.sun.jersey</groupId>
+                <artifactId>jersey-server</artifactId>
               </exclusion>
               <exclusion>
-                <groupId>com.google.guava</groupId>
-                <artifactId>guava</artifactId>
+                <groupId>javax.servlet.jsp</groupId>
+                <artifactId>jsp-api</artifactId>
               </exclusion>
               <exclusion>
-                <groupId>org.slf4j</groupId>
-                <artifactId>slf4j-log4j12</artifactId>
+                <groupId>javax.servlet</groupId>
+                <artifactId>javax.servlet-api</artifactId>
               </exclusion>
               <exclusion>
-                <groupId>log4j</groupId>
-                <artifactId>log4j</artifactId>
+                <groupId>stax</groupId>
+                <artifactId>stax-api</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>org.codehaus.jackson</groupId>
-               <artifactId>jackson-jaxrs</artifactId>
-             </exclusion>
-             <exclusion>
-               <groupId>org.codehaus.jackson</groupId>
-               <artifactId>jackson-xc</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>
+                <groupId>io.netty</groupId>
+                <artifactId>netty</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>
+              <!-- 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>javax.servlet</groupId>
-                <artifactId>servlet-api</artifactId>
+                <groupId>com.google.code.findbugs</groupId>
+                <artifactId>jsr305</artifactId>
               </exclusion>
-             <exclusion>
-               <groupId>org.slf4j</groupId>
-               <artifactId>slf4j-log4j12</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>
+                <groupId>junit</groupId>
+                <artifactId>junit</artifactId>
+              </exclusion>
+              <exclusion>
+                <groupId>org.codehause.jackson</groupId>
+                <artifactId>jackson-core-asl</artifactId>
+              </exclusion>
+              <exclusion>
+                <groupId>org.codehause.jackson</groupId>
+                <artifactId>jackson-mapper-asl</artifactId>
               </exclusion>
               <exclusion>
                 <groupId>org.slf4j</groupId>
                 <artifactId>slf4j-log4j12</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>jackson-core-asl</artifactId>
-             </exclusion>
-             <exclusion>
-               <groupId>org.codehaus.jackson</groupId>
-               <artifactId>jackson-mapper-asl</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>
-           </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>jackson-core-asl</artifactId>
-             </exclusion>
-             <exclusion>
-               <groupId>org.codehaus.jackson</groupId>
-               <artifactId>jackson-mapper-asl</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>
-           </exclusions>
-         </dependency>
-         <dependency>
-           <groupId>org.apache.hadoop</groupId>
-           <artifactId>hadoop-hdfs</artifactId>
-           <version>${hadoop-three.version}</version>
-           <type>test-jar</type>
-           <classifier>tests</classifier>
-           <scope>test</scope>
-           <exclusions>
-             <exclusion>
-               <groupId>com.sun.jersey</groupId>
-               <artifactId>jersey-core</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>
-           </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.codehause.jackson</groupId>
-               <artifactId>jackson-core-asl</artifactId>
-             </exclusion>
-             <exclusion>
-               <groupId>org.codehause.jackson</groupId>
-               <artifactId>jackson-mapper-asl</artifactId>
-             </exclusion>
-             <exclusion>
-               <groupId>org.slf4j</groupId>
-               <artifactId>slf4j-log4j12</artifactId>
-             </exclusion>
-             <exclusion>
-               <groupId>log4j</groupId>
-               <artifactId>log4j</artifactId>
-             </exclusion>
+              <exclusion>
+                <groupId>log4j</groupId>
+                <artifactId>log4j</artifactId>
+              </exclusion>
               <exclusion>
                 <groupId>io.netty</groupId>
                 <artifactId>netty</artifactId>
@@ -3315,63 +3605,63 @@
                 <groupId>io.netty</groupId>
                 <artifactId>netty-all</artifactId>
               </exclusion>
-           </exclusions>
-         </dependency>
-         <dependency>
-           <!--
+            </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>
-           <type>test-jar</type>
-           <classifier>tests</classifier>
-           <version>${hadoop-three.version}</version>
-           <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>io.netty</groupId>
-               <artifactId>netty-all</artifactId>
-             </exclusion>
-           </exclusions>
-         </dependency>
-         <dependency>
-           <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.
+            <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>io.netty</groupId>
+                <artifactId>netty-all</artifactId>
+              </exclusion>
+            </exclusions>
+          </dependency>
+          <dependency>
+            <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>
+          <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
@@ -3384,69 +3674,69 @@
                <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>
-           </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>
-           </exclusions>
-         </dependency>
-         <dependency>
-           <groupId>org.apache.hadoop</groupId>
-           <artifactId>hadoop-distcp</artifactId>
-           <version>${hadoop-three.version}</version>
-         </dependency>
+              <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>
+            </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>
+            </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>
+          <dependency>
+            <groupId>org.apache.hadoop</groupId>
+            <artifactId>hadoop-hdfs-client</artifactId>
+            <version>${hadoop-three.version}</version>
+          </dependency>
+        </dependencies>
+      </dependencyManagement>
 
     </profile>
     <!-- profiles for the tests
@@ -3539,9 +3829,8 @@
       <properties>
         <surefire.skipFirstPart>false</surefire.skipFirstPart>
         <surefire.skipSecondPart>true</surefire.skipSecondPart>
-        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.MiscTests
-        </surefire.firstPartGroups>
-        <surefire.secondPartGroups></surefire.secondPartGroups>
+        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.MiscTests</surefire.firstPartGroups>
+        <surefire.secondPartGroups/>
       </properties>
     </profile>
     <profile>
@@ -3554,10 +3843,8 @@
         <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></surefire.secondPartGroups>
+        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.CoprocessorTests</surefire.firstPartGroups>
+        <surefire.secondPartGroups/>
       </properties>
     </profile>
     <profile>
@@ -3570,9 +3857,8 @@
         <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></surefire.secondPartGroups>
+        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.ClientTests</surefire.firstPartGroups>
+        <surefire.secondPartGroups/>
       </properties>
     </profile>
     <profile>
@@ -3585,9 +3871,8 @@
         <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></surefire.secondPartGroups>
+        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.MasterTests</surefire.firstPartGroups>
+        <surefire.secondPartGroups/>
       </properties>
     </profile>
     <profile>
@@ -3600,9 +3885,8 @@
         <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></surefire.secondPartGroups>
+        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.MapredTests</surefire.firstPartGroups>
+        <surefire.secondPartGroups/>
       </properties>
     </profile>
     <profile>
@@ -3615,9 +3899,8 @@
         <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></surefire.secondPartGroups>
+        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.MapReduceTests</surefire.firstPartGroups>
+        <surefire.secondPartGroups/>
       </properties>
     </profile>
     <profile>
@@ -3630,10 +3913,8 @@
         <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></surefire.secondPartGroups>
+        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.RegionServerTests</surefire.firstPartGroups>
+        <surefire.secondPartGroups/>
       </properties>
     </profile>
     <profile>
@@ -3646,10 +3927,8 @@
         <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></surefire.secondPartGroups>
+        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.VerySlowMapReduceTests</surefire.firstPartGroups>
+        <surefire.secondPartGroups/>
       </properties>
     </profile>
 
@@ -3663,10 +3942,8 @@
         <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></surefire.secondPartGroups>
+        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.VerySlowRegionServerTests</surefire.firstPartGroups>
+        <surefire.secondPartGroups/>
       </properties>
     </profile>
 
@@ -3680,9 +3957,8 @@
         <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></surefire.secondPartGroups>
+        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.FilterTests</surefire.firstPartGroups>
+        <surefire.secondPartGroups/>
       </properties>
     </profile>
     <profile>
@@ -3695,9 +3971,8 @@
         <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></surefire.secondPartGroups>
+        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.IOTests</surefire.firstPartGroups>
+        <surefire.secondPartGroups/>
       </properties>
     </profile>
     <profile>
@@ -3710,9 +3985,8 @@
         <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></surefire.secondPartGroups>
+        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.RestTests</surefire.firstPartGroups>
+        <surefire.secondPartGroups/>
       </properties>
     </profile>
     <profile>
@@ -3725,9 +3999,8 @@
         <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></surefire.secondPartGroups>
+        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.RPCTests</surefire.firstPartGroups>
+        <surefire.secondPartGroups/>
       </properties>
     </profile>
     <profile>
@@ -3740,10 +4013,8 @@
         <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></surefire.secondPartGroups>
+        <surefire.firstPartGroups>org.apache.hadoop.hbase.testclassification.ReplicationTests</surefire.firstPartGroups>
+        <surefire.secondPartGroups/>
       </properties>
     </profile>
     <profile>
@@ -3756,563 +4027,271 @@
         <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></surefire.secondPartGroups>
+        <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></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></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></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>
-                <phase>process-sources</phase>
-                <goals>
-                  <goal>setup</goal>
-                </goals>
-              </execution>
-              <execution>
-                <id>clover</id>
-                <phase>site</phase>
-                <goals>
-                  <goal>clover</goal>
-                </goals>
-              </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></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>
+      <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>aarch64</id>
+      <id>runZKTests</id>
+      <activation>
+        <activeByDefault>false</activeByDefault>
+      </activation>
       <properties>
-        <external.protobuf.groupid>org.openlabtesting.protobuf</external.protobuf.groupid>
+        <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>
-        <os>
-          <family>linux</family>
-          <arch>aarch64</arch>
-        </os>
+        <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>
-  </profiles>
-  <!-- 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>
-        <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>
-        <!-- see src/site/site.xml for selected reports -->
-        <configuration>
-          <dependencyLocationsEnabled>false</dependencyLocationsEnabled>
-        </configuration>
-      </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>${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.hbas [...]
-              </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>
+    <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>
-              <doclet>
-                org.apache.yetus.audience.tools.IncludePublicAnnotationsStandardDoclet
-              </doclet>
-              <docletArtifact>
-                <groupId>org.apache.yetus</groupId>
-                <artifactId>audience-annotations</artifactId>
-                <version>${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.hbas [...]
-              </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>
+              <includesAllSourceRoots>true</includesAllSourceRoots>
+              <includesTestSourceRoots>true</includesTestSourceRoots>
+              <targetPercentage>50%</targetPercentage>
+              <generateHtml>true</generateHtml>
+              <generateXml>true</generateXml>
+              <excludes>
+                <exclude>**/generated/**</exclude>
+              </excludes>
             </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>
-  <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>
+            <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>