<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright 2015 Google LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

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

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.google.cloud.bigtable</groupId>
  <artifactId>bigtable-client-parent</artifactId>
  <version>2.12.0</version> <!-- {x-version-update:bigtable-client-parent:current} -->
  <packaging>pom</packaging>
  <name>${project.groupId}:${project.artifactId}</name>
  <url>https://cloud.google.com/bigtable/</url>
  <description>
    This is a client to access Cloud Bigtable
    (https://cloud.google.com/bigtable/) via the HBase APIs.
  </description>
  <!-- TODO: improve the description -->

  <parent>
    <groupId>com.google.cloud</groupId>
    <artifactId>google-cloud-shared-config</artifactId>
    <version>1.5.8</version>
  </parent>

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

  <modules>
    <module>bigtable-client-core-parent</module>
    <module>bigtable-hbase-1.x-parent</module>
    <module>bigtable-hbase-2.x-parent</module>
    <module>bigtable-dataflow-parent</module>
    <module>bigtable-test</module>
    <module>hbase-migration-tools</module>
  </modules>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

    <!-- core dependency versions -->
    <bigtable.version>2.28.0</bigtable.version>
    <google-cloud-bigtable-emulator.version>0.165.0</google-cloud-bigtable-emulator.version>
    <bigtable-client-core.version>1.28.0</bigtable-client-core.version>
    <grpc-conscrypt.version>2.5.2</grpc-conscrypt.version>
    <!--  keeping at this version to align with hbase-->
    <slf4j.version>1.7.25</slf4j.version>
    <commons-logging.version>1.2</commons-logging.version>
    <jsr305.version>3.0.2</jsr305.version>
    <reload4j.version>1.2.24</reload4j.version>

    <!-- hbase dependency versions -->
    <hbase1.version>1.7.2</hbase1.version>
    <hbase1-metrics.version>3.1.2</hbase1-metrics.version>
    <hbase2.version>2.3.6</hbase2.version>
    <hbase2-metrics.version>3.2.6</hbase2-metrics.version>

    <!-- bytebuddy dependency version for resolving hbase backward incompatible changes -->
    <byte.buddy.version>1.14.2</byte.buddy.version>

    <!-- testing dependency versions -->
    <commons-lang.version>2.6</commons-lang.version>
    <junit.version>4.13.2</junit.version>
    <junit-vintage-engine.version>5.9.2</junit-vintage-engine.version>
    <hamcrest.version>1.3</hamcrest.version>
    <mockito.version>4.11.0</mockito.version>
    <beam.version>2.43.0</beam.version>
    <!-- referred from bigtable-beam-import and bigtable-emulator -->
    <guava.version>31.1-jre</guava.version>
    <gcs-guava.version>29.0-jre</gcs-guava.version>
    <beam-slf4j.version>1.7.30</beam-slf4j.version>
    <opencensus.version>0.31.1</opencensus.version>

    <!-- Benchmarks related dependencies -->
    <jmh.version>1.36</jmh.version>

    <!-- Enable the ability to skip unit tests and only run integration tests,
         while still respecting global skipTests override. -->
    <skipTests>false</skipTests>
    <skipUnitTests>${skipTests}</skipUnitTests>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <scm>
    <connection>
      scm:git:git@github.com:googleapis/java-bigtable-hbase.git
    </connection>
    <developerConnection>
      scm:git:git@github.com:googleapis/java-bigtable-hbase.git
    </developerConnection>
    <url>https://github.com/googleapis/java-bigtable-hbase</url>
    <tag>HEAD</tag>
  </scm>

  <developers>
    <developer>
      <organization>Google</organization>
      <organizationUrl>http://www.google.com</organizationUrl>
    </developer>
  </developers>

  <issueManagement>
    <system>GitHub Issues</system>
    <url>https://github.com/googleapis/java-bigtable-hbase/issues</url>
  </issueManagement>

  <build>
    <testResources>
      <testResource>
        <directory>src/test/resources</directory>
        <!-- enable system property substitution. -->
        <filtering>true</filtering>
      </testResource>
    </testResources>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>3.0.0-M2</version>
        </plugin>

        <!-- Augment google-cloud-shared-config config to exclude non-compile deps -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-dependency-plugin</artifactId>
          <configuration>
            <ignoreNonCompile>true</ignoreNonCompile>
          </configuration>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>3.0.0</version>
          <configuration>
            <trimStackTrace>false</trimStackTrace>
            <!-- enable the ability to skip unit tests, while running integration tests -->
            <skipTests>${skipUnitTests}</skipTests>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-failsafe-plugin</artifactId>
          <version>3.0.0</version>
          <configuration>
            <trimStackTrace>false</trimStackTrace>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-shade-plugin</artifactId>
          <!-- MSHADE-419: 3.3.0 Shade plugin causes pom to be created without compile dependencies -->
          <version>3.2.4</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>3.5.0</version>
          <configuration>
            <doclint>none</doclint>
            <windowtitle>
              Cloud Bigtable HBase Client for Java API
            </windowtitle>
            <doctitle>
              Cloud Bigtable HBase Client for Java API
            </doctitle>
            <overview>../overview.html</overview>
            <bottom><![CDATA[<br>]]></bottom>

            <offlineLinks>
              <offlineLink>
                <url>
                  https://google.github.io/guava/releases/27.0-jre/api/docs/
                </url>
                <location>${basedir}/javadoc/guava-docs</location>
              </offlineLink>
              <offlineLink>
                <url>https://hbase.apache.org/2.0/devapidocs/</url>
                <location>${basedir}/javadoc/hbase-docs</location>
              </offlineLink>
              <offlineLink>
                <url>
                  https://static.javadoc.io/com.google.protobuf/protobuf-java/3.6.1/
                </url>
                <location>${basedir}/javadoc/protobuf-docs</location>
              </offlineLink>
            </offlineLinks>
          </configuration>
          <executions>
            <execution>
              <id>attach-javadocs</id>
              <goals>
                <goal>jar</goal>
              </goals>
              <phase>package</phase>
              <configuration>
                <!--
                javadoc excluded packages:
                    com.google.clooud.*                             (Ignore, a hack/workaround for separate maven issue)
                -->
                <excludePackageNames>com.google.clooud</excludePackageNames>
              </configuration>
            </execution>
            <execution>
              <id>default-cli</id>
              <configuration>
                <!--
                javadoc excluded packages:
                    com.google.cloud.bigtable.beam{.sequencefiles}  (Breaks with javadoc:aggregate, handled separately)
                    com.google.cloud.bigtable.dataflow{import,}     (Breaks with javadoc:aggregate, handled separately)
                    com.google.clooud.*                             (Ignore, a hack/workaround for separate maven issue)
                -->
                <excludePackageNames>
                  com.google.cloud.bigtable.beam:com.google.cloud.bigtable.beam.sequencefiles:com.google.cloud.bigtable.dataflow:com.google.cloud.bigtable.dataflowimport:com.google.clooud
                </excludePackageNames>
              </configuration>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <executions>
          <execution>
            <id>enforce-version-consistency</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <requireSameVersions>
                  <dependencies>
                    <dependency>io.grpc:*</dependency>
                  </dependencies>
                </requireSameVersions>
                <requireSameVersions>
                  <dependencies>
                    <dependency>com.google.cloud:google-cloud-bigtable</dependency>
                    <dependency>com.google.api.grpc:proto-google-cloud-bigtable-v2</dependency>
                    <dependency>com.google.api.grpc:grpc-google-cloud-bigtable-v2</dependency>
                    <dependency>com.google.api.grpc:proto-google-cloud-bigtable-admin-v2</dependency>
                    <dependency>com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2</dependency>
                  </dependencies>
                </requireSameVersions>
                <requireSameVersions>
                  <dependencies>
                    <dependency>com.google.auth:*</dependency>
                  </dependencies>
                </requireSameVersions>
                <requireSameVersions>
                  <dependencies>
                    <dependency>com.google.api:gax</dependency>
                    <dependency>com.google.api:gax-grpc</dependency>
                  </dependencies>
                </requireSameVersions>
                <requireSameVersions>
                  <dependencies>
                    <dependency>org.apache.beam:beam-sdks-*</dependency>
                    <dependency>org.apache.beam:beam-model-*</dependency>
                  </dependencies>
                </requireSameVersions>
                <requireSameVersions>
                  <dependencies>
                    <dependency>io.netty:netty-all</dependency>
                    <dependency>io.netty:netty-codec*</dependency>
                    <dependency>io.netty:netty-handler*</dependency>
                    <dependency>io.netty:netty-common</dependency>
                    <dependency>io.netty:netty-resolver</dependency>
                    <dependency>io.netty:netty-buffer</dependency>
                    <dependency>io.netty:netty-transport</dependency>
                    <!-- Everything but netty-tcnative-boringssl-static -->
                  </dependencies>
                </requireSameVersions>
                <requireSameVersions>
                  <dependencies>
                    <dependency>com.google.auto.value</dependency>
                  </dependencies>
                </requireSameVersions>
                <requireSameVersions>
                  <dependencies>
                    <dependency>org.hamcrest:*</dependency>
                  </dependencies>
                </requireSameVersions>
                <requireSameVersions>
                  <dependencies>
                    <dependency>com.google.protobuf:*</dependency>
                  </dependencies>
                </requireSameVersions>
                <requireSameVersions>
                  <dependencies>
                    <dependency>com.google.http-client:*</dependency>
                  </dependencies>
                </requireSameVersions>
                <bannedDependencies>
                  <includes>
                    <!-- gax-grpc transitvely brings in opencensus-proto, which the latest version is 0.2.0-->
                    <!-- Only allow 0.2.0 for opencensus-proto and then the latest version (currently 0.31.1) for all other modules-->
                    <!-- this will need to be updated whenever the opencensus version gets updated -->
                    <dependency>io.opencensus:*:[${opencensus.version}]</dependency>
                    <dependency>io.opencensus:opencensus-proto:[0.2.0]</dependency>
                    <!-- todo: revert this once we have a unified version -->
                    <!-- jackson-databind's latest version is 2.13.4.2, while other jackson deps' latest version is 2.13.4 -->
                    <dependency>com.fasterxml.jackson.core:jackson-databind:[2.13.4.2]</dependency>
                    <dependency>com.fasterxml.jackson.core:[2.13.4]</dependency>
                    <dependency>com.fasterxml.jackson:*</dependency>
                  </includes>
                </bannedDependencies>
              </rules>
            </configuration>
          </execution>
          <!-- extract slf4 consistency check to own execution so it can be
          disabled for hbase-client 2.x -->
          <execution>
            <id>enforce-version-consistency-slf4j</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <requireSameVersions>
                  <dependencies>
                    <dependency>org.slf4j:*</dependency>
                  </dependencies>
                </requireSameVersions>
              </rules>
            </configuration>
          </execution>
          <execution>
            <id>enforce-banned-deps</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <bannedDependencies>
                  <excludes>
                    <exclude>commons-codec:commons-codec:[,1.15)</exclude>
                    <exclude>org.apache.commons:commons-compress:[,1.20)</exclude>
                    <!-- ban all log4j 2.x deps with CVEs -->
                    <exclude>org.apache.logging.log4j:*:[2.0-alpha1,2.16.0]</exclude>
                    <!-- ban all log4j -->
                    <exclude>log4j:log4j:*</exclude>
                  </excludes>
                </bannedDependencies>
              </rules>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  <profiles>
    <profile>
      <id>useBigtableSnapshots</id>
      <!-- use the snapshot veneer artifact to run the tests-->
      <properties>
        <bigtable.version>LATEST</bigtable.version>
      </properties>

      <repositories>
        <repository>
          <id>sonatype-snapshots</id>
          <url>https://oss.sonatype.org/content/repositories/snapshots</url>
          <releases>
            <enabled>false</enabled>
          </releases>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
        </repository>
      </repositories>
    </profile>
  </profiles>
</project>
