<?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>
  <id>bin</id>
  <formats>
    <format>tar.gz</format>
    <format>zip</format>
  </formats>
  <fileSets>
    <fileSet>
      <directory>${project.build.outputDirectory}</directory>
      <outputDirectory>/</outputDirectory>
      <includes>
        <include>LICENSE</include>
        <include>NOTICE</include>
      </includes>
    </fileSet>
    <fileSet>
      <directory>${project.build.outputDirectory}</directory>
      <outputDirectory>bin/</outputDirectory>
      <includes>
        <include>batchee</include>
      </includes>
      <lineEnding>unix</lineEnding>
      <fileMode>0755</fileMode>
    </fileSet>
    <fileSet>
      <directory>${project.build.outputDirectory}</directory>
      <outputDirectory>conf/</outputDirectory>
      <includes>
        <include>logging.properties</include>
        <include>batchee-cli_openejb.properties</include>
      </includes>
      <lineEnding>unix</lineEnding>
    </fileSet>
    <fileSet>
      <directory>${project.build.outputDirectory}/openejb</directory>
      <outputDirectory>conf/</outputDirectory>
      <includes>
        <include>batchee-cli.properties</include>
      </includes>
      <lineEnding>unix</lineEnding>
    </fileSet>
    <fileSet>
      <directory>${project.build.directory}/</directory>
      <outputDirectory>bin/</outputDirectory>
      <includes>
        <include>batchee-cli-*-bootstrap.jar</include>
      </includes>
    </fileSet>
    <fileSet>
      <directory>${project.build.directory}/</directory>
      <outputDirectory>lib/</outputDirectory>
      <includes>
        <include>batchee-cli-*-runner.jar</include>
      </includes>
    </fileSet>
  </fileSets>
  <dependencySets>
    <dependencySet>
      <outputFileNameMapping>${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension}</outputFileNameMapping>
      <outputDirectory>lib</outputDirectory>
      <scope>runtime</scope>
      <excludes>
        <exclude>org.apache.batchee:batchee-cli</exclude> <!-- we use bootstrap and runner -->
      </excludes>
    </dependencySet>
    <dependencySet>
      <outputFileNameMapping>${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension}</outputFileNameMapping>
      <outputDirectory>lib</outputDirectory>
      <scope>provided</scope>
      <includes>
        <include>org.apache.tomee:javaee-api</include>
        <include>org.apache.tomee:openejb-api</include>
        <include>org.apache.tomee:openejb-javaagent</include>
        <include>org.apache.tomee:openejb-jee</include>
        <include>org.apache.tomee:openejb-jee-accessors</include>
        <include>org.apache.tomee:openejb-core</include>
        <include>org.apache.tomee:openejb-loader</include>
        <include>org.apache.tomee:openejb-jpa-integration</include>
        <include>org.apache.tomee:mbean-annotation-api</include>
        <include>org.apache.openejb.shade:quartz-openejb-shade</include>
        <include>org.metatype.sxc:sxc-runtime</include>
        <include>org.metatype.sxc:sxc-jaxb-core</include>
        <include>org.apache.geronimo.components:geronimo-transaction</include>
        <include>org.objectweb.howl:howl</include>
        <include>org.apache.geronimo.javamail:geronimo-javamail_1.4_mail</include>
        <include>org.apache.xbean:xbean-asm5-shaded</include>
        <include>org.apache.xbean:xbean-finder-shaded</include>
        <!--<include>org.apache.xbean:xbean-reflect</include>--> <!-- already used by batchee -->
        <include>org.apache.xbean:xbean-naming</include>
        <include>org.apache.xbean:xbean-bundleutils</include>
        <include>org.hsqldb:hsqldb</include>
        <include>org.apache.commons:commons-pool2</include>
        <include>org.apache.commons:commons-dbcp2</include>
        <include>org.apache.commons:commons-lang3</include>
        <include>org.slf4j:slf4j-api</include>
        <include>org.slf4j:slf4j-jdk14</include>
        <include>org.apache.openwebbeans:openwebbeans-impl</include>
        <include>org.apache.openwebbeans:openwebbeans-spi</include>
        <include>org.apache.openwebbeans:openwebbeans-ee</include>
        <include>org.apache.openwebbeans:openwebbeans-ee-common</include>
        <include>org.apache.openwebbeans:openwebbeans-ejb</include>
        <include>org.apache.openwebbeans:openwebbeans-web</include>
        <include>org.apache.openwebbeans:openwebbeans-el22</include>
        <include>org.apache.openjpa:openjpa</include>
        <include>org.apache.bval:bval-core</include>
        <include>org.apache.bval:bval-jsr</include>
        <include>commons-beanutils:commons-beanutils-core</include>
        <include>commons-lang:commons-lang</include>
        <include>commons-collections:commons-collections</include>
        <include>commons-logging:commons-logging</include>
        <include>commons-cli:commons-cli</include>
        <include>net.sourceforge.serp:serp</include>
      </includes>
    </dependencySet>
  </dependencySets>
</assembly>
