<?xml version="1.0"?>
<!--

    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
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
  xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.apache.pulsar</groupId>
    <artifactId>pulsar</artifactId>
    <version>2.4.0</version>
    <relativePath>..</relativePath>
  </parent>

  <artifactId>jclouds-shaded</artifactId>
  <name>Apache Pulsar :: Jclouds shaded</name>

  <dependencies>
    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.5</version>
    </dependency>
    <dependency>
      <groupId>org.apache.jclouds</groupId>
      <artifactId>jclouds-allblobstore</artifactId>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <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>com.google.code.gson:gson</include>
                  <include>com.google.guava:guava</include>
                  <include>org.apache.jclouds:*</include>
                  <include>org.apache.jclouds.api:*</include>
                  <include>org.apache.jclouds.common:*</include>
                  <include>org.apache.jclouds.provider:*</include>
                  <include>com.google.inject.extensions:guice-assistedinject</include>
                  <include>com.google.inject:guice</include>
                  <include>com.google.inject.extensions:guice-multibindings</include>
                  <include>javax.ws.rs:*</include>
                  <include>com.jamesmurty.utils:*</include>
                  <include>net.iharder:*</include>
                  <include>aopalliance:*</include>
                  <include>javax.inject:*</include>
                  <include>javax.annotation:*</include>
                  <inlude>com.google.errorprone:*</inlude>
                </includes>
              </artifactSet>

              <relocations>
                <relocation>
                  <pattern>com.google</pattern>
                  <shadedPattern>org.apache.pulsar.jcloud.shade.com.google</shadedPattern>
                </relocation>
                <relocation>
                <pattern>javax.ws</pattern>
                <shadedPattern>org.apache.pulsar.jcloud.shade.javax.ws</shadedPattern>
              </relocation>
                <relocation>
                  <pattern>com.jamesmurty.utils</pattern>
                  <shadedPattern>org.apache.pulsar.jcloud.shade.com.jamesmurty.utils</shadedPattern>
                </relocation>
                <relocation>
                  <pattern>aopalliance</pattern>
                  <shadedPattern>org.apache.pulsar.jcloud.shade.aopalliance</shadedPattern>
                </relocation>
                <relocation>
                  <pattern>net.iharder</pattern>
                  <shadedPattern>org.apache.pulsar.jcloud.shade.net.iharder</shadedPattern>
                </relocation>
                <relocation>
                  <pattern>javax.inject</pattern>
                  <shadedPattern>org.apache.pulsar.jcloud.shade.javax.inject</shadedPattern>
                </relocation>
                <relocation>
                  <pattern>javax.annotation</pattern>
                  <shadedPattern>org.apache.pulsar.jcloud.shade.javax.annotation</shadedPattern>
                </relocation>
                <relocation>
                  <pattern>com.google.errorprone</pattern>
                  <shadedPattern>org.apache.pulsar.jcloud.shade.com.google.errorprone</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>
    </plugins>
  </build>
</project>
