<?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.
-->

<!-- $Rev: 699189 $ $Date: 2008-09-26 01:16:00 -0500 (Fri, 26 Sep 2008) $ -->

<assembly>
  <id>libs</id>
  <formats>
    <format>zip</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <fileSets>
    <fileSet>
      <directory>${basedir}/target/classes/META-INF</directory>
      <outputDirectory>/</outputDirectory>
      <includes>
        <include>README.txt</include>
      </includes>
      <excludes>
        <exclude>all</exclude>
        <exclude>plus</exclude>
      </excludes>
    </fileSet>
  </fileSets>
  <files>
    <file>
      <source>${project.basedir}/src/main/legal/META-INF/all/LICENSE</source>
      <outputDirectory>/</outputDirectory>
      <destName>LICENSE</destName>
    </file>
    <file>
      <source>${project.basedir}/src/main/legal/META-INF/all/NOTICE</source>
      <outputDirectory>/</outputDirectory>
      <destName>NOTICE</destName>
    </file>
  </files>
  <dependencySets>
    <dependencySet>
      <outputDirectory>/</outputDirectory>
      <excludes>
        <exclude>org.apache.openejb:javaee-api</exclude>
        <exclude>org.apache.geronimo.specs:geronimo-osgi-locator</exclude>
        <exclude>*:*:sources</exclude>
        <exclude>junit:junit</exclude>
      </excludes>
    </dependencySet>
  </dependencySets>
</assembly>

