<!--
   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>binary</id>
  <formats>
    <format>dir</format>
    <format>tar.gz</format>
    <format>zip</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  
  <fileSets>
    <fileSet>
      <directory>../commons/target</directory>
      <includes>
        <include>hama-*.jar</include>
      </includes>
      <excludes>
        <exclude>*sources.jar</exclude>
        <exclude>*tests.jar</exclude>
        <exclude>*javadoc.jar</exclude>
      </excludes>
      <outputDirectory>../hama-${project.version}/</outputDirectory>
    </fileSet>
    <fileSet>
      <directory>../core/target</directory>
      <includes>
        <include>hama-*.jar</include>
      </includes>
      <excludes>
        <exclude>*sources.jar</exclude>
        <exclude>*tests.jar</exclude>
        <exclude>*javadoc.jar</exclude>
      </excludes>
      <outputDirectory>../hama-${project.version}/</outputDirectory>
    </fileSet>
    <fileSet>
      <directory>../graph/target</directory>
      <includes>
        <include>hama-*.jar</include>
      </includes>
      <excludes>
        <exclude>*sources.jar</exclude>
        <exclude>*tests.jar</exclude>
        <exclude>*javadoc.jar</exclude>
      </excludes>
      <outputDirectory>../hama-${project.version}/</outputDirectory>
    </fileSet>
    <fileSet>
      <directory>../examples/target</directory>
      <includes>
        <include>hama-*.jar</include>
      </includes>
      <excludes>
        <exclude>*sources.jar</exclude>
        <exclude>*tests.jar</exclude>
        <exclude>*javadoc.jar</exclude>
      </excludes>
      <outputDirectory>../hama-${project.version}/</outputDirectory>
    </fileSet>
    <fileSet>
      <directory>../ml/target</directory>
      <includes>
        <include>hama-*.jar</include>
      </includes>
      <excludes>
        <exclude>*sources.jar</exclude>
        <exclude>*tests.jar</exclude>
        <exclude>*javadoc.jar</exclude>
      </excludes>
      <outputDirectory>../hama-${project.version}/</outputDirectory>
    </fileSet>
    <fileSet>
      <directory>../mesos/target</directory>
      <includes>
        <include>hama-*.jar</include>
      </includes>
      <excludes>
        <exclude>*sources.jar</exclude>
        <exclude>*tests.jar</exclude>
        <exclude>*javadoc.jar</exclude>
      </excludes> 
      <outputDirectory>../hama-${project.version}/</outputDirectory>
    </fileSet>
    <fileSet>
      <directory>../yarn/target</directory>
      <includes>
        <include>hama-*.jar</include>
      </includes>
      <excludes>
        <exclude>*sources.jar</exclude>
        <exclude>*tests.jar</exclude>
        <exclude>*javadoc.jar</exclude>
      </excludes>
      <outputDirectory>../hama-${project.version}/</outputDirectory>
    </fileSet>
 
    <fileSet>
      <directory>../</directory>
      <includes>
        <include>*.txt</include>
      </includes>
      <outputDirectory>../hama-${project.version}/</outputDirectory>
    </fileSet>
    <fileSet>
      <directory>../lib</directory>
      <includes>
        <include>*.jar</include>
      </includes>
      <fileMode>755</fileMode>
      <outputDirectory>../hama-${project.version}/lib</outputDirectory>
    </fileSet>
    <fileSet>
      <directory>../bin</directory>
      <includes>
        <include>hama</include>
        <include>*.sh</include>
      </includes>
      <outputDirectory>../hama-${project.version}/bin</outputDirectory>
      <fileMode>755</fileMode>
    </fileSet>
    <fileSet>
      <directory>../conf</directory>
      <includes>
        <include>groomservers</include>
        <include>hama-default.xml</include>
        <include>hama-env.sh</include>
        <include>hama-site.xml</include>
        <include>log4j.properties</include>
      </includes>
      <outputDirectory>../hama-${project.version}/conf</outputDirectory>
      <fileMode>755</fileMode>
    </fileSet>
    <fileSet>
      <directory>../docs</directory>
      <outputDirectory>../hama-${project.version}/docs</outputDirectory>
    </fileSet>
  </fileSets>
</assembly>

