<assembly>
  <!--
  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.
  -->
  <id>bin</id>
  <!-- 
  Generates a jar file including the binary jar and the runtime dependencies.
  including NOTICE and LICENSE in the root.
  -->
  <formats>
    <format>zip</format>
    <format>tar.gz</format>
  </formats>
  <fileSets>
    <fileSet>
      <directory>${project.basedir}/..</directory>
      <outputDirectory>/</outputDirectory>
      <includes>
        <include>LICENSE.*</include>
        <include>NOTICE.*</include>
        <include>RELEASE_NOTES.txt</include>
        <include>README</include>
      </includes>
    </fileSet>
    <fileSet>
      <directory>${project.basedir}/../core/target</directory>
      <outputDirectory>/</outputDirectory>
      <includes>
        <include>apache-mime4j*.jar</include>
      </includes>
    </fileSet>
  </fileSets>
  <dependencySets>
    <dependencySet>
      <outputDirectory>/lib/</outputDirectory>
      <useProjectArtifact>false</useProjectArtifact>
      <scope>runtime</scope>
      <excludes>
        <exclude>apache-mime4j*</exclude>
      </excludes>
    </dependencySet>
  </dependencySets>
</assembly>
