<!--
 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>bin</id>
    <formats>
        <format>tar.gz</format>
        <format>zip</format>
    </formats>
    <baseDirectory>${project.artifactId}-${commons.release.version}</baseDirectory>
    <includeSiteDirectory>false</includeSiteDirectory>
    <fileSets>
        <fileSet>
            <includes>
                <include>LICENSE.txt</include>
                <include>NOTICE.txt</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>target/site/apidocs</directory>
            <outputDirectory>apidocs</outputDirectory>
        </fileSet>
        <fileSet>
            <directory>core/target</directory>
            <outputDirectory>lib</outputDirectory>
            <includes><include>*.jar</include></includes>
        </fileSet>
        <fileSet>
            <directory>examples/target</directory>
            <outputDirectory>lib</outputDirectory>
            <includes><include>*.jar</include></includes>
        </fileSet>
        <fileSet>
            <directory>fam/target</directory>
            <outputDirectory>lib</outputDirectory>
            <includes><include>*.jar</include></includes>
        </fileSet>
        <fileSet>
            <directory>compilers/eclipse/target</directory>
            <outputDirectory>lib</outputDirectory>
            <includes><include>*.jar</include></includes>
        </fileSet>
        <fileSet>
            <directory>compilers/groovy/target</directory>
            <outputDirectory>lib</outputDirectory>
            <includes><include>*.jar</include></includes>
        </fileSet>
        <fileSet>
            <directory>compilers/janino/target</directory>
            <outputDirectory>lib</outputDirectory>
            <includes><include>*.jar</include></includes>
        </fileSet>
        <fileSet>
            <directory>compilers/rhino/target</directory>
            <outputDirectory>lib</outputDirectory>
            <includes><include>*.jar</include></includes>
        </fileSet>
    </fileSets>
</assembly>
