<?xml version="1.0" encoding="UTF-8"?>
<!--
  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.
-->
<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>
  <parent>
    <groupId>org.apache.phoenix</groupId>
    <artifactId>phoenix</artifactId>
    <version>5.3.1</version>
  </parent>
  <artifactId>phoenix-mapreduce-byo-shaded-hbase-${hbase.suffix}</artifactId>
  <packaging>jar</packaging>
  <name>Phoenix Mapreduce</name>
  <description>Phoenix Mapreduce JAR for use with the "hbase mapredcp" classpath</description>
  <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>
  </properties>
  <dependencies>
    <!-- These must not be moved to a parent module, see PHOENIX-6377 -->
    <!-- Depend on all other internal projects -->
    <dependency>
      <groupId>org.apache.phoenix</groupId>
      <artifactId>phoenix-core-server</artifactId>
      <exclusions>
        <!-- 5.2 no longer uses reload4j, but we still exclude in case something pulls these
        transitively -->
        <exclusion>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-reload4j</artifactId>
        </exclusion>
        <exclusion>
          <groupId>ch.qos.reload4j</groupId>
          <artifactId>reload4j</artifactId>
        </exclusion>
        <!-- These are coming from transitive dependencies -->
        <exclusion>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
        <exclusion>
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.apache.phoenix</groupId>
      <artifactId>phoenix-hbase-compat-${hbase.compat.version}</artifactId>
      <optional>false</optional>
    </dependency>

    <!-- Exclude servlet and Jetty. We don't need it, and it causes problems with minicluster -->
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-server</artifactId>
      <version>${jetty.version}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-util</artifactId>
      <version>${jetty.version}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-util-ajax</artifactId>
      <version>${jetty.version}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-servlet</artifactId>
      <version>${jetty.version}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-webapp</artifactId>
      <version>${jetty.version}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>${javax.servlet-api.version}</version>
      <scope>provided</scope>
    </dependency>

    <!-- Mark every Hadoop jar as provided -->
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-common</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-mapreduce-client-core</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-annotations</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-auth</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-yarn-api</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-hdfs</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-hdfs-client</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-distcp</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-client</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-mapreduce-client-jobclient</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-mapreduce-client-common</artifactId>
      <scope>provided</scope>
    </dependency>

    <!-- Mark HBase as provided, too -->
    <dependency>
      <groupId>org.apache.hbase</groupId>
      <artifactId>hbase-client</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.hbase</groupId>
      <artifactId>hbase-common</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.hbase</groupId>
      <artifactId>hbase-mapreduce</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.hbase</groupId>
      <artifactId>hbase-replication</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.hbase</groupId>
      <artifactId>hbase-endpoint</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.hbase</groupId>
      <artifactId>hbase-metrics-api</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.hbase</groupId>
      <artifactId>hbase-metrics</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.hbase</groupId>
      <artifactId>hbase-protocol</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.hbase</groupId>
      <artifactId>hbase-protocol-shaded</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.hbase</groupId>
      <artifactId>hbase-server</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.hbase</groupId>
      <artifactId>hbase-hadoop-compat</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.hbase</groupId>
      <artifactId>hbase-hadoop2-compat</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.hbase</groupId>
      <artifactId>hbase-zookeeper</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.hbase.thirdparty</groupId>
      <artifactId>hbase-shaded-netty</artifactId>
      <version>${hbase-thirdparty.excludeonly.version}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.hbase.thirdparty</groupId>
      <artifactId>hbase-shaded-miscellaneous</artifactId>
      <version>${hbase-thirdparty.excludeonly.version}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.hbase.thirdparty</groupId>
      <artifactId>hbase-shaded-protobuf</artifactId>
      <version>${hbase-thirdparty.excludeonly.version}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <!-- provided by Hadoop -->
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-configuration2</artifactId>
      <version>${commons-configuration2.excludeonly.version}</version>
      <scope>provided</scope>
    </dependency>

    <!-- Other dependencies we don't want to shade in, but are not transitively excluded by the
    above for some reason -->
    <dependency>
      <!-- HBase-shaded already provides this -->
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>jcl-over-slf4j</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
      <!-- random version, for exclusion only -->
      <version>11.0.2</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>com.github.stephenc.findbugs</groupId>
      <artifactId>findbugs-annotations</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>com.google.protobuf</groupId>
      <artifactId>protobuf-java</artifactId>
      <scope>provided</scope>
    </dependency>
  </dependencies>

  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-site-plugin</artifactId>
          <configuration>
            <skip>true</skip>
          </configuration>
        </plugin>
        <plugin>
          <!-- RAT gets really confused on the shaded subprojects,
          and there is nothing to audit here -->
          <groupId>org.apache.rat</groupId>
          <artifactId>apache-rat-plugin</artifactId>
          <configuration>
            <skip>true</skip>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-dependency-plugin</artifactId>
          <configuration>
            <ignoredDependencies>
              <ignoredDependency>*</ignoredDependency>
            </ignoredDependencies>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-shade-plugin</artifactId>
          <configuration>
            <filters>
              <filter>
                <artifact>*:*</artifact>
                <excludes>
                  <exclude>META-INF/maven/**</exclude>
                  <exclude>META-INF/*.SF</exclude>
                  <exclude>META-INF/*.DSA</exclude>
                  <exclude>META-INF/*.RSA</exclude>
                  <exclude>META-INF/license/*</exclude>
                  <exclude>META-INF/NOTICE</exclude>
                  <exclude>LICENSE.*</exclude>
                  <exclude>NOTICE.*</exclude>
                  <exclude>NOTICE</exclude>
                  <exclude>README*</exclude>
                </excludes>
              </filter>
              <filter>
                <artifact>org.apache.hadoop:hadoop-yarn-common</artifact>
                <excludes>
                  <exclude>org/apache/hadoop/yarn/factories/package-info.class</exclude>
                  <exclude>org/apache/hadoop/yarn/util/package-info.class</exclude>
                  <exclude>org/apache/hadoop/yarn/factory/providers/package-info.class</exclude>
                  <exclude>org/apache/hadoop/yarn/client/api/impl/package-info.class</exclude>
                  <exclude>org/apache/hadoop/yarn/client/api/package-info.class</exclude>
                  <exclude>webapps/**</exclude>
                </excludes>
              </filter>
              <!-- Phoenix specific -->
              <filter>
                <artifact>org.apache.commons:commons-math3</artifact>
                <excludes>
                  <exclude>assets/**</exclude>
                </excludes>
              </filter>
              <filter>
                <artifact>org.apache.hbase:hbase-server</artifact>
                <excludes>
                  <exclude>hbase-webapps/**</exclude>
                </excludes>
              </filter>
              <filter>
                <artifact>org.apache.hbase.thirdparty:*</artifact>
                <excludes>
                  <exclude>/**</exclude>
                  <exclude>webapps/**</exclude>
                </excludes>
              </filter>
              <!-- Phoenix specific -->
            </filters>
            <transformers>
              <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
              <transformer implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
                <resource>csv-bulk-load-config.properties</resource>
                <file>${project.basedir}/../config/csv-bulk-load-config.properties</file>
              </transformer>
              <transformer implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
                <resource>README.md</resource>
                <file>${project.basedir}/../README.md</file>
              </transformer>
              <transformer implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
                <resource>LICENSE.txt</resource>
                <file>${project.basedir}/../LICENSE</file>
              </transformer>
              <transformer implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
                <resource>NOTICE</resource>
                <file>${project.basedir}/../NOTICE</file>
              </transformer>
            </transformers>
            <relocations>
              <relocation>
                <pattern>org/</pattern>
                <shadedPattern>${shaded.package}.org.</shadedPattern>
                <excludes>
                  <exclude>org/apache/hadoop/**</exclude>
                  <!-- Our non-shaded htrace and logging libraries -->
                  <exclude>org/apache/htrace/**</exclude>
                  <exclude>org/slf4j/**</exclude>
                  <exclude>org/apache/commons/logging/**</exclude>
                  <exclude>org/apache/log4j/**</exclude>
                  <exclude>org/apache/logging/log4j/**</exclude>
                  <!-- Not the org/ packages that are a part of the jdk -->
                  <exclude>org/ietf/jgss/**</exclude>
                  <exclude>org/omg/**</exclude>
                  <exclude>org/w3c/dom/**</exclude>
                  <exclude>org/xml/sax/**</exclude>
                  <!-- Not needed for client, we set this to provided -->
                  <exclude>org/eclipse/jetty/**</exclude>
                  <!-- Extras compared to Hadoop -->
                  <!-- Hbase classes - Maybe these could be shaded as well ? -->
                  <exclude>org/apache/hbase/**</exclude>
                  <!-- Phoenix classes -->
                  <exclude>org/apache/phoenix/**</exclude>
                  <exclude>org/apache/omid/**</exclude>
                  <!-- See PHOENIX-7118
                 We expect this to come from the unshaded hadoop on the classpath.
                 This won't work if hadoop-shaded-client is used. -->
                  <exclude>org/apache/commons/configuration2/**</exclude>
                </excludes>
              </relocation>

              <!-- We cannot use the more elegant shading rules in -client
              and -server for com packages, but it SHOULD be equivalent, except for the
              protobuf change for hbase-shaded-mapreduce / client compatibility -->
              <relocation>
                <pattern>com/beust/</pattern>
                <shadedPattern>${shaded.package}.com.beust.</shadedPattern>
              </relocation>
              <relocation>
                <pattern>com/clearspring/</pattern>
                <shadedPattern>${shaded.package}.com.clearspring.</shadedPattern>
              </relocation>
              <relocation>
                <pattern>com/codahale/</pattern>
                <shadedPattern>${shaded.package}.come.codahale.</shadedPattern>
              </relocation>
              <relocation>
                <pattern>com/fasterxml/</pattern>
                <shadedPattern>${shaded.package}.com.fasterxml.</shadedPattern>
              </relocation>
              <relocation>
                <pattern>com/force/</pattern>
                <shadedPattern>${shaded.package}.com.force.</shadedPattern>
              </relocation>
              <relocation>
                <pattern>com/google/gson/</pattern>
                <shadedPattern>${shaded.package}.com.google.gson.</shadedPattern>
              </relocation>
              <relocation>
                <pattern>com/google/inject/</pattern>
                <shadedPattern>${shaded.package}.com.google.inject.</shadedPattern>
              </relocation>
              <!-- This is protobuf 2.5.0 which is shaded to this package in hbase-shaded-mapreduce,
               not the modified protobuf 3.x from hbase-thirdparty -->
              <relocation>
                <pattern>com/google/protobuf/</pattern>
                <shadedPattern>${hbase.shaded.package}.com.google.protobuf.</shadedPattern>
              </relocation>
              <relocation>
                <pattern>com/ibm/</pattern>
                <shadedPattern>${shaded.package}.com.ibm.</shadedPattern>
              </relocation>
              <relocation>
                <pattern>com/lmax/</pattern>
                <shadedPattern>${shaded.package}.com.lmax.</shadedPattern>
              </relocation>
              <relocation>
                <pattern>com/sun/jna/</pattern>
                <shadedPattern>${shaded.package}.com.sun.jna.</shadedPattern>
              </relocation>
              <relocation>
                <pattern>com/squareup</pattern>
                <shadedPattern>${shaded.package}.com.squareup.</shadedPattern>
              </relocation>
              <relocation>
                <pattern>io/</pattern>
                <shadedPattern>${shaded.package}.io.</shadedPattern>
                <excludes>
                  <!-- Exclude config keys for Hadoop that look like package names -->
                  <exclude>io/compression/**</exclude>
                  <exclude>io/mapfile/**</exclude>
                  <exclude>io/map/index/*</exclude>
                  <exclude>io/seqfile/**</exclude>
                  <exclude>io/file/buffer/size</exclude>
                  <exclude>io/skip/checksum/errors</exclude>
                  <exclude>io/sort/*</exclude>
                  <exclude>io/serializations</exclude>
                </excludes>
              </relocation>
              <!-- JSRs that haven't made it to inclusion in J2SE -->
              <relocation>
                <pattern>javax/el/</pattern>
                <shadedPattern>${shaded.package}.javax.el.</shadedPattern>
              </relocation>
              <relocation>
                <pattern>javax/cache/</pattern>
                <shadedPattern>${shaded.package}.javax.cache.</shadedPattern>
              </relocation>
              <relocation>
                <pattern>javax/servlet/jsp/</pattern>
                <shadedPattern>${shaded.package}.javax.servlet.jsp.</shadedPattern>
              </relocation>
              <relocation>
                <pattern>javax/ws/</pattern>
                <shadedPattern>${shaded.package}.javax.ws.</shadedPattern>
              </relocation>
              <relocation>
                <pattern>javax/annotation/</pattern>
                <shadedPattern>${shaded.package}.javax.annotation.</shadedPattern>
              </relocation>
              <relocation>
                <pattern>javax/inject/</pattern>
                <shadedPattern>${shaded.package}.javax.inject.</shadedPattern>
              </relocation>
              <relocation>
                <pattern>javax/validation/</pattern>
                <shadedPattern>${shaded.package}.javax.validation.</shadedPattern>
              </relocation>
              <relocation>
                <pattern>javax/xml/bind/</pattern>
                <shadedPattern>${shaded.package}.javax.xml.bind.</shadedPattern>
              </relocation>
              <relocation>
                <pattern>javax/activation/</pattern>
                <shadedPattern>${shaded.package}.javax.activation.</shadedPattern>
              </relocation>
              <relocation>
                <pattern>net/</pattern>
                <shadedPattern>${shaded.package}.net.</shadedPattern>
                <excludes>
                  <!-- Exclude config keys for Hadoop that look like package names -->
                  <exclude>net/topology/**</exclude>
                </excludes>
              </relocation>
              <!-- okio declares a top level package instead of nested -->
              <relocation>
                <pattern>okio/</pattern>
                <shadedPattern>${shaded.package}.okio.</shadedPattern>
              </relocation>
              <!-- Phoenix specific relocations -->
              <relocation>
                <pattern>it/</pattern>
                <shadedPattern>${shaded.package}.it.</shadedPattern>
              </relocation>
              <relocation>
                <pattern>javassist/</pattern>
                <shadedPattern>${shaded.package}.javassist.</shadedPattern>
              </relocation>
              <relocation>
                <pattern>jersey/</pattern>
                <shadedPattern>${shaded.package}.jersey.</shadedPattern>
              </relocation>
              <relocation>
                <pattern>jline/</pattern>
                <shadedPattern>${shaded.package}.jline.</shadedPattern>
              </relocation>
              <relocation>
                <pattern>mozilla/</pattern>
                <shadedPattern>${shaded.package}.mozilla.</shadedPattern>
              </relocation>
              <relocation>
                <pattern>tables/</pattern>
                <shadedPattern>${shaded.package}.tables.</shadedPattern>
              </relocation>
              <!-- Phoenix specific relocations end -->
            </relocations>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <executions>
          <execution>
            <id>lite-shaded</id>
            <goals>
              <goal>shade</goal>
            </goals>
            <phase>package</phase>
            <configuration>
              <promoteTransitiveDependencies>true</promoteTransitiveDependencies>
              <shadeTestJar>false</shadeTestJar>
              <createSourcesJar>${shadeSources}</createSourcesJar>
              <dependencyReducedPomLocation>${basedir}/target/pom.xml</dependencyReducedPomLocation>
              <artifactSet>
                <includes>
                  <include>*:*</include>
                </includes>
                <excludes>
                  <exclude>org.apache.phoenix:phoenix-client</exclude>
                  <exclude>xom:xom</exclude>
                </excludes>
              </artifactSet>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
