<?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>
    <includeBaseDirectory>false</includeBaseDirectory>
    <formats>
        <format>jar</format>
    </formats>
    <fileSets>
        <fileSet>
            <directory>${project.build.directory}/maven-shared-archive-resources</directory>
            <outputDirectory>/</outputDirectory>
        </fileSet>
    </fileSets>
    <moduleSets>
        <moduleSet>
            <includes>
                <include>org.apache.axis2:axis2-java2wsdl</include>
                <include>org.apache.axis2:axis2-kernel</include>
                <include>org.apache.axis2:axis2-codegen</include>
                <include>org.apache.axis2:axis2-adb</include>
                <include>org.apache.axis2:axis2-adb-codegen</include>
                <include>org.apache.axis2:axis2-xmlbeans</include>
                <include>org.apache.axis2:axis2-clustering</include>
            </includes>
            <binaries>
                <includeDependencies>false</includeDependencies>
                <useStrictFiltering>true</useStrictFiltering>
                <unpack>true</unpack>
                <unpackOptions>
                    <excludes>
                        <exclude>OSGI-INF/**</exclude>
                        <exclude>META-INF/**</exclude>
                    </excludes>
                </unpackOptions>
            </binaries>
        </moduleSet>
        <moduleSet>
            <includes>
                <!-- Note that we can at most include a single module here (because
                     of the module.xml file)! -->
                <include>org.apache.axis2:addressing</include>
            </includes>
            <binaries>
                <includeDependencies>false</includeDependencies>
                <useStrictFiltering>true</useStrictFiltering>
                <attachmentClassifier>classpath-module</attachmentClassifier>
                <unpack>true</unpack>
                <unpackOptions>
                    <excludes>
                        <!-- We must pay attention not to exclude module.xml here! -->
                        <exclude>META-INF/MANIFEST.MF</exclude>
                        <exclude>META-INF/LICENSE</exclude>
                        <exclude>META-INF/NOTICE</exclude>
                        <exclude>META-INF/maven/**</exclude>
                    </excludes>
                </unpackOptions>
            </binaries>
        </moduleSet>
    </moduleSets>    
</assembly>