<?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.
-->
<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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.apache.kyuubi</groupId>
        <artifactId>kyuubi-shaded-parent</artifactId>
        <version>0.1.0-SNAPSHOT</version>
    </parent>

    <artifactId>kyuubi-shaded-zookeeper-parent</artifactId>
    <packaging>pom</packaging>
    <name>kyuubi-shaded-zookeeper-parent</name>

    <modules>
        <module>kyuubi-shaded-zookeeper-34</module>
        <module>kyuubi-shaded-zookeeper-36</module>
    </modules>

    <properties>
        <shading.zookeeper.prefix>${shading.prefix}.zookeeper</shading.zookeeper.prefix>
        <shading.curator.prefix>${shading.prefix}.curator</shading.curator.prefix>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <executions>
                    <execution>
                        <id>shade-kyuubi</id>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <phase>package</phase>
                        <configuration>
                            <createDependencyReducedPom>true</createDependencyReducedPom>
                            <dependencyReducedPomLocation>${project.basedir}/target/dependency-reduced-pom.xml</dependencyReducedPomLocation>
                            <artifactSet>
                                <includes>
                                    <include>*</include>
                                </includes>
                            </artifactSet>
                            <relocations>
                                <relocation>
                                    <pattern>org.apache.zookeeper</pattern>
                                    <shadedPattern>${shading.zookeeper.prefix}.org.apache.zookeeper</shadedPattern>
                                </relocation>
                                <relocation>
                                    <pattern>io.netty</pattern>
                                    <shadedPattern>${shading.zookeeper.prefix}.io.netty</shadedPattern>
                                </relocation>
                                <relocation>
                                    <pattern>org.apache.jute</pattern>
                                    <shadedPattern>${shading.zookeeper.prefix}.org.apache.jute</shadedPattern>
                                </relocation>
                                <relocation>
                                    <pattern>com.codahale.metrics</pattern>
                                    <shadedPattern>${shading.zookeeper.prefix}.com.codahale.metrics</shadedPattern>
                                </relocation>
                                <relocation>
                                    <pattern>org.apache.curator</pattern>
                                    <shadedPattern>${shading.curator.prefix}.org.apache.curator</shadedPattern>
                                </relocation>
                                <relocation>
                                    <pattern>com.google</pattern>
                                    <shadedPattern>${shading.curator.prefix}.com.google</shadedPattern>
                                </relocation>
                            </relocations>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <!-- Used to resolve variables in the 'version' tag -->
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>flatten-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
