<?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>jar</id>
    <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>
                <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>
                <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>