<!--

    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.

-->
<!DOCTYPE assembly [
        <!ELEMENT assembly (id|includeBaseDirectory|baseDirectory|formats|fileSets|dependencySets)*>
        <!ELEMENT id (#PCDATA)>
        <!ELEMENT includeBaseDirectory (#PCDATA)>
        <!ELEMENT baseDirectory (#PCDATA)>
        <!ELEMENT formats (format)*>
        <!ELEMENT format (#PCDATA)>
        <!ELEMENT fileSets (fileSet)*>
        <!ELEMENT fileSet (directory|outputDirectory|fileMode|includes)*>
        <!ELEMENT directory (#PCDATA)>
        <!ELEMENT outputDirectory (#PCDATA)>
        <!ELEMENT includes (include)*>
        <!ELEMENT include (#PCDATA)>
        <!ELEMENT dependencySets (dependencySet)*>
        <!ELEMENT dependencySet (outputDirectory|outputFileNameMapping|includes)*>
        ]>
<assembly>
    <id>bin</id>
    <includeBaseDirectory>true</includeBaseDirectory>
    <formats>
        <format>zip</format>
    </formats>

    <dependencySets>
        <dependencySet>
            <useProjectArtifact>true</useProjectArtifact>
            <outputDirectory>libs</outputDirectory>
            <includes>
                <include>*</include>
            </includes>
        </dependencySet>
    </dependencySets>
</assembly>
