<?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>release</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>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.txt</include>
        <include>NOTICE.txt</include>
        <include>README.md</include>
        <include>pom.xml</include>
      </includes>
      <fileMode>0644</fileMode>
    </fileSet>
  </fileSets>
</assembly>
