<?xml version="1.0"?>
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.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>bin</id>
  <formats>
    <format>tar.gz</format>
  </formats>
  <moduleSets>
    <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-grpc</include>
        <include>org.apache.ratis:ratis-hadoop</include>
        <include>org.apache.ratis:ratis-logservice</include>
        <include>org.apache.ratis:ratis-netty</include>
        <include>org.apache.ratis:ratis-proto</include>
        <include>org.apache.ratis:ratis-replicated-map</include>
        <include>org.apache.ratis:ratis-server</include>
        <include>org.apache.ratis:ratis-test</include>
        <include>org.apache.ratis:ratis-metrics</include>
        <include>org.apache.ratis:ratis-resource-bundle</include>
      </includes>
      <binaries>
        <outputDirectory>jars</outputDirectory>
        <includeDependencies>false</includeDependencies>
        <unpack>false</unpack>
      </binaries>
    </moduleSet>
  </moduleSets>
  <fileSets>
    <fileSet>
      <directory>${project.basedir}/..</directory>
      <outputDirectory>.</outputDirectory>
      <includes>
        <include>DISCLAIMER</include>
      </includes>
      <fileMode>0644</fileMode>
    </fileSet>
    <fileSet>
      <directory>${project.basedir}/src/main/resources</directory>
      <outputDirectory>.</outputDirectory>
      <includes>
        <include>README.md</include>
        <include>LICENSE</include>
        <include>NOTICE</include>
      </includes>
      <fileMode>0644</fileMode>
    </fileSet>
    <!-- Include dev support tools -->
    <fileSet>
      <directory>${project.basedir}/../dev-support</directory>
      <outputDirectory>dev-support</outputDirectory>
      <fileMode>0644</fileMode>
      <directoryMode>0755</directoryMode>
    </fileSet>
  </fileSets>
</assembly>
