<#ftl output_format="XML" strip_whitespace=false>
<?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>
  <!-- Assembles a packaged version targeting OS installation. -->
  <id>package</id>
  <formats>
    <format>zip</format>
    <format>tar.gz</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <fileSets>
    <fileSet>
      <directory><#noparse>${project.basedir}/../..</#noparse></directory>
      <outputDirectory><#noparse>${project.artifactId}/</#noparse></outputDirectory>
      <includes>
        <include>README*</include>
        <include>LICENSE*</include>
        <include>NOTICE*</include>
        <include>licenses/</include>
      </includes>
    </fileSet>
    <fileSet>
      <directory><#noparse>${project.basedir}/src/main/docs</#noparse></directory>
      <outputDirectory><#noparse>docs/</#noparse></outputDirectory>
      <includes>
        <include>**/*</include>
      </includes>
    </fileSet>
  </fileSets>
  <dependencySets>
    <dependencySet>
      <outputDirectory><#noparse>${project.artifactId}/</#noparse></outputDirectory>
      <useProjectArtifact>true</useProjectArtifact>
      <useTransitiveFiltering>true</useTransitiveFiltering>
      <excludes>
        <exclude>org.apache.kafka:connect-api</exclude>
      </excludes>
    </dependencySet>
  </dependencySets>
</assembly>
