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


  ON MVN COMPILE NOT WORKING

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

-->
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.apache</groupId>
    <artifactId>apache</artifactId>
    <version>23</version>
    <relativePath/>
    <!-- no parent resolution -->
  </parent>
  <groupId>org.apache.hbase.operator.tools</groupId>
  <artifactId>hbase-operator-tools</artifactId>
  <version>1.3.0-SNAPSHOT</version>
  <name>Apache HBase Operator Tools</name>
  <packaging>pom</packaging>
  <description>
    Operator Tools for Apache HBase.
  </description>
  <url>http://hbase.apache.org</url>
  <inceptionYear>2018</inceptionYear>
  <licenses>
    <license>
      <name>Apache License, Version 2.0</name>
      <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
      <distribution>repo</distribution>
    </license>
  </licenses>
  <modules>
    <module>hbase-table-reporter</module>
    <module>hbase-hbck2</module>
    <!--Add an assembly module because of http://maven.apache.org/plugins/maven-assembly-plugin/faq.html#module-binaries
         -->
    <module>hbase-operator-tools-assembly</module>
      <module>hbase-tools</module>
  </modules>
  <scm>
    <connection>scm:git:git://gitbox.apache.org/repos/asf/hbase-operator-tools.git</connection>
    <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/hbase-operator-tools.git</developerConnection>
    <url>https://gitbox.apache.org/repos/asf?p=hbase-operator-tools.git;a=summary</url>
  </scm>
  <issueManagement>
    <!--File issues for this project against Apache HBase JIRA-->
    <system>JIRA</system>
    <url>http://issues.apache.org/jira/browse/HBASE</url>
  </issueManagement>
  <ciManagement>
    <system>hudson</system>
    <url>http://hudson.zones.apache.org/hudson/view/HBase/job/HBase-TRUNK/</url>
  </ciManagement>
  <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>http://mail-archives.apache.org/mod_mbox/hbase-user/</archive>
      <otherArchives>
        <otherArchive>http://dir.gmane.org/gmane.comp.java.hadoop.hbase.user</otherArchive>
        <otherArchive>http://search-hadoop.com/?q=&amp;fc_project=HBase</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>http://mail-archives.apache.org/mod_mbox/hbase-dev/</archive>
      <otherArchives>
        <otherArchive>http://dir.gmane.org/gmane.comp.java.hadoop.hbase.devel</otherArchive>
        <otherArchive>http://search-hadoop.com/?q=&amp;fc_project=HBase</otherArchive>
      </otherArchives>
    </mailingList>
    <mailingList>
      <name>Commits List</name>
      <subscribe>commits-subscribe@hbase.apache.org</subscribe>
      <unsubscribe>commits-unsubscribe@hbase.apache.org</unsubscribe>
      <archive>http://mail-archives.apache.org/mod_mbox/hbase-commits/</archive>
    </mailingList>
    <mailingList>
      <name>Issues List</name>
      <subscribe>issues-subscribe@hbase.apache.org</subscribe>
      <unsubscribe>issues-unsubscribe@hbase.apache.org</unsubscribe>
      <archive>http://mail-archives.apache.org/mod_mbox/hbase-issues/</archive>
    </mailingList>
    <mailingList>
      <name>Builds List</name>
      <subscribe>builds-subscribe@hbase.apache.org</subscribe>
      <unsubscribe>builds-unsubscribe@hbase.apache.org</unsubscribe>
      <archive>http://mail-archives.apache.org/mod_mbox/hbase-builds/</archive>
    </mailingList>
  </mailingLists>
  <developers/>
  <!--TODO-->
  <properties>
    <maven.javadoc.skip>true</maven.javadoc.skip>
    <maven.build.timestamp.format>
      yyyy-MM-dd'T'HH:mm
    </maven.build.timestamp.format>
    <buildDate>${maven.build.timestamp}</buildDate>
    <compileSource>1.8</compileSource>
    <java.min.version>${compileSource}</java.min.version>
    <maven.min.version>3.3.3</maven.min.version>
    <hbase.version>2.4.4</hbase.version>
    <hbase-thirdparty.version>2.2.1</hbase-thirdparty.version>
    <log4j2.version>2.17.1</log4j2.version>
    <surefire.provider>surefire-junit47</surefire.provider>
    <test.output.tofile>true</test.output.tofile>
    <checkstyle.version>8.18</checkstyle.version>
    <junit.version>4.12</junit.version>
    <maven.checkstyle.version>3.0.0</maven.checkstyle.version>
    <hbase.checkstyle.version>2.2.0</hbase.checkstyle.version>
    <enforcer.version>3.0.0-M2</enforcer.version>
    <extra.enforcer.version>1.0-beta-9</extra.enforcer.version>
    <findbugs-annotations.version>1.3.9-1</findbugs-annotations.version>
  </properties>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-zookeeper</artifactId>
        <version>${hbase.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase.operator.tools</groupId>
        <artifactId>hbase-hbck2</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hbase.operator.tools</groupId>
        <artifactId>hbase-tools</artifactId>
        <version>${project.version}</version>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-dependency-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.codehaus.mojo</groupId>
          <artifactId>build-helper-maven-plugin</artifactId>
          <version>1.9.1</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <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>
            <failIfNoTests>false</failIfNoTests>
            <reuseForks>false</reuseForks>
            <testFailureIgnore>${surefire.testFailureIgnore}</testFailureIgnore>
            <forkedProcessTimeoutInSeconds>${surefire.timeout}</forkedProcessTimeoutInSeconds>
            <redirectTestOutputToFile>${test.output.tofile}</redirectTestOutputToFile>
            <systemPropertyVariables>
              <test.build.classes>${test.build.classes}</test.build.classes>
            </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>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-clean-plugin</artifactId>
          <configuration>
            <filesets>
              <fileset>
                <!--dfs tests have build dir hardcoded. Clean it as part of
               clean target-->
                <directory>build</directory>
              </fileset>
            </filesets>
          </configuration>
        </plugin>
        <plugin>
          <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>**/.idea/**</exclude>
              <exclude>**/*.iml</exclude>
              <exclude>**/CHANGES.txt</exclude>
              <exclude>**/generated/**</exclude>
              <exclude>**/gen-*/**</exclude>
              <exclude>**/*.avpr</exclude>
              <exclude>**/*.svg</exclude>
              <!-- vector graphics -->
              <exclude>**/*.vm</exclude>
              <!--  exclude source control files -->
              <exclude>.git/**</exclude>
              <exclude>**/.settings/**</exclude>
              <exclude>**/patchprocess/**</exclude>
              <exclude>**/dependency-reduced-pom.xml</exclude>
              <exclude>**/rat.txt</exclude>
              <exclude>**/README.txt</exclude>
              <exclude>**/vote.tmpl</exclude>
            </excludes>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>buildnumber-maven-plugin</artifactId>
          <version>1.4</version>
          <executions>
            <execution>
              <phase>validate</phase>
              <goals>
                <goal>create-timestamp</goal>
              </goals>
            </execution>
          </executions>
          <configuration>
            <timestampFormat>yyyy</timestampFormat>
            <timestampPropertyName>build.year</timestampPropertyName>
          </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>${hbase.checkstyle.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>build-support/checkstyle-suppressions.xml</suppressionsLocation>
            <includeTestSourceDirectory>true</includeTestSourceDirectory>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <artifactId>maven-clean-plugin</artifactId>
        <configuration>
          <filesets>
            <fileset>
              <directory>${basedir}</directory>
              <includes>
                <include>dependency-reduced-pom.xml</include>
              </includes>
            </fileset>
          </filesets>
        </configuration>
      </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>
        </dependencies>
        <!-- version set by parent -->
        <executions>
          <execution>
            <id>min-maven-min-java-banned-xerces</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <!-- 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: http://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.
  See the reference guide on building for more information: http://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>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
      </plugin>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <!--Defer to the hbase-assembly sub-module. It does all assembly.
               We have dedicated assembly module because of
               http://maven.apache.org/plugins/maven-assembly-plugin/faq.html#module-binaries
               -->
          <skipAssembly>true</skipAssembly>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <profiles>
    <!-- this profile should be activated for release builds -->
    <profile>
      <id>release</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.rat</groupId>
            <artifactId>apache-rat-plugin</artifactId>
            <executions>
              <execution>
                <phase>package</phase>
                <goals>
                  <goal>check</goal>
                </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>
            </dependencies>
            <configuration>
              <rules>
                <enforceBytecodeVersion>
                  <maxJdkVersion>${compileSource}</maxJdkVersion>
                  <message>HBase has unsupported dependencies.
  HBase requires that all dependencies be compiled with version ${compileSource} or earlier
  of the JDK to properly build from source.  You appear to be using a newer dependency. You can use
  either "mvn -version" or "mvn enforcer:display-info" to verify what version is active.
  Non-release builds can temporarily build with a newer JDK version by setting the
  'compileSource' property (eg. mvn -DcompileSource=1.8 clean package).
                  </message>
                  <ignoreClasses>
                    <ignoreClass>module-info</ignoreClass>
                  </ignoreClasses>
                </enforceBytecodeVersion>
              </rules>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- this profile should match the name of the release profile in the root asf pom -->
    <profile>
      <id>apache-release</id>
      <build>
        <plugins>
          <!-- This should insert itself in place of the normal deploy plugin and then
               handle either closing or dropping the staging repository for us depending
               on if the build succeeds.
            -->
          <plugin>
            <groupId>org.sonatype.plugins</groupId>
            <artifactId>nexus-staging-maven-plugin</artifactId>
            <version>1.6.8</version>
            <extensions>true</extensions>
            <configuration>
              <nexusUrl>https://repository.apache.org/</nexusUrl>
              <serverId>apache.releases.https</serverId>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>
