<!--
  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>src</id>
  <formats>
    <format>tar.gz</format>
    <format>zip</format>
  </formats>
  <includeBaseDirectory>true</includeBaseDirectory>
  <baseDirectory>apache-gora-${project.version}</baseDirectory>
  <fileSets>
  <!-- include all modules -->
    <fileSet>
      <directory>${basedir}</directory>
      <excludes>
        <!-- exclude target dirs -->
        <exclude>**/target/</exclude>
        <!-- exclude hidden files -->
        <exclude>**/.*</exclude>
        <!-- exclude hidden directories -->
        <exclude>**/.*/</exclude>
        <!-- exclude all jars in lib directories -->
        <exclude>**/lib/*.jar</exclude>
        <!-- exclude build directories -->
        <exclude>**/build/</exclude>
      </excludes>
    </fileSet>
  </fileSets>
</assembly>
