<!--
  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>client</id>
    <formats>
        <format>dir</format>
        <format>tar.gz</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>

    <files>
        <file>
            <source>${project.build.directory}/${artifact.artifactId}-${artifact.version}.jar</source>
            <outputDirectory>oozie-client-${project.version}/lib</outputDirectory>
        </file>
    </files>
    <fileSets>
        <!-- Distro files, readme, licenses, etc -->
        <fileSet>
            <directory>${basedir}/../</directory>
            <outputDirectory>oozie-client-${project.version}/</outputDirectory>
            <includes>
                <include>*.txt</include>
            </includes>
        </fileSet>

        <fileSet>
            <directory>${basedir}/src/main/bin</directory>
            <outputDirectory>oozie-client-${project.version}/bin</outputDirectory>
            <includes>
                <include>*</include>
            </includes>
            <fileMode>0755</fileMode>
        </fileSet>

        <fileSet>
            <directory>${basedir}/src/main/conf</directory>
            <outputDirectory>oozie-client-${project.version}/conf</outputDirectory>
            <includes>
                <include>*</include>
            </includes>
            <fileMode>0755</fileMode>
        </fileSet>
    </fileSets>

    <dependencySets>
        <dependencySet>
            <outputDirectory>oozie-client-${project.version}/lib</outputDirectory>
            <unpack>false</unpack>
            <scope>compile</scope>
            <excludes>
                <exclude>javax.persistence:persistence-api</exclude>
            </excludes>
        </dependencySet>
    </dependencySets>
</assembly>
