<?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>
  <id>ranger-tools</id>
  <formats>
    <format>tar.gz</format>
    <format>zip</format>
  </formats>
  <baseDirectory>${project.parent.name}-${project.version}-ranger-tools</baseDirectory>
  <includeBaseDirectory>true</includeBaseDirectory>
  <moduleSets>
    <moduleSet>
      <useAllReactorProjects>true</useAllReactorProjects>
      <includes>
        <include>org.apache.ranger:ranger-tools</include>
      </includes>
      <binaries>
        <outputDirectory>dist</outputDirectory>
        <includeDependencies>true</includeDependencies>
        <unpack>false</unpack>
        <directoryMode>755</directoryMode>
        <fileMode>644</fileMode>
        <dependencySets>
          <dependencySet>
            <outputDirectory>lib</outputDirectory>
            <unpack>false</unpack>
            <includes>
              <include>commons-cli:commons-cli</include>
              <include>commons-logging:commons-logging:jar:${commons.logging.version}</include>
              <include>commons-lang:commons-lang</include>
              <include>com.google.code.gson:gson</include>
              <include>log4j:log4j</include>
              <include>org.slf4j:slf4j-api:jar:${slf4j-api.version}</include>
              <include>org.apache.commons:commons-configuration2:jar:${commons.configuration.version}</include>
              <include>org.apache.hadoop:hadoop-common:jar:${hadoop.version}</include>
              <include>org.apache.hadoop:hadoop-common-plus:jar:${hadoop.version}</include>
              <include>org.apache.hadoop:hadoop-auth:jar:${hadoop.version}</include>
              <include>org.apache.hadoop:hadoop-hdfs:jar:${hadoop.version}</include>
              <include>org.eclipse.persistence:eclipselink</include>
              <include>org.eclipse.persistence:javax.persistence</include>
              <include>commons-collections:commons-collections</include>
              <include>com.sun.jersey:jersey-bundle</include>
              <include>commons-io:commons-io</include>
              <include>com.google.guava:guava:jar:${google.guava.version}</include>
              <include>org.apache.httpcomponents:httpclient:jar:${httpcomponents.httpclient.version}</include>
              <include>org.apache.httpcomponents:httpcore:jar:${httpcomponents.httpcore.version}</include>
              <include>org.apache.httpcomponents:httpmime:jar:${httpcomponents.httpmime.version}</include>
              <include>org.noggit:noggit:jar:${noggit.version}</include>
              <include>org.codehaus.jackson:jackson-core-asl</include>
              <include>org.codehaus.jackson:jackson-jaxrs</include>
              <include>org.codehaus.jackson:jackson-mapper-asl</include>
              <include>org.codehaus.jackson:jackson-xc</include>
              <include>org.apache.ranger:ranger-plugins-common</include>
              <include>org.apache.ranger:ranger-plugins-audit</include>
              <include>com.kstruct:gethostname4j:jar:${kstruct.gethostname4j.version}</include>
              <include>net.java.dev.jna:jna:jar:${jna.version}</include>
              <include>net.java.dev.jna:jna-platform:jar:${jna-platform.version}</include>
            </includes>
          </dependencySet>
        </dependencySets>
      </binaries>
    </moduleSet>

    <moduleSet>
      <useAllReactorProjects>true</useAllReactorProjects>
      <includes>
        <include>org.apache.ranger:credentialbuilder</include>
        <include>org.apache.ranger:ranger-util</include>
      </includes>
      <binaries>
        <outputDirectory>lib</outputDirectory>
        <includeDependencies>false</includeDependencies>
        <unpack>false</unpack>
        <directoryMode>755</directoryMode>
        <fileMode>644</fileMode>
        <includes>
          <include>org.apache.ranger:credentialbuilder</include>
          <include>org.apache.ranger:ranger-util</include>
        </includes>
      </binaries>
    </moduleSet>
  </moduleSets>

  <fileSets>
    <fileSet>
      <directoryMode>755</directoryMode>
      <fileMode>644</fileMode>
      <outputDirectory>conf</outputDirectory>
      <directory>${project.parent.basedir}/ranger-tools/conf</directory>
    </fileSet>
    <fileSet>
      <directoryMode>755</directoryMode>
      <fileMode>644</fileMode>
      <outputDirectory>testdata</outputDirectory>
      <directory>${project.parent.basedir}/ranger-tools/testdata</directory>
    </fileSet>
    <fileSet>
      <directoryMode>755</directoryMode>
      <outputDirectory></outputDirectory>
      <directory>${project.build.directory}</directory>
      <includes>
        <include>version</include>
      </includes>
      <fileMode>444</fileMode>
    </fileSet>
  </fileSets>
  <files>
    <file>
      <source>${project.parent.basedir}/ranger-tools/scripts/ranger-perftester.sh</source>
      <outputDirectory></outputDirectory>
      <destName>ranger-perftester.sh</destName>
      <fileMode>755</fileMode>
    </file>
    <file>
      <source>${project.parent.basedir}/ranger-tools/scripts/ranger-plugin-perftester.sh</source>
      <outputDirectory></outputDirectory>
      <destName>ranger-plugin-perftester.sh</destName>
      <fileMode>755</fileMode>
    </file>
    <file>
      <source>${project.parent.basedir}/ranger-tools/scripts/README.txt</source>
      <outputDirectory></outputDirectory>
      <destName>README.txt</destName>
      <fileMode>644</fileMode>
    </file>
  </files>
</assembly>
