<!--
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 configuration for the release bundle.
-->
<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>release</id>
  <formats>
    <format>dir</format>
    <format>tar.gz</format>
  </formats>
  <includeBaseDirectory>true</includeBaseDirectory>
  <fileSets>
    <fileSet>
      <!-- readme -->
      <useDefaultExcludes>false</useDefaultExcludes>
      <outputDirectory>/</outputDirectory>
      <fileMode>0644</fileMode>
      <includes>
        <include>README.md</include>
      </includes>
      <filtered>true</filtered>
    </fileSet>
    <fileSet>
      <!-- scripts -->
      <useDefaultExcludes>false</useDefaultExcludes>
      <outputDirectory>bin</outputDirectory>
      <directory>src/main/scripts</directory>
      <fileMode>0755</fileMode>
      <excludes>
        <exclude>*~</exclude>
        <exclude>*.swp</exclude>
      </excludes>
      <filtered>true</filtered>
    </fileSet>
    <fileSet>
      <!-- conf dir -->
      <useDefaultExcludes>false</useDefaultExcludes>
      <outputDirectory>conf</outputDirectory>
      <directory>src/main/conf</directory>
      <fileMode>0644</fileMode>
      <excludes>
        <exclude>*~</exclude>
        <exclude>*.swp</exclude>
      </excludes>
      <filtered>true</filtered>
    </fileSet>
    <fileSet>
      <!-- examples dir -->
      <useDefaultExcludes>false</useDefaultExcludes>
      <outputDirectory>examples</outputDirectory>
      <directory>src/main/examples</directory>
      <fileMode>0644</fileMode>
      <excludes>
        <exclude>*~</exclude>
        <exclude>*.swp</exclude>
      </excludes>
      <filtered>true</filtered>
    </fileSet>
  </fileSets>
  <dependencySets>
    <dependencySet>
      <outputDirectory>lib</outputDirectory>
      <scope>runtime</scope>
      <useTransitiveFiltering>true</useTransitiveFiltering>
      <fileMode>0644</fileMode>
      <!--
      <excludes>
        <exclude>org.apache.hadoop:hadoop-core</exclude>
        <exclude>org.apache.hbase:hbase</exclude>
        </excludes>
      -->
    </dependencySet>
  </dependencySets>
</assembly>
