<!--
  ~ 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>docs</id>
    <includeBaseDirectory>true</includeBaseDirectory> 
    <baseDirectory>axis2-${version}</baseDirectory>
    <formats>
	<!--<format>tar.gz</format>  //uncomment,if tar.gz archive needed-->
        <format>zip</format>
    </formats>

    <fileSets>
        <fileSet>
            <directory>target/tmp-doc-distro/xdocs</directory>
            <outputDirectory>docs/xdocs</outputDirectory>
            <excludes>
                <exclude>.svn/**</exclude>
            </excludes>
        </fileSet>
        <fileSet>
            <directory>../../modules/documentation/target/apidocs</directory>
            <outputDirectory>docs/javadocs</outputDirectory>
            <excludes>
                <exclude>.svn/**</exclude>
            </excludes>
        </fileSet>
        <fileSet>
            <directory>target/tmp-doc-distro/docs</directory>
            <outputDirectory>docs</outputDirectory>
            <includes>
                <include>LICENSE.txt</include>
                <include>README.txt</include>
                <include>release-notes.html</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>target/tmp-doc-distro/docs</directory>
	    <outputDirectory></outputDirectory>
	    <includes>
	       <include>README-docs.txt</include>
	    </includes>
	</fileSet>
    </fileSets>
</assembly>
