<!--
 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>bin</id>

  <formats>
    <format>dir</format>
    <format>tar.gz</format>
  </formats>

  <baseDirectory>apache-sentry-${project.version}-bin</baseDirectory>

  <dependencySets>
    <dependencySet>
      <outputDirectory>lib</outputDirectory>
      <unpack>false</unpack>
      <useProjectArtifact>false</useProjectArtifact>
      <useStrictFiltering>true</useStrictFiltering>
      <useTransitiveFiltering>true</useTransitiveFiltering>
      <excludes>
        <exclude>org.slf4j:*</exclude>
        <exclude>org.datanucleus:*</exclude>
        <exclude>com.jolbox:bonecp</exclude>
        <exclude>org.apache.hive:hive-beeline</exclude>
        <exclude>org.apache.derby:derby</exclude>
        <!-- SENTRY-2283 multiple versions of metrics cause failures on startup -->
        <exclude>io.dropwizard.metrics:*</exclude>
        <exclude>org.mortbay.jetty:*</exclude>
        <!-- exclude the original jars, we'll add them in later with the shaded versions. -->
        <exclude>org.apache.sentry:sentry-service-server</exclude>
        <exclude>org.apache.sentry:sentry-hdfs-service</exclude>
      </excludes>
    </dependencySet>
<!--
    <dependencySet>
      <outputDirectory>lib/plugins</outputDirectory>
      <unpack>true</unpack>
      <useTransitiveDependencies>false</useTransitiveDependencies>
      <includes>
        <include>org.apache.sentry:sentry-provider-db</include>
        <include>org.apache.sentry:sentry-hdfs-common</include>
        <include>org.apache.sentry:sentry-hdfs-namenode-plugin</include>
      </includes>
    </dependencySet>
-->
    <dependencySet>
      <outputDirectory>lib/server</outputDirectory>
      <unpack>false</unpack>
      <useProjectArtifact>false</useProjectArtifact>
      <useStrictFiltering>true</useStrictFiltering>
      <useTransitiveFiltering>true</useTransitiveFiltering>
      <includes>
        <include>org.datanucleus:*</include>
        <include>com.jolbox:bonecp</include>
        <include>org.apache.hive:hive-beeline</include>
        <include>org.apache.derby:derby</include>
      </includes>
    </dependencySet>
    <dependencySet>
      <outputDirectory>lib/plugins</outputDirectory>
      <unpack>false</unpack>
      <useProjectArtifact>false</useProjectArtifact>
      <useStrictFiltering>true</useStrictFiltering>
      <useTransitiveFiltering>true</useTransitiveFiltering>
      <includes>
        <include>org.apache.curator:curator-x-discovery</include>
      </includes>
    </dependencySet>
  </dependencySets>

  <fileSets>
    <fileSet>
      <directory>${project.parent.basedir}</directory>
      <excludes>
        <exclude>**/target/**</exclude>
        <exclude>**/.classpath</exclude>
        <exclude>**/.project</exclude>
        <exclude>**/.settings/**</exclude>
        <exclude>**/.gitignore</exclude>
        <exclude>dev-support/**</exclude>
        <exclude>pom.xml</exclude>
        <exclude>sentry-binding/**</exclude>
        <exclude>sentry-core/**</exclude>
        <exclude>sentry-dist/**</exclude>
        <exclude>sentry-provider/**</exclude>
        <exclude>sentry-policy/**</exclude>
        <exclude>sentry-tests/**</exclude>
        <exclude>sentry-hdfs/**</exclude>
        <exclude>sentry-solr/**</exclude>
        <exclude>sentry-service/**</exclude>
      </excludes>

      <includes>
        <include>bin/**</include>
        <include>conf/**</include>
        <include>lib/**</include>
        <include>CHANGELOG*</include>
        <include>DISCLAIMER*</include>
        <include>NOTICE*</include>
        <include>README*</include>
      </includes>
      <outputDirectory>/</outputDirectory>
    </fileSet>
    <fileSet>
      <directory>${project.parent.basedir}/sentry-thirdparty/sentry-shaded/target/</directory>
      <includes>
        <include>sentry-service-server-${project.version}.jar</include>
        <include>sentry-hdfs-service-${project.version}.jar</include>
      </includes>
      <outputDirectory>lib/</outputDirectory>
    </fileSet>
    <fileSet>
      <directory>${project.parent.basedir}/sentry-hdfs/sentry-hdfs-dist/target</directory>
      <includes>
        <include>sentry-hdfs-*.jar</include>
      </includes>
      <excludes>
        <exclude>sentry-hdfs-dist-*.jar</exclude>
      </excludes>
      <outputDirectory>lib/plugins</outputDirectory>
    </fileSet>
    <fileSet>
      <directory>${project.parent.basedir}/sentry-provider/sentry-provider-db/src/main/resources</directory>
      <includes>
        <include>**/*</include>
      </includes>
      <outputDirectory>scripts/sentrystore/upgrade</outputDirectory>
    </fileSet>
    <fileSet>
      <directory>${project.basedir}/src/main/resources/licences</directory>
      <includes>
        <include>**/*</include>
      </includes>
      <outputDirectory>/licences</outputDirectory>
    </fileSet>
    <fileSet>
      <directory>${project.build.directory}/</directory>
      <includes>
        <include>LICENSE.txt</include>
      </includes>
      <outputDirectory>/</outputDirectory>
    </fileSet>
  </fileSets>

</assembly>

