<?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-server-${hbase.suffix}</artifactId>
  <packaging>jar</packaging>
  <name>Phoenix Server JAR</name>
  <description>Phoenix HBase Server Side JAR</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  -->
                  <exclude>org/apache/hbase/**</exclude>
                  <!-- Phoenix classes -->
                  <exclude>org/apache/phoenix/**</exclude>
                  <!-- We are assuming that the Omid coprocessors are not added separately -->
                  <exclude>org/apache/omid/**</exclude>
                  <!-- See PHOENIX-7118
                 We expect this to come from the unshaded hadoop on the classpath.
                 That is always true for the HBase server classpath -->
                  <exclude>org/apache/commons/configuration2/**</exclude>
                </excludes>
              </relocation>
              <!-- We use the relocate-by default settings from -client, instead of relocating
              one-by-one as in phoenix-mapreduce, because we have unshaded protobuf 2.5.0 on the
              classpath, and don't need special handling for it -->
              <relocation>
                <pattern>com/</pattern>
                <shadedPattern>${shaded.package}.com.</shadedPattern>
                <excludes>
                  <!-- Not the com/ packages that are a part of particular jdk implementations -->
                  <exclude>com/sun/tools/**</exclude>
                  <exclude>com/sun/javadoc/**</exclude>
                  <exclude>com/sun/security/**</exclude>
                  <exclude>com/sun/jndi/**</exclude>
                  <exclude>com/sun/management/**</exclude>
                  <exclude>com/sun/management/**</exclude>
                  <!-- Protobuf 2.5.0 is already on the HBase server classpath -->
                  <groupId>com/google/protobuf/**</groupId>
                </excludes>
              </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>server-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>
