<project xmlns="https://maven.apache.org/POM/4.0.0"
         xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <!--
      /**
       * 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.
       */
      -->
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <artifactId>hbase-shaded</artifactId>
        <groupId>org.apache.hbase</groupId>
        <version>2.4.1</version>
        <relativePath>..</relativePath>
    </parent>
    <artifactId>hbase-shaded-client</artifactId>
    <name>Apache HBase - Shaded - Client (with Hadoop bundled)</name>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-site-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
            <plugin>
                <!--Make it so assembly:single does nothing in here-->
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <skipAssembly>true</skipAssembly>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <executions>
                    <execution>
                        <id>aggregate-into-a-jar-with-relocated-third-parties</id>
                        <configuration>
                            <artifactSet>
                                <excludes>
                                    <!-- exclude J2EE modules that come in for JDK11+ (since
                                         hadoop-3.2.0) or modules that come in for JDK8+ but
                                         need not be included -->
                                    <exclude>javax.annotation:javax.annotation-api</exclude>
                                    <exclude>javax.activation:javax.activation-api</exclude>
                                    <exclude>jakarta.ws.rs:jakarta.ws.rs-api</exclude>
                                    <exclude>jakarta.annotation:jakarta.annotation-api</exclude>
                                    <exclude>jakarta.validation:jakarta.validation-api</exclude>
                                    <exclude>org.glassfish.hk2.external:jakarta.inject</exclude>
                                    <!--
                                      Tell the shade plugin that in this case we want to include hadoop
                                      by leaving out the exclude.
                                      -->
                                    <!-- The rest of these should be kept in sync with the parent pom -->
                                    <exclude>org.apache.hbase:hbase-resource-bundle</exclude>
                                    <exclude>org.slf4j:*</exclude>
                                    <exclude>com.google.code.findbugs:*</exclude>
                                    <exclude>com.github.stephenc.findbugs:*</exclude>
                                    <exclude>com.github.spotbugs:*</exclude>
                                    <exclude>org.apache.htrace:*</exclude>
                                    <exclude>org.apache.yetus:*</exclude>
                                    <exclude>log4j:*</exclude>
                                    <exclude>commons-logging:*</exclude>
                                    <exclude>org.javassist:*</exclude>
                                </excludes>
                            </artifactSet>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
        </dependency>
    </dependencies>

</project>
