<?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 instructions for a client that runs on Java 1.4 -->
<assembly>
  <id>java-client-java14-bin</id>
  <includeBaseDirectory>false</includeBaseDirectory>
  <formats>
    <format>tar.gz</format>
    <format>zip</format>
  </formats>

  <fileSets>
      <fileSet>
          <!-- Apache license files -->
          <directory>../resources</directory>
          <outputDirectory>qpid-${qpid.version}</outputDirectory>
          <includes>
              <include>DISCLAIMER</include>
              <include>LICENSE.txt</include>
              <include>NOTICE.txt</include>
              <include>README.txt</include>
          </includes>
      </fileSet>

      <fileSet>
          <directory>../release-docs</directory>
          <outputDirectory>qpid-${qpid.version}/docs</outputDirectory>
          <includes>
              <include>RELEASE_NOTES.txt</include>
          </includes>
      </fileSet>

  </fileSets>

  <dependencySets>
      <dependencySet>
          <outputDirectory>qpid-${qpid.version}/lib</outputDirectory>
          <unpack>false</unpack>
          
          <excludes>
             <!-- Exclude the Java 5 built client and common. The java 1.4 retrotranslated versions are used instead. -->
             <exclude>org.apache.qpid:qpid-client:jar</exclude>
             <exclude>org.apache.qpid:qpid-common:jar</exclude>

             <!-- Exclude the retrotranslated integration tests from the distriubtion. -->
             <exclude>org.apache.qpid:qpid-integrationtests:jar:java14</exclude>

             <!-- Mina SSL support only available in Java 5. No SSL on 1.4. -->
             <exclude>org.apache.mina:mina-java5</exclude>
             <exclude>org.apache.mina:mina-filter-ssl</exclude>

          </excludes>         
      </dependencySet>
  </dependencySets>
</assembly>


