<?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.
-->
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
    <id>cluster</id>
    <baseDirectory>/</baseDirectory>
    <formats>
        <format>tar.gz</format>
    </formats>
    <fileSets>
        <fileSet>
            <directory>${project.basedir}/../bin</directory>
            <outputDirectory>phoenix-queryserver-${project.parent.version}/bin</outputDirectory>
            <excludes>
              <exclude>__pycache__</exclude>
              <exclude>__pycache__/*</exclude>
              <exclude>*.pyc</exclude>
            </excludes>
        </fileSet>
        <fileSet>
            <directory>${project.basedir}/../phoenix-queryserver/target</directory>
            <outputDirectory>phoenix-queryserver-${project.parent.version}/</outputDirectory>
            <includes>
                <include>phoenix-queryserver-${project.parent.version}.jar</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>${project.basedir}/../phoenix-queryserver-client/target</directory>
            <outputDirectory>phoenix-queryserver-${project.parent.version}/</outputDirectory>
            <includes>
                <include>phoenix-queryserver-client-${project.parent.version}.jar</include>
            </includes>
        </fileSet>
        <fileSet>
          <directory>${project.build.directory}/maven-repo</directory>
          <outputDirectory>phoenix-queryserver-${project.parent.version}/maven</outputDirectory>
        </fileSet>
    </fileSets>
    <dependencySets>
      <dependencySet>
        <unpack>false</unpack>
        <outputDirectory>phoenix-queryserver-${project.parent.version}/lib</outputDirectory>
        <includes>
          <include>sqlline:sqlline:jar:jar-with-dependencies</include>
        </includes>
      </dependencySet>
      <dependencySet>
        <unpack>false</unpack>
        <outputDirectory>phoenix-queryserver-${project.parent.version}/</outputDirectory>
        <includes>
          <include>org.apache.phoenix:phoenix-client:jar</include>
        </includes>
      </dependencySet>
    </dependencySets>
</assembly>
