<!--

    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.

-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.apache.pulsar</groupId>
    <artifactId>pulsar</artifactId>
    <version>2.8.0-SNAPSHOT</version>
    <relativePath>..</relativePath>
  </parent>

  <artifactId>pulsar-client</artifactId>
  <name>Pulsar Client Java</name>

  <dependencies>
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>pulsar-client-original</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>pulsar-client-messagecrypto-bc</artifactId>
      <version>${project.version}</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>


      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
          <execution>
            <id>unpack</id>
            <phase>prepare-package</phase>
            <goals>
              <goal>unpack</goal>
            </goals>
            <configuration>
              <artifactItems>
                <artifactItem>
                  <groupId>${project.groupId}</groupId>
                  <artifactId>pulsar-client-original</artifactId>
                  <version>${project.version}</version>
                  <type>jar</type>
                  <overWrite>true</overWrite>
                  <includes>**/ProtobufSchema.class</includes>
                  <outputDirectory>${project.build.directory}/classes</outputDirectory>
                </artifactItem>
                <artifactItem>
                  <groupId>org.asynchttpclient</groupId>
                  <artifactId>async-http-client</artifactId>
                  <version>${asynchttpclient.version}</version>
                  <type>jar</type>
                  <overWrite>true</overWrite>
                  <includes>org/asynchttpclient/config/ahc-default.properties</includes>
                  <outputDirectory>${project.build.directory}/classes</outputDirectory>
                </artifactItem>
              </artifactItems>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>
          <execution>
            <id>shade-ahc-properties</id>
            <phase>prepare-package</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <target>
                <!-- shade the AsyncHttpClient ahc-default.properties files -->
                <replace token= "org.asynchttpclient."
                         value="org.apache.pulsar.shade.org.asynchttpclient."
                         file="${project.build.directory}/classes/org/asynchttpclient/config/ahc-default.properties"/>
              </target>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <!-- Shade all the dependencies to avoid conflicts -->
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <createDependencyReducedPom>true</createDependencyReducedPom>
              <promoteTransitiveDependencies>true</promoteTransitiveDependencies>
              <minimizeJar>false</minimizeJar>

              <artifactSet>
                <includes>
                  <include>org.apache.pulsar:pulsar-client-original</include>
                  <include>org.apache.pulsar:pulsar-client-api</include>
                  <include>org.apache.bookkeeper:bookkeeper-common-allocator</include>
                  <include>org.apache.commons:commons-lang3</include>
                  <include>commons-codec:commons-codec</include>
                  <include>commons-collections:commons-collections</include>
                  <include>org.asynchttpclient:*</include>
                  <include>io.netty:netty-codec-http</include>
                  <include>io.netty:netty-transport-native-epoll</include>
                  <include>org.reactivestreams:reactive-streams</include>
                  <include>com.typesafe.netty:netty-reactive-streams</include>
                  <include>org.javassist:javassist</include>
                  <include>com.google.guava:guava</include>
                  <include>com.google.guava:failureaccess</include>
                  <include>com.google.code.gson:gson</include>
                  <include>com.fasterxml.jackson.core</include>
                  <include>com.fasterxml.jackson.module</include>
                  <include>com.fasterxml.jackson.core:jackson-core</include>
                  <include>com.fasterxml.jackson.dataformat</include>
                  <include>io.netty:*</include>
                  <include>io.perfmark:*</include>
                  <include>org.eclipse.jetty:*</include>
                  <include>com.yahoo.datasketches:*</include>
                  <include>commons-*:*</include>
                  <include>io.swagger:*</include>

                  <include>org.apache.pulsar:pulsar-common</include>
                  <include>org.apache.bookkeeper:circe-checksum</include>
                  <include>com.yahoo.datasketches:sketches-core</include>
                  <include>org.objenesis:*</include>
                  <include>org.yaml:snakeyaml</include>

                  <include>org.apache.avro:*</include>
                  <!-- Avro transitive dependencies-->
                  <include>org.codehaus.jackson:jackson-core-asl</include>
                  <include>org.codehaus.jackson:jackson-mapper-asl</include>
                  <include>com.thoughtworks.paranamer:paranamer</include>
                  <include>org.apache.commons:commons-compress</include>
                  <include>org.tukaani:xz</include>
                  <!-- Issue #6834, Since Netty ByteBuf shaded, we need also shade this module -->
                  <include>org.apache.pulsar:pulsar-client-messagecrypto-bc</include>
                </includes>
              </artifactSet>
              <filters>
                <filter>
                  <artifact>org.apache.pulsar:pulsar-client-original</artifact>
                  <includes>
                    <include>**</include>
                  </includes>
                  <excludes>
                    <!-- bouncycastle jars could not be shaded, or the signatures will be wrong-->
                    <exclude>org/bouncycastle/**</exclude>
                  </excludes>
                </filter>
              </filters>
              <relocations>
                <relocation>
                  <pattern>org.asynchttpclient</pattern>
                  <shadedPattern>org.apache.pulsar.shade.org.asynchttpclient</shadedPattern>
                </relocation>
                <relocation>
                  <pattern>org.apache.commons</pattern>
                  <shadedPattern>org.apache.pulsar.shade.org.apache.commons</shadedPattern>
                </relocation>
                <relocation>
                  <pattern>com.google</pattern>
                  <shadedPattern>org.apache.pulsar.shade.com.google</shadedPattern>
                  <excludes>
                    <exclude>com.google.protobuf.*</exclude>
                  </excludes>
                </relocation>
                <relocation>
                  <pattern>com.fasterxml.jackson</pattern>
                  <shadedPattern>org.apache.pulsar.shade.com.fasterxml.jackson</shadedPattern>
                </relocation>
                <relocation>
                  <pattern>io.netty</pattern>
                  <shadedPattern>org.apache.pulsar.shade.io.netty</shadedPattern>
                </relocation>
                <relocation>
                  <pattern>io.swagger</pattern>
                  <shadedPattern>org.apache.pulsar.shade.io.swagger</shadedPattern>
                </relocation>
                <relocation>
                  <pattern>org.apache.pulsar.policies</pattern>
                  <shadedPattern>org.apache.pulsar.shade.org.apache.pulsar.policies</shadedPattern>
                </relocation>
                <relocation>
                  <pattern>com.yahoo.datasketches</pattern>
                  <shadedPattern>org.apache.pulsar.shade.com.yahoo.datasketches</shadedPattern>
                </relocation>
                <relocation>
                  <pattern>com.yahoo.sketches</pattern>
                  <shadedPattern>org.apache.pulsar.shade.com.yahoo.sketches</shadedPattern>
                </relocation>
                <relocation>
                  <pattern>org.eclipse.jetty</pattern>
                  <shadedPattern>org.apache.pulsar.shade.org.eclipse</shadedPattern>
                </relocation>
                <relocation>
                  <pattern>org.reactivestreams</pattern>
                  <shadedPattern>org.apache.pulsar.shade.org.reactivestreams</shadedPattern>
                </relocation>
                <relocation>
                  <pattern>com.typesafe</pattern>
                  <shadedPattern>org.apache.pulsar.shade.com.typesafe</shadedPattern>
                </relocation>
                <relocation>
                  <pattern>com.yahoo.memory</pattern>
                  <shadedPattern>org.apache.pulsar.shade.com.yahoo.memory</shadedPattern>
                </relocation>
                <relocation>
                  <pattern>org.objenesis</pattern>
                  <shadedPattern>org.apache.pulsar.shade.org.objenesis</shadedPattern>
                </relocation>
                <relocation>
                  <pattern>org.yaml</pattern>
                  <shadedPattern>org.apache.pulsar.shade.org.yaml</shadedPattern>
                </relocation>
                <relocation>
                  <pattern>org.apache.avro</pattern>
                  <shadedPattern>org.apache.pulsar.shade.org.apache.avro</shadedPattern>
                  <excludes>
                    <exclude>org.apache.avro.reflect.AvroAlias</exclude>
                    <exclude>org.apache.avro.reflect.AvroDefault</exclude>
                    <exclude>org.apache.avro.reflect.AvroEncode</exclude>
                    <exclude>org.apache.avro.reflect.AvroIgnore</exclude>
                    <exclude>org.apache.avro.reflect.AvroMeta</exclude>
                    <exclude>org.apache.avro.reflect.AvroName</exclude>
                    <exclude>org.apache.avro.reflect.AvroSchema</exclude>
                    <exclude>org.apache.avro.reflect.Nullable</exclude>
                    <exclude>org.apache.avro.reflect.Stringable</exclude>
                    <exclude>org.apache.avro.reflect.Union</exclude>
                  </excludes>
                </relocation>
                <!--Avro transitive dependencies-->
                <relocation>
                  <pattern>org.codehaus.jackson</pattern>
                  <shadedPattern>org.apache.pulsar.shade.org.codehaus.jackson</shadedPattern>
                </relocation>
                <relocation>
                  <pattern>com.thoughtworks.paranamer</pattern>
                  <shadedPattern>org.apache.pulsar.shade.com.thoughtworks.paranamer</shadedPattern>
                </relocation>
                <relocation>
                  <pattern>org.apache.commons</pattern>
                  <shadedPattern>org.apache.pulsar.shade.org.apache.commons</shadedPattern>
                </relocation>
                <relocation>
                  <pattern>org.tukaani</pattern>
                  <shadedPattern>org.apache.pulsar.shade.org.tukaani</shadedPattern>
                </relocation>
                <relocation>
                  <pattern>org.apache.bookkeeper</pattern>
                  <shadedPattern>org.apache.pulsar.shade.org.apache.bookkeeper</shadedPattern>
                </relocation>
              </relocations>
              <transformers>
                <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
                <transformer implementation="org.apache.maven.plugins.shade.resource.PluginXmlResourceTransformer" />
              </transformers>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>com.github.spotbugs</groupId>
        <artifactId>spotbugs-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>spotbugs</id>
            <phase>verify</phase>
            <goals>
              <goal>check</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <!-- This plugin is used to run a script after the package phase in order to rename
            libnetty_transport_native_epoll_x86_64.so from Netty into
            liborg_apache_pulsar_shade_netty_transport_native_epoll_x86_64.so
            to reflect the shade that is being applied.
         -->
        <artifactId>exec-maven-plugin</artifactId>
        <groupId>org.codehaus.mojo</groupId>
        <executions>
          <execution>
            <id>rename-epoll-library</id>
            <phase>package</phase>
            <goals>
              <goal>exec</goal>
            </goals>
            <configuration>
              <executable>${project.parent.basedir}/src/${rename.netty.native.libs}</executable>
              <arguments>
                <argument>${project.artifactId}</argument>
              </arguments>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
