<?xml version='1.0'?>
<!--

 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.

-->

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
  <id>client</id>
  <!-- All the dependencies (unpacked) necessary to run phoenix from a single, stand-alone jar -->
  <formats>
    <format>jar</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>

  <containerDescriptorHandlers>
    <containerDescriptorHandler>
      <!--
          aggregate SPI's so that things like HDFS FileSystem works in uberjar
          http://docs.oracle.com/javase/tutorial/sound/SPI-intro.html
      -->
      <handlerName>metaInf-services</handlerName>
    </containerDescriptorHandler>
  </containerDescriptorHandlers>
  
  <componentDescriptors>
    <componentDescriptor>src/build/components-minimal.xml</componentDescriptor>
    <componentDescriptor>src/build/components-major-client.xml</componentDescriptor>
  </componentDescriptors>

  <dependencySets>
    <dependencySet>
      <!-- Unpack all the dependencies to class files, since java doesn't support 
        jar of jars for running -->
      <unpack>true</unpack>
      <!-- save these dependencies to the top-level -->
      <outputDirectory>/</outputDirectory>
      <includes>
        <include>jline:jline</include>
        <include>sqlline:sqlline</include>
        <include>org.apache.hbase:hbase*</include>
        <include>org.apache.htrace:htrace-core</include>
        <include>io.netty:netty-all</include>
        <include>commons-codec:commons-codec</include>
        <include>co.cask.tephra:tephra*</include>
        <include>org.apache.twill:twill*</include>
        <include>org.apache.thrift:*</include>
        <include>com.google.code.gson:gson*</include>
      </includes>
    </dependencySet>

    <!-- Make sure we get all the components, not just the minimal client ones (e.g.
      phoenix-flume, phoenix-pig, etc). We should exclude phoenix-server and
      phoenix-server-client in the future, see PHOENIX-2032, PHOENIX-2038 -->
    <dependencySet>
      <outputDirectory>/</outputDirectory>
      <unpack>true</unpack>
      <!-- multiple deps provide some variant of LICENSE files/directories. These
           overwrite each other at best, at worst conflict on case-insensitive
           filesystems like HDFS+ and FAT32. Just exclude them -->
      <unpackOptions>
        <excludes>
          <exclude>*license*</exclude>
          <exclude>*LICENSE*</exclude>
          <exclude>**/license/**</exclude>
          <exclude>**/LICENSE/**</exclude>
        </excludes>
      </unpackOptions>
      <!-- this is default, but make intentions clear -->
      <useTransitiveDependencies>true</useTransitiveDependencies>
      <!-- "When <include> subelements are present, they define a set of
           artifact coordinates to include. If none is present, then <includes>
           represents all valid values"
           https://maven.apache.org/plugins/maven-assembly-plugin/assembly.html#class_dependencySet
           This means bring in all dependencies transitively of the
           phoenix-assembly module.
      -->
      <includes />
    </dependencySet>
  </dependencySets>
</assembly>
