<?xml version="1.0"?>
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1 http://maven.apache.org/xsd/assembly-1.1.1.xsd">
<!--
/**
 * 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.
 */
-->
  <id>src</id>
  <formats>
    <format>tar.gz</format>
  </formats>
  <moduleSets>
    <moduleSet>
      <useAllReactorProjects>true</useAllReactorProjects>
      <includes>
        <include>org.apache.ratis:ratis-hadoop-shaded</include>
        <include>org.apache.ratis:ratis-proto-shaded</include>
      </includes>
      <sources>
        <excludeSubModuleDirectories>false</excludeSubModuleDirectories>
        <fileSets>
          <fileSet>
            <includes>
              <include>**</include>
            </includes>
            <excludes>
              <!-- For shaded modules, exclude generated sources -->
              <exclude>src/main/java/</exclude>
              <exclude>dependency-reduced-pom.xml</exclude>

              <exclude>target/</exclude>
              <exclude>test/</exclude>
              <exclude>.classpath</exclude>
              <exclude>.project</exclude>
              <exclude>.settings/</exclude>
              <exclude>*.iml/</exclude>
            </excludes>
          </fileSet>
        </fileSets>
      </sources>
    </moduleSet>
    <moduleSet>
      <useAllReactorProjects>true</useAllReactorProjects>
      <includes>
        <include>org.apache.ratis:ratis-assembly</include>
        <include>org.apache.ratis:ratis-client</include>
        <include>org.apache.ratis:ratis-common</include>
        <include>org.apache.ratis:ratis-examples</include>
        <include>org.apache.ratis:ratis-grpc</include>
        <include>org.apache.ratis:ratis-hadoop</include>
        <include>org.apache.ratis:ratis-netty</include>
        <include>org.apache.ratis:ratis-replicated-map</include>
        <include>org.apache.ratis:ratis-server</include>
      </includes>
      <sources>
        <excludeSubModuleDirectories>false</excludeSubModuleDirectories>
        <fileSets>
          <fileSet>
            <includes>
              <include>**</include>
            </includes>
            <excludes>
              <exclude>target/</exclude>
              <exclude>test/</exclude>
              <exclude>.classpath</exclude>
              <exclude>.project</exclude>
              <exclude>.settings/</exclude>
              <exclude>*.iml/</exclude>
            </excludes>
          </fileSet>
        </fileSets>
      </sources>
    </moduleSet>
  </moduleSets>
  <fileSets>
    <!-- Include dev support tools -->
    <fileSet>
      <directory>${project.basedir}/../dev-support</directory>
      <outputDirectory>dev-support</outputDirectory>
      <fileMode>0644</fileMode>
      <directoryMode>0755</directoryMode>
    </fileSet>
    <!-- Include files in root dir -->
    <fileSet>
      <directory>${project.basedir}/..</directory>
      <outputDirectory>.</outputDirectory>
      <includes>
        <include>BUILDING.md</include>
        <include>DISCLAIMER.txt</include>
        <include>LICENSE</include>
        <include>NOTICE</include>
        <include>README.md</include>
        <include>pom.xml</include>
        <include>start-build-env.sh</include>
      </includes>
      <fileMode>0644</fileMode>
    </fileSet>
  </fileSets>
</assembly>
