<?xml version="1.0" encoding="UTF-8"?>
<!--
  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>
    <id>src</id>

    <formats>
        <format>tar.gz</format>
        <format>zip</format>
    </formats>

    <fileSets>
        <fileSet>
            <directory>${basedir}/../..</directory>
            <outputDirectory>/</outputDirectory>
            <excludes>
                <exclude>LICENSE</exclude>
                <exclude>NOTICE</exclude>
                <exclude>**/target/**</exclude>
                <exclude>**/eclipse-classes/**</exclude>
                <exclude>**/*.i??</exclude>
                <exclude>**/.idea/**</exclude>
            </excludes>
        </fileSet>
        <fileSet>
            <directory>src/main/distribution/src</directory>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>LICENSE</include>
                <include>NOTICE</include>
            </includes>
        </fileSet>
    </fileSets>

</assembly>