<?xml version="1.0"?>
<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">
    <!--
      /**
       * 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.
       */
      -->
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <artifactId>hbase-build-configuration</artifactId>
        <groupId>org.apache.hbase</groupId>
        <version>3.0.0-SNAPSHOT</version>
        <relativePath>../hbase-build-configuration</relativePath>
    </parent>
    <artifactId>hbase-shaded</artifactId>
    <name>Apache HBase - Shaded</name>
    <description>Module of HBase with most deps shaded.</description>
    <packaging>pom</packaging>
    <properties>
      <!-- Don't make a test-jar -->
      <maven.test.skip>true</maven.test.skip>
      <!-- Don't make a source-jar -->
      <source.skip>true</source.skip>
      <license.bundles.dependencies>true</license.bundles.dependencies>
      <shaded.prefix>org.apache.hadoop.hbase.shaded</shaded.prefix>
    </properties>
    <modules>
        <module>hbase-shaded-client-byo-hadoop</module>
        <module>hbase-shaded-client</module>
        <module>hbase-shaded-mapreduce</module>
        <module>hbase-shaded-check-invariants</module>
        <module>hbase-shaded-with-hadoop-check-invariants</module>
    </modules>
    <dependencies>
      <dependency>
         <groupId>org.apache.hbase</groupId>
         <artifactId>hbase-resource-bundle</artifactId>
         <version>${project.version}</version>
         <optional>true</optional>
      </dependency>
      <!-- log4j has to be non-optional for Hadoop 2 atleast -->
      <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
      </dependency>
      <!-- put the log implementations to optional -->
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <optional>true</optional>
      </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <!--Make it so assembly:single does nothing in here-->
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <skipAssembly>true</skipAssembly>
                </configuration>
            </plugin>
            <!-- licensing info from our dependencies -->
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-remote-resources-plugin</artifactId>
              <executions>
                <execution>
                  <id>aggregate-licenses</id>
                  <goals>
                    <goal>process</goal>
                  </goals>
                  <configuration>
                    <properties>
                      <copyright-end-year>${build.year}</copyright-end-year>
                      <debug-print-included-work-info>${license.debug.print.included}</debug-print-included-work-info>
                      <bundled-dependencies>${license.bundles.dependencies}</bundled-dependencies>
                      <bundled-jquery>${license.bundles.jquery}</bundled-jquery>
                      <bundled-logo>${license.bundles.logo}</bundled-logo>
                      <bundled-bootstrap>${license.bundles.bootstrap}</bundled-bootstrap>
                    </properties>
                    <resourceBundles>
                      <resourceBundle>${project.groupId}:hbase-resource-bundle:${project.version}</resourceBundle>
                    </resourceBundles>
                    <supplementalModelArtifacts>
                      <supplementalModelArtifact>${project.groupId}:hbase-resource-bundle:${project.version}</supplementalModelArtifact>
                    </supplementalModelArtifacts>
                    <supplementalModels>
                      <supplementalModel>supplemental-models.xml</supplementalModel>
                    </supplementalModels>
                  </configuration>
                </execution>
              </executions>
            </plugin>
        </plugins>
        <pluginManagement>
            <plugins>
                <plugin>
                    <!--Make it so assembly:single does nothing in here-->
                    <artifactId>maven-assembly-plugin</artifactId>
                    <configuration>
                        <skipAssembly>true</skipAssembly>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-shade-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>aggregate-into-a-jar-with-relocated-third-parties</id>
                            <phase>package</phase>
                            <goals>
                                <goal>shade</goal>
                            </goals>
                            <configuration>
                                <createSourcesJar>false</createSourcesJar>
                                <shadedArtifactAttached>false</shadedArtifactAttached>
                                <promoteTransitiveDependencies>true</promoteTransitiveDependencies>
                                <shadeTestJar>false</shadeTestJar>
                                <artifactSet>
                                    <excludes>
                                        <!-- exclude J2EE modules that come in for JDK11+ -->
                                        <exclude>javax.annotation:javax.annotation-api</exclude>
                                        <!-- default to excluding Hadoop, have module that want
                                             to include it redefine the exclude list -->
                                        <exclude>org.apache.hadoop:*</exclude>
                                        <!-- the rest of this needs to be kept in sync with any
                                             hadoop-including module -->
                                        <exclude>org.apache.hbase:hbase-resource-bundle</exclude>
                                        <exclude>org.slf4j:*</exclude>
                                        <exclude>com.google.code.findbugs:*</exclude>
                                        <exclude>com.github.stephenc.findbugs:*</exclude>
                                        <exclude>org.apache.htrace:*</exclude>
                                        <exclude>org.apache.yetus:*</exclude>
                                        <exclude>log4j:*</exclude>
                                        <exclude>commons-logging:*</exclude>
                                    </excludes>
                                </artifactSet>
                                <relocations>
                                    <!-- top level com not including sun-->
                                    <relocation>
                                        <pattern>com.cedarsoftware</pattern>
                                        <shadedPattern>${shaded.prefix}.com.cedarsoftware</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>com.codahale</pattern>
                                        <shadedPattern>${shaded.prefix}.com.codahale</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>com.ctc</pattern>
                                        <shadedPattern>${shaded.prefix}.com.ctc</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>com.dropwizard</pattern>
                                        <shadedPattern>${shaded.prefix}.com.dropwizard</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>com.fasterxml</pattern>
                                        <shadedPattern>${shaded.prefix}.com.fasterxml</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>com.github.benmanes.caffeine</pattern>
                                        <shadedPattern>${shaded.prefix}.com.github.benmanes.caffeine</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>com.google</pattern>
                                        <shadedPattern>${shaded.prefix}.com.google</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>com.jamesmurty</pattern>
                                        <shadedPattern>${shaded.prefix}.com.jamesmurty</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>com.jcraft</pattern>
                                        <shadedPattern>${shaded.prefix}.com.jcraft</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>com.lmax</pattern>
                                        <shadedPattern>${shaded.prefix}.com.lmax</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>com.microsoft</pattern>
                                        <shadedPattern>${shaded.prefix}.com.microsoft</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>com.nimbusds</pattern>
                                        <shadedPattern>${shaded.prefix}.com.nimbusds</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>com.squareup</pattern>
                                        <shadedPattern>${shaded.prefix}.com.squareup</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>com.thoughtworks</pattern>
                                        <shadedPattern>${shaded.prefix}.com.thoughtworks</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>com.zaxxer</pattern>
                                        <shadedPattern>${shaded.prefix}.com.zaxxer</shadedPattern>
                                    </relocation>


                                    <!-- netty family -->
                                    <relocation>
                                        <pattern>org.jboss.netty</pattern>
                                        <shadedPattern>${shaded.prefix}.org.jboss.netty</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>io.netty</pattern>
                                        <shadedPattern>${shaded.prefix}.io.netty</shadedPattern>
                                    </relocation>

                                    <!-- top level okio -->
                                    <relocation>
                                        <pattern>okio</pattern>
                                        <shadedPattern>${shaded.prefix}.okio</shadedPattern>
                                    </relocation>

                                    <!-- top level org -->
                                    <relocation>
                                        <pattern>org.codehaus</pattern>
                                        <shadedPattern>${shaded.prefix}.org.codehaus</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.eclipse</pattern>
                                        <shadedPattern>${shaded.prefix}.org.eclipse</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.ehcache</pattern>
                                        <shadedPattern>${shaded.prefix}.org.ehcache</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.jcodings</pattern>
                                        <shadedPattern>${shaded.prefix}.org.jcodings</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.joni</pattern>
                                        <shadedPattern>${shaded.prefix}.org.joni</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.mortbay</pattern>
                                        <shadedPattern>${shaded.prefix}.org.mortbay</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.nustaq</pattern>
                                        <shadedPattern>${shaded.prefix}.org.nustaq</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.terracotta</pattern>
                                        <shadedPattern>${shaded.prefix}.org.terracotta</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.tukaani</pattern>
                                        <shadedPattern>${shaded.prefix}.org.tukaani</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.xerial</pattern>
                                        <shadedPattern>${shaded.prefix}.org.xerial</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.znerd</pattern>
                                        <shadedPattern>${shaded.prefix}.org.znerd</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.aopalliance</pattern>
                                        <shadedPattern>${shaded.prefix}.org.aopalliance</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.fusesource</pattern>
                                        <shadedPattern>${shaded.prefix}.org.fusesource</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.iq80</pattern>
                                        <shadedPattern>${shaded.prefix}.org.iq80</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.jamon</pattern>
                                        <shadedPattern>${shaded.prefix}.org.jamon</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.jets3t</pattern>
                                        <shadedPattern>${shaded.prefix}.org.jets3t</shadedPattern>
                                    </relocation>
                                    <!-- poorly named add-on package from jets3t dependency. TODO can we just exclude these? -->
                                    <relocation>
                                        <pattern>contribs.mx</pattern>
                                        <shadedPattern>${shaded.prefix}.contribs.mx</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.objectweb</pattern>
                                        <shadedPattern>${shaded.prefix}.org.objectweb</shadedPattern>
                                    </relocation>


                                    <!-- org.apache relocations not in org.apache.hadoop or org.apache.commons -->
                                    <relocation>
                                        <pattern>org.apache.avro</pattern>
                                        <shadedPattern>${shaded.prefix}.org.apache.avro</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.apache.curator</pattern>
                                        <shadedPattern>${shaded.prefix}.org.apache.curator</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.apache.directory</pattern>
                                        <shadedPattern>${shaded.prefix}.org.apache.directory</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.apache.http</pattern>
                                        <shadedPattern>${shaded.prefix}.org.apache.http</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.apache.jasper</pattern>
                                        <shadedPattern>${shaded.prefix}.org.apache.jasper</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.apache.jute</pattern>
                                        <shadedPattern>${shaded.prefix}.org.apache.jute</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.apache.kerby</pattern>
                                        <shadedPattern>${shaded.prefix}.org.apache.kerby</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.apache.taglibs</pattern>
                                        <shadedPattern>${shaded.prefix}.org.apache.taglibs</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.apache.zookeeper</pattern>
                                        <shadedPattern>${shaded.prefix}.org.apache.zookeeper</shadedPattern>
                                    </relocation>

                                    <!-- org.apache.commons not including logging -->
                                    <relocation>
                                        <pattern>org.apache.commons.validator</pattern>
                                        <shadedPattern>${shaded.prefix}.org.apache.commons.validator</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.apache.commons.beanutils</pattern>
                                        <shadedPattern>${shaded.prefix}.org.apache.commons.beanutils</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.apache.commons.cli</pattern>
                                        <shadedPattern>${shaded.prefix}.org.apache.commons.cli</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.apache.commons.collections</pattern>
                                        <shadedPattern>${shaded.prefix}.org.apache.commons.collections</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.apache.commons.configuration</pattern>
                                        <shadedPattern>${shaded.prefix}.org.apache.commons.configuration</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.apache.commons.crypto</pattern>
                                        <shadedPattern>${shaded.prefix}.org.apache.commons.crypto</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.apache.commons.csv</pattern>
                                        <shadedPattern>${shaded.prefix}.org.apache.commons.csv</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.apache.commons.daemon</pattern>
                                        <shadedPattern>${shaded.prefix}.org.apache.commons.daemon</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.apache.commons.io</pattern>
                                        <shadedPattern>${shaded.prefix}.org.apache.commons.io</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.apache.commons.math</pattern>
                                        <shadedPattern>${shaded.prefix}.org.apache.commons.math</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.apache.commons.math3</pattern>
                                        <shadedPattern>${shaded.prefix}.org.apache.commons.math3</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.apache.commons.net</pattern>
                                        <shadedPattern>${shaded.prefix}.org.apache.commons.net</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.apache.commons.lang</pattern>
                                        <shadedPattern>${shaded.prefix}.org.apache.commons.lang</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.apache.commons.lang3</pattern>
                                        <shadedPattern>${shaded.prefix}.org.apache.commons.lang3</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.apache.commons.el</pattern>
                                        <shadedPattern>${shaded.prefix}.org.apache.commons.el</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.apache.commons.httpclient</pattern>
                                        <shadedPattern>${shaded.prefix}.org.apache.commons.httpclient</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.apache.commons.compress</pattern>
                                        <shadedPattern>${shaded.prefix}.org.apache.commons.compress</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.apache.commons.digester</pattern>
                                        <shadedPattern>${shaded.prefix}.org.apache.commons.digester</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.apache.commons.codec</pattern>
                                        <shadedPattern>${shaded.prefix}.org.apache.commons.codec</shadedPattern>
                                    </relocation>

                                    <!-- top level net-->
                                    <relocation>
                                        <pattern>net</pattern>
                                        <shadedPattern>${shaded.prefix}.net</shadedPattern>
                                    </relocation>

                                    <!-- junit -->
                                    <relocation>
                                        <pattern>junit</pattern>
                                        <shadedPattern>${shaded.prefix}.junit</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>org.junit</pattern>
                                        <shadedPattern>${shaded.prefix}.org.junit</shadedPattern>
                                    </relocation>
                                </relocations>
                                <transformers>
                                  <!-- Need to filter out some extraneous license files.
                                       Don't use the ApacheLicenseRT because it just removes all
                                       META-INF/LICENSE(.txt)? files, including ours. -->
                                  <transformer implementation="org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer">
                                    <resources>
                                      <resource>LICENSE.txt</resource>
                                      <resource>ASL2.0</resource>
                                      <resource>LICENSE-junit.txt</resource>
                                      <!-- also this unneeded doc -->
                                      <resource>overview.html</resource>
                                    </resources>
                                  </transformer>
                                  <!-- Where notices exist, just concat them -->
                                  <transformer implementation="org.apache.maven.plugins.shade.resource.ApacheNoticeResourceTransformer">
                                    <addHeader>false</addHeader>
                                    <projectName>${project.name}</projectName>
                                  </transformer>
                                </transformers>
                                <filters>
                                  <filter>
                                    <!-- this is a signed osgi bundle -->
                                    <artifact>org.eclipse.jetty.orbit:javax.servlet.jsp.jstl</artifact>
                                    <excludes>
                                      <exclude>META-INF/ECLIPSEF.SF</exclude>
                                      <exclude>META-INF/ECLIPSEF.RSA</exclude>
                                    </excludes>
                                  </filter>
                                  <filter>
                                    <!-- Duplication of classes that ship in commons-collections 2.x and 3.x
                                         If we stop bundling a relevant commons-collections artifact we'll
                                         need to revisit. See: https://s.apache.org/e09o
                                    -->
                                    <artifact>commons-beanutils:commons-beanutils-core</artifact>
                                    <excludes>
                                      <exclude>org/apache/commons/collections/*.class</exclude>
                                    </excludes>
                                  </filter>
                                  <filter>
                                    <!-- server side webapps that we don't need -->
                                    <artifact>org.apache.hbase:hbase-server</artifact>
                                    <excludes>
                                      <exclude>hbase-webapps/*</exclude>
                                      <exclude>hbase-webapps/**/*</exclude>
                                      <exclude>**/*_jsp.class</exclude>
                                    </excludes>
                                  </filter>
                                  <filter>
                                    <!-- server side webapps that we don't need -->
                                    <artifact>org.apache.hadoop:hadoop-yarn-common</artifact>
                                    <excludes>
                                      <exclude>webapps/*</exclude>
                                      <exclude>webapps/**/*</exclude>
                                    </excludes>
                                  </filter>
                                  <filter>
                                    <artifact>*:*</artifact>
                                    <excludes>
                                      <!-- proto source files aren't needed -->
                                      <exclude>*.proto</exclude>
                                      <exclude>**/*.proto</exclude>
                                      <!-- We already concat NOTICE, safe to drop individual ones -->
                                      <exclude>LICENSE</exclude>
                                      <exclude>NOTICE</exclude>
                                    </excludes>
                                  </filter>
                                  <filter>
                                    <!-- skip french localization -->
                                    <artifact>org.apache.commons:commons-math3</artifact>
                                    <excludes>
                                      <exclude>assets/org/apache/commons/math3/**/*</exclude>
                                    </excludes>
                                  </filter>
                                  <filter>
                                    <!-- appears to be the result of a conflict in hadoop artifacts -->
                                    <artifact>org.apache.hadoop:*</artifact>
                                    <excludes>
                                      <exclude>mapred-default.xml.orig</exclude>
                                    </excludes>
                                  </filter>
                                  <!-- unnecessary files that mess up our invariants check -->
                                  <filter>
                                    <artifact>org.eclipse.jetty:*</artifact>
                                    <excludes>
                                      <exclude>about.html</exclude>
                                      <exclude>jetty-dir.css</exclude>
                                    </excludes>
                                  </filter>
                                  <filter>
                                    <artifact>org.apache.kerby:*</artifact>
                                    <excludes>
                                      <exclude>krb5-template.conf</exclude>
                                      <exclude>krb5_udp-template.conf</exclude>
                                      <exclude>ccache.txt</exclude>
                                      <exclude>keytab.txt</exclude>
                                    </excludes>
                                  </filter>
                                </filters>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>