<?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>source</id>
    <formats>
        <format>zip</format>
    </formats>
    <!--
        rather than including the base directory (which would cause this
        archive to unpack into the same directory as the binary
        distribution), we specify the directory into which to put
        sources below, in the <outputDirectory> tags
    -->
    <includeBaseDirectory>false</includeBaseDirectory>
    <fileSets>
        <fileSet>
            <directory>..</directory>
            <outputDirectory>${artifactId}-${version}-source</outputDirectory>
            <excludes>
                <exclude>**/target/**</exclude>
            </excludes>
        </fileSet>

        <!--
            Also put the standard license and notice files at the top
            of the zip. Even those these will be included in the
            openjpa-project sub-directory, the Apache rules say that
            it needs to be in the top-level of the artifact. See:

                http://www.apache.org/legal/src-headers.html#notice
        -->
        <fileSet>
            <outputDirectory>${artifactId}-${version}-source</outputDirectory>
            <includes>
                <include>README</include>
                <include>DISCLAIMER</include>
                <include>LICENSE</include>
                <include>STATUS</include>
                <include>NOTICE</include>
                <include>README.txt</include>
                <include>DISCLAIMER.txt</include>
                <include>LICENSE.txt</include>
                <include>STATUS.txt</include>
                <include>NOTICE.txt</include>
                <include>BUILDING</include>
                <include>BUILDING.txt</include>
                <include>RELEASE-NOTES</include>
                <include>RELEASE-NOTES.html</include>
                <include>RELEASE-NOTES.txt</include>
                <include>CHANGES</include>
                <include>CHANGES.txt</include>
            </includes>
        </fileSet>
    </fileSets>
</assembly>
