<?xml version="1.0" encoding="UTF-8"?>
<!--
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at
   http://www.apache.org/licenses/LICENSE-2.0
 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License. See accompanying LICENSE file.
-->
<project xmlns="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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <artifactId>hbase</artifactId>
    <groupId>org.apache.hbase</groupId>
    <version>2.4.10</version>
    <relativePath>../..</relativePath>
  </parent>
  <artifactId>hbase-shaded-with-hadoop-check-invariants</artifactId>
  <packaging>pom</packaging>

  <description>
  Enforces our invariants for our shaded artifacts. e.g. shaded clients have
  a specific set of transitive dependencies and shaded clients only contain
  classes that are in particular packages. Does the enforcement through
  the maven-enforcer-plugin and integration test.
  </description>
  <name>Apache HBase Shaded Packaging Invariants (with Hadoop bundled)</name>

  <properties>
  </properties>

  <dependencies>
    <!-- This should only be client facing artifacts that bundle
         Apache Hadoop related artifacts.
      -->
    <dependency>
      <groupId>org.apache.hbase</groupId>
      <artifactId>hbase-shaded-client</artifactId>
      <version>${project.version}</version>
    </dependency>
    <!-- parent pom defines these for children. :( :( :( -->
    <dependency>
      <groupId>com.github.stephenc.findbugs</groupId>
      <artifactId>findbugs-annotations</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <scope>provided</scope>
    </dependency>
    <!-- Test dependencies -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-core</artifactId>
      <scope>provided</scope>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-site-plugin</artifactId>
        <configuration>
          <skip>true</skip>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <executions>
          <execution>
            <id>enforce-banned-dependencies</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <skip>true</skip>
              <rules>
                <banTransitiveDependencies>
<!--
                  <message>
    Our client-facing artifacts are not supposed to have additional dependencies
    and one or more of them do. The output from the enforcer plugin should give
    specifics.
                  </message>
-->
                  <excludes>
                    <!-- We leave logging stuff alone -->
                    <exclude>org.slf4j:*</exclude>
                    <exclude>log4j:*</exclude>
                    <exclude>commons-logging:*</exclude>
                    <!-- annotations that never change -->
                    <exclude>com.google.code.findbugs:*</exclude>
                    <exclude>com.github.stephenc.findbugs:*</exclude>
                    <exclude>com.github.spotbugs:*</exclude>
                    <!-- We leave HTrace as an unshaded dependnecy on purpose so that tracing within a JVM will work -->
                    <exclude>org.apache.htrace:*</exclude>
                    <!-- NB we don't exclude Hadoop from this check here, because the assumption is any needed classes
                         are contained in our artifacts.
                      -->
                  </excludes>
                </banTransitiveDependencies>
                <banDuplicateClasses>
                  <findAllDuplicates>true</findAllDuplicates>
                </banDuplicateClasses>
              </rules>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <executions>
          <execution>
            <id>test-resources</id>
            <phase>pre-integration-test</phase>
            <goals>
              <goal>testResources</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <!-- create a maven pom property that has all of our dependencies.
             below in the integration-test phase we'll pass this list
             of paths to our jar checker script.
          -->
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
          <execution>
            <id>put-client-artifacts-in-a-property</id>
            <phase>pre-integration-test</phase>
            <goals>
              <goal>build-classpath</goal>
            </goals>
            <configuration>
              <excludeScope>provided</excludeScope>
              <excludeTransitive>true</excludeTransitive>
              <outputProperty>hbase-client-artifacts</outputProperty>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.6.0</version>
        <executions>
          <!-- It's easier to have two copies of our validation
               script than to copy it via remote-resources-plugin, but
               we need to make sure they stay the same.
            -->
          <execution>
            <id>make-sure-validation-files-are-in-sync</id>
            <phase>validate</phase>
            <goals>
              <goal>exec</goal>
            </goals>
            <configuration>
              <executable>diff</executable>
              <requiresOnline>false</requiresOnline>
              <arguments>
                <argument>../hbase-shaded-with-hadoop-check-invariants/src/test/resources/ensure-jars-have-correct-contents.sh</argument>
                <argument>../hbase-shaded-check-invariants/src/test/resources/ensure-jars-have-correct-contents.sh</argument>
              </arguments>
            </configuration>
          </execution>
          <!--
            Check that we actually relocated everything we included.
            It's critical that we don't ship third party dependencies that haven't
            been relocated under our package space, since this will lead to
            difficult to debug classpath errors for downstream. Unfortunately, that
            means inspecting all the jars.
            -->
          <execution>
            <id>check-jar-contents-for-stuff-with-hadoop</id>
            <phase>integration-test</phase>
            <goals>
              <goal>exec</goal>
            </goals>
            <configuration>
              <executable>${shell-executable}</executable>
              <workingDirectory>${project.build.testOutputDirectory}</workingDirectory>
              <requiresOnline>false</requiresOnline>
              <arguments>
                <argument>ensure-jars-have-correct-contents.sh</argument>
                <argument>--allow-hadoop</argument>
                <argument>${hbase-client-artifacts}</argument>
              </arguments>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

</project>
