<!--

  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.
-->
<component>
    <fileSets>
        <!--  main project directory structure  -->
        <fileSet>
            <directory>.</directory>
            <outputDirectory/>
            <useDefaultExcludes>true</useDefaultExcludes>
            <excludes>
                <!--  build output  -->
                <exclude>
                    %regex[(?!((?!${project.build.directory}/)[^/]+/)*src/).*${project.build.directory}.*]
                </exclude>
                <!--
                 NOTE: Most of the following excludes should not be required
                             if the standard release process is followed. This is because the
                             release plugin checks out project sources into a location like
                             target/checkout, then runs the build from there. The result is
                             a source-release archive that comes from a pretty clean directory
                             structure.

                             HOWEVER, if the release plugin is configured to run extra goals
                             or generate a project website, it's definitely possible that some
                             of these files will be present. So, it's safer to exclude them.

                -->
                <!--  IDEs  -->
                <exclude>
                    %regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?maven-eclipse\.xml]
                </exclude>
                <exclude>
                    %regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.project]
                </exclude>
                <exclude>
                    %regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.classpath]
                </exclude>
                <exclude>
                    %regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?[^/]*\.iws]
                </exclude>
                <exclude>
                    %regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.idea(/.*)?]
                </exclude>
                <exclude>
                    %regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?out(/.*)?]
                </exclude>
                <exclude>
                    %regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?[^/]*\.ipr]
                </exclude>
                <exclude>
                    %regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?[^/]*\.iml]
                </exclude>
                <exclude>
                    %regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.settings(/.*)?]
                </exclude>
                <exclude>
                    %regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.externalToolBuilders(/.*)?]
                </exclude>
                <exclude>
                    %regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.deployables(/.*)?]
                </exclude>
                <exclude>
                    %regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.wtpmodules(/.*)?]
                </exclude>
                <!--  misc  -->
                <exclude>
                    %regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?cobertura\.ser]
                </exclude>
                <!--  release-plugin temp files  -->
                <exclude>
                    %regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?pom\.xml\.releaseBackup]
                </exclude>
                <exclude>
                    %regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?release\.properties]
                </exclude>
                <!-- NodeJS projects -->
                <exclude>**/extensions/web-tracker/javascript/node/**/*</exclude>
                <exclude>**/extensions/web-tracker/javascript/node_modules/**/*</exclude>
            </excludes>
        </fileSet>
        <!--  license, readme, etc. calculated at build time  -->
        <fileSet>
            <directory>
                ${project.build.directory}/maven-shared-archive-resources/META-INF
            </directory>
            <outputDirectory/>
        </fileSet>
    </fileSets>
</component>