<?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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.apache.phoenix</groupId>
    <artifactId>phoenix</artifactId>
    <version>4.15.0-HBase-1.4</version>
  </parent>
  <artifactId>phoenix-server</artifactId>
  <name>Phoenix Server</name>
  <description>Phoenix Server</description>
  <packaging>jar</packaging>
  <properties>
    <!-- Don't make a test-jar -->
    <maven.test.skip>true</maven.test.skip>
    <!-- Don't make a source-jar -->
    <source.skip>true</source.skip>
    <license.bundles.dependencies>true</license.bundles.dependencies>
    <top.dir>${project.basedir}/..</top.dir>
  </properties>

  <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-jar-plugin</artifactId>
        <configuration>
          <finalName>phoenix-${project.version}-server</finalName>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-install-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>install-file</goal>
            </goals>
            <id>default-install</id>
            <configuration>
              <skip>true</skip>
            </configuration>
            <phase>install</phase>
          </execution>
        </executions>
        <configuration>
          <file>${basedir}/target/phoenix-${project.version}-server.jar</file>
 	  <pomFile>${basedir}/pom.xml</pomFile>
        </configuration>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <finalName>phoenix-${project.version}-server</finalName>
                <shadedArtifactAttached>false</shadedArtifactAttached>
                <promoteTransitiveDependencies>true</promoteTransitiveDependencies>
                <shadeTestJar>false</shadeTestJar>
                <transformers>
                    <transformer
                            implementation="org.apache.maven.plugins.shade.resource.ApacheNoticeResourceTransformer">
                        <addHeader>false</addHeader>
                    </transformer>
                  <transformer
                      implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
                    <resource>LICENSE.txt</resource>
                    <file>${project.basedir}/../LICENSE</file>
                  </transformer>
                  <transformer
                      implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
                    <resource>NOTICE</resource>
                    <file>${project.basedir}/../NOTICE</file>
                  </transformer>
                </transformers>
                <artifactSet>
                <includes>
                  <include>org.apache.phoenix:phoenix-core</include>
                  <include>org.iq80.snappy:snappy</include>
                  <include>org.antlr:antlr*</include>
                  <include>org.apache.tephra:tephra*</include>
                  <include>org.apache.omid:omid*</include>
                  <include>org.apache.commons:commons-collections4</include>
                  <include>org.jboss.netty:netty</include>
                  <include>com.google.code.gson:gson</include>
                  <include>org.jruby.joni:joni</include>
                  <include>org.jruby.jcodings:jcodings</include>
                  <include>joda-time:joda-time</include>
                  <include>org.apache.twill:twill*</include>
                  <include>com.google.inject.extensions:guice-assistedinject</include>
                  <include>it.unimi.dsi:fastutil</include>
                  <include>io.dropwizard.metrics:metrics-core</include>
                  <include>org.apache.thrift:libthrift</include>
                  <include>com.clearspring.analytics:stream</include>
                  <include>com.salesforce.i18n:i18n-util</include>
                  <include>com.ibm.icu:icu4j</include>
                  <include>com.ibm.icu:icu4j-charset</include>
                  <include>com.ibm.icu:icu4j-localespi</include>
                  <include>com.lmax:disruptor</include>
                </includes>
                  <excludes>
                    <exclude>org.apache.phoenix:phoenix-server</exclude>
                  </excludes>
              </artifactSet>
              <filters>
                <filter>
                  <artifact>*:*</artifact>
                  <excludes>
                    <exclude>META-INF/*.SF</exclude>
                    <exclude>META-INF/*.DSA</exclude>
                    <exclude>META-INF/*.RSA</exclude>
                    <exclude>META-INF/license/*</exclude>
                    <exclude>LICENSE.*</exclude>
                    <exclude>NOTICE.*</exclude>
                  </excludes>
                </filter>
              </filters>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <!-- Depend on all other internal projects -->
    <dependency>
      <groupId>org.apache.phoenix</groupId>
      <artifactId>phoenix-core</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-auth</artifactId>
      <version>2.7.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.hbase</groupId>
      <artifactId>hbase-testing-util</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.tephra</groupId>
      <artifactId>tephra-core</artifactId>
      <type>test-jar</type>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>
