<?xml version='1.0'?>
<!--

 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 xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
  <id>bin</id>
  <formats>
    <format>tar.gz</format>
  </formats>
  <baseDirectory>apache-qpid-jms-${project.version}</baseDirectory>
  <fileSets>
    <fileSet>
      <directory>${basedir}/src/main/assembly/</directory>
      <outputDirectory>/</outputDirectory>
      <includes>
        <include>README.txt</include>
        <include>NOTICE</include>
        <include>LICENSE</include>
      </includes>
      <fileMode>0644</fileMode>
      <directoryMode>0755</directoryMode>
    </fileSet>
  </fileSets>
  <dependencySets>
    <dependencySet>
      <outputDirectory>/lib</outputDirectory>
      <useProjectArtifact>false</useProjectArtifact>
      <useTransitiveFiltering>true</useTransitiveFiltering>
      <excludes>
        <exclude>org.slf4j:slf4j-log4j12</exclude>
      </excludes>
    </dependencySet>

    <dependencySet>
      <outputDirectory>/lib/optional</outputDirectory>
      <useProjectArtifact>false</useProjectArtifact>
      <useTransitiveFiltering>true</useTransitiveFiltering>
      <includes>
        <include>org.slf4j:slf4j-log4j12</include>
      </includes>
    </dependencySet>
  </dependencySets>
  <moduleSets>
    <moduleSet>
      <useAllReactorProjects>true</useAllReactorProjects>
      <includes>
        <include>org.apache.qpid:qpid-jms-examples</include>
      </includes>
      <sources>
        <includeModuleDirectory>false</includeModuleDirectory>
        <fileSets>
          <fileSet>
            <directory>src</directory>
            <outputDirectory>examples/src</outputDirectory>
            <fileMode>0644</fileMode>
            <directoryMode>0755</directoryMode>
          </fileSet>
          <fileSet>
            <outputDirectory>examples/</outputDirectory>
            <includes>
              <include>pom.xml</include>
              <include>README.txt</include>
            </includes>
            <fileMode>0644</fileMode>
            <directoryMode>0755</directoryMode>
          </fileSet>
        </fileSets>
      </sources>
    </moduleSet>
    <moduleSet>
      <useAllReactorProjects>true</useAllReactorProjects>
      <includes>
        <include>org.apache.qpid:qpid-jms-docs</include>
      </includes>
      <sources>
        <includeModuleDirectory>false</includeModuleDirectory>
        <fileSets>
          <fileSet>
            <includes>
              <include>*.md</include>
              <include>README.txt</include>
            </includes>
            <outputDirectory>docs</outputDirectory>
            <fileMode>0644</fileMode>
            <directoryMode>0755</directoryMode>
          </fileSet>
        </fileSets>
      </sources>
    </moduleSet>
  </moduleSets>
</assembly>

