<?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 xmlns="http://maven.apache.org/xsd/assembly-1.1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/xsd/assembly-1.1.1 http://maven.apache.org/xsd/assembly-1.1.1.xsd">
  <id>source-release</id>
  <formats>
    <format>tar.gz</format>
    <format>tar.bz2</format>
    <format>zip</format>
  </formats>
  <fileSets>
    <fileSet>
      <directory>.</directory>
      <outputDirectory>/</outputDirectory>
      <useDefaultExcludes>true</useDefaultExcludes>
      <excludes>
        <!-- IDE -->
        <exclude>**/*.iws</exclude>
        <exclude>**/*.ipr</exclude>
        <exclude>**/*.iml</exclude>
        <exclude>**/.project</exclude>
        <exclude>**/.classpath</exclude>
        <exclude>**/.settings/**</exclude>
        <exclude>**/.externalToolBuilders/**</exclude>
        <exclude>**/maven-eclipse.xml</exclude>
        <exclude>**/.deployables/**</exclude>
        <exclude>**/.wtpmodules/**</exclude>
        <!-- maven -->
        <exclude>**/target/**</exclude>
        <exclude>**/pom.xml.releaseBackup</exclude>
        <exclude>**/release.properties</exclude>
        <!-- misc -->
        <exclude>**/*.patch</exclude>
        <exclude>**/*.diff</exclude>
        <exclude>**/*.bak</exclude>
        <exclude>**/*.log</exclude>
      </excludes>
    </fileSet>
    <fileSet>
      <directory>target/maven-shared-archive-resources/META-INF</directory>
      <outputDirectory>/</outputDirectory>
    </fileSet>
  </fileSets>
</assembly>
