<!-- ~ 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.phoenix</groupId>
		<artifactId>phoenix</artifactId>
		<version>4.14.0-cdh5.13.2</version>
	</parent>

	<artifactId>phoenix-pherf</artifactId>
	<packaging>jar</packaging>
	<name>Phoenix - Pherf</name>

	<properties>
		<top.dir>${project.basedir}/..</top.dir>
		<shaded.package>org.apache.phoenix.shaded</shaded.package>
	</properties>

	<repositories>
		<repository>
			<id>apache release</id>
			<url>https://repository.apache.org/content/repositories/releases/</url>
		</repository>
	</repositories>

	<dependencies>
		<dependency>
			<groupId>org.apache.phoenix</groupId>
			<artifactId>phoenix-core</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.phoenix</groupId>
			<artifactId>phoenix-core</artifactId>
			<classifier>tests</classifier>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>com.googlecode.java-diff-utils</groupId>
			<artifactId>diffutils</artifactId>
			<version>1.2.1</version>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>3.3.2</version>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-math3</artifactId>
			<version>3.3</version>
		</dependency>
    <dependency>
      <groupId>commons-cli</groupId>
      <artifactId>commons-cli</artifactId>
    </dependency>

		<!-- Test Dependencies -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>com.jcabi</groupId>
			<artifactId>jcabi-jdbc</artifactId>
			<version>0.15</version>
		</dependency>
		<dependency>
			<groupId>org.hamcrest</groupId>
			<artifactId>hamcrest-junit</artifactId>
			<version>1.0.0.0</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>com.github.stefanbirkner</groupId>
			<artifactId>system-rules</artifactId>
			<version>1.8.0</version>
		</dependency>
		<dependency>
			<groupId>org.apache.hbase</groupId>
			<artifactId>hbase-testing-util</artifactId>
			<scope>test</scope>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.apache.hbase</groupId>
			<artifactId>hbase-it</artifactId>
			<type>test-jar</type>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.tephra</groupId>
			<artifactId>tephra-core</artifactId>
			<type>test-jar</type>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-minicluster</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<resources>
			<resource>
				<directory>src/main/resources</directory>
			</resource>
			<resource>
				<directory>config</directory>
				<excludes>
					<exclude>**/*.sql</exclude>
					<exclude>**/*.xml</exclude>
				</excludes>
			</resource>
		</resources>
		<testResources>
			<testResource>
				<directory>src/test/resources</directory>
			</testResource>
			<testResource>
				<directory>${project.basedir}/config</directory>
			</testResource>
		</testResources>
		<plugins>
			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>build-helper-maven-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-failsafe-plugin</artifactId>
			</plugin>
			<plugin>
				<artifactId>maven-dependency-plugin</artifactId>
			</plugin>

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.7</source>
					<target>1.7</target>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
					<configuration>
						<workingDirectory>${java.io.tmpdir}</workingDirectory>
						<forkCount>1</forkCount>
					</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-resources-plugin</artifactId>
			</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-pherf-${project.version}-minimal.jar</file>
			</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-pherf-${project.version}-minimal</finalName>
						<shadedArtifactAttached>false</shadedArtifactAttached>
						<promoteTransitiveDependencies>true</promoteTransitiveDependencies>
						<shadeTestJar>false</shadeTestJar>
						<transformers>
							<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
							<transformer
									implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
								<resource>README.md</resource>
								<file>${project.basedir}/../README.md</file>
							</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-pherf</include>
								<include>com.googlecode.java-diff-utils:diffutils</include>
								<include>org.apache.commons:commons-lang3</include>
								<include>org.apache.commons:commons-math3</include>
								<include>commons-cli:commons-cli</include>
								<include>joda-time:joda-time</include>
								<include>org.apache.commons:commons-csv</include>
								<include>commons-lang:commons-lang</include>
							</includes>
						</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>

						<relocations>

							<!-- COM relocation -->
							<relocation>
								<pattern>com.codahale</pattern>
								<shadedPattern>${shaded.package}.com.codahale</shadedPattern>
							</relocation>
							<relocation>
								<pattern>com.fasterxml</pattern>
								<shadedPattern>${shaded.package}.com.fasterxml</shadedPattern>
							</relocation>
							<relocation>
								<pattern>com.jamesmurty</pattern>
								<shadedPattern>${shaded.package}.com.jamesmurty</shadedPattern>
							</relocation>
							<relocation>
								<pattern>com.jcraft</pattern>
								<shadedPattern>${shaded.package}.com.jcraft</shadedPattern>
							</relocation>
							<relocation>
								<pattern>com.lmax</pattern>
								<shadedPattern>${shaded.package}.com.lmax</shadedPattern>
							</relocation>
							<relocation>
								<pattern>com.thoughtworks</pattern>
								<shadedPattern>${shaded.package}.com.thoughtworks</shadedPattern>
							</relocation>
							<relocation>
								<pattern>com.yammer</pattern>
								<shadedPattern>${shaded.package}.com.yammer</shadedPattern>
							</relocation>

							<!-- IO relocations -->
							<relocation>
								<pattern>io.netty</pattern>
								<shadedPattern>${shaded.package}.io.netty</shadedPattern>
							</relocation>

							<!-- ORG relocations -->
							<relocation>
								<pattern>org.antlr</pattern>
								<shadedPattern>${shaded.package}.org.antlr</shadedPattern>
							</relocation>
							<relocation>
								<pattern>org.aopalliance</pattern>
								<shadedPattern>${shaded.package}.org.aopalliance</shadedPattern>
							</relocation>
							<relocation>
								<pattern>org.codehaus</pattern>
								<shadedPattern>${shaded.package}.org.codehaus</shadedPattern>
							</relocation>
							<relocation>
								<pattern>org.fusesource</pattern>
								<shadedPattern>${shaded.package}.org.fusesource</shadedPattern>
							</relocation>
							<relocation>
								<pattern>org.hamcrest</pattern>
								<shadedPattern>${shaded.package}.org.hamcrest</shadedPattern>
							</relocation>
							<relocation>
								<pattern>org.hsqldb</pattern>
								<shadedPattern>${shaded.package}.org.hsqldb</shadedPattern>
							</relocation>
							<relocation>
								<pattern>org.iq80</pattern>
								<shadedPattern>${shaded.package}.org.iq80</shadedPattern>
							</relocation>
							<relocation>
								<pattern>org.jamon</pattern>
								<shadedPattern>${shaded.package}.org.jamon</shadedPattern>
							</relocation>
							<relocation>
								<pattern>org.jboss</pattern>
								<shadedPattern>${shaded.package}.org.jboss</shadedPattern>
							</relocation>
							<relocation>
								<pattern>org.jcodings</pattern>
								<shadedPattern>${shaded.package}.org.jcodings</shadedPattern>
							</relocation>
							<relocation>
								<pattern>org.jets3t</pattern>
								<shadedPattern>${shaded.package}.org.jets3t</shadedPattern>
							</relocation>
							<relocation>
								<pattern>org.joda</pattern>
								<shadedPattern>${shaded.package}.org.joda</shadedPattern>
							</relocation>
							<relocation>
								<pattern>org.joni</pattern>
								<shadedPattern>${shaded.package}.org.joni</shadedPattern>
							</relocation>
							<relocation>
								<pattern>org.junit</pattern>
								<shadedPattern>${shaded.package}.org.junit</shadedPattern>
							</relocation>
							<relocation>
								<pattern>org.kosmix</pattern>
								<shadedPattern>${shaded.package}.org.kosmix</shadedPattern>
							</relocation>
							<relocation>
								<pattern>org.mortbay</pattern>
								<shadedPattern>${shaded.package}.org.mortbay</shadedPattern>
							</relocation>
							<relocation>
								<pattern>org.objectweb</pattern>
								<shadedPattern>${shaded.package}.org.objectweb</shadedPattern>
							</relocation>
							<relocation>
								<pattern>org.stringtemplate</pattern>
								<shadedPattern>${shaded.package}.org.stringtemplate</shadedPattern>
							</relocation>
							<relocation>
								<pattern>org.tukaani</pattern>
								<shadedPattern>${shaded.package}.org.tukaani</shadedPattern>
							</relocation>
							<relocation>
								<pattern>org.znerd</pattern>
								<shadedPattern>${shaded.package}.org.znerd</shadedPattern>
							</relocation>
							<relocation>
								<pattern>org.apache.avro</pattern>
								<shadedPattern>${shaded.package}.org.apache.avro</shadedPattern>
							</relocation>
							<relocation>
								<pattern>org.apache.commons</pattern>
								<shadedPattern>${shaded.package}.org.apache.commons</shadedPattern>
								<excludes>
									<exclude>org.apache.commons.csv.**</exclude>
									<exclude>org.apache.commons.logging.**</exclude>
								</excludes>
							</relocation>
							<relocation>
								<pattern>org.apache.directory</pattern>
								<shadedPattern>${shaded.package}.org.apache.directory</shadedPattern>
							</relocation>
							<relocation>
								<pattern>org.apache.http</pattern>
								<shadedPattern>${shaded.package}.org.apache.http</shadedPattern>
							</relocation>
							<relocation>
								<pattern>org.apache.jasper</pattern>
								<shadedPattern>${shaded.package}.org.apache.jasper</shadedPattern>
							</relocation>
							<relocation>
								<pattern>org.apache.jute</pattern>
								<shadedPattern>${shaded.package}.org.apache.jute</shadedPattern>
							</relocation>
							<relocation>
								<pattern>org.apache.mina</pattern>
								<shadedPattern>${shaded.package}.org.apache.mina</shadedPattern>
							</relocation>
							<relocation>
								<pattern>org.apache.oro</pattern>
								<shadedPattern>${shaded.package}.org.apache.oro</shadedPattern>
							</relocation>
							<relocation>
								<pattern>org.apache.taglibs</pattern>
								<shadedPattern>${shaded.package}.org.apache.taglibs</shadedPattern>
							</relocation>
							<relocation>
								<pattern>org.apache.thrift</pattern>
								<shadedPattern>${shaded.package}.org.apache.thrift</shadedPattern>
							</relocation>
							<relocation>
								<pattern>org.apache.tools</pattern>
								<shadedPattern>${shaded.package}.org.apache.tools</shadedPattern>
							</relocation>
							<relocation>
								<pattern>org.apache.twill</pattern>
								<shadedPattern>${shaded.package}.org.apache.twill</shadedPattern>
							</relocation>
							<relocation>
								<pattern>org.apache.velocity</pattern>
								<shadedPattern>${shaded.package}.org.apache.velocity</shadedPattern>
							</relocation>
							<relocation>
								<pattern>org.apache.zookeeper</pattern>
								<shadedPattern>${shaded.package}.org.apache.zookeeper</shadedPattern>
							</relocation>

							<!-- NET relocations -->
							<relocation>
								<pattern>net</pattern>
								<shadedPattern>${shaded.package}.net</shadedPattern>
							</relocation>

							<!-- Misc relocations -->
							<relocation>
								<pattern>antlr</pattern>
								<shadedPattern>${shaded.package}.antlr</shadedPattern>
							</relocation>
							<relocation>
								<pattern>it.unimi</pattern>
								<shadedPattern>${shaded.package}.it.unimi</shadedPattern>
							</relocation>
							<relocation>
								<pattern>jline</pattern>
								<shadedPattern>${shaded.package}.jline</shadedPattern>
							</relocation>
							<relocation>
								<pattern>junit</pattern>
								<shadedPattern>${shaded.package}.junit</shadedPattern>
							</relocation>
						</relocations>
					</configuration>
				</execution>
			</executions>
		</plugin>



			<plugin>
				<groupId>org.apache.rat</groupId>
				<artifactId>apache-rat-plugin</artifactId>
				<configuration>
					<excludes>
						<exclude>*/RESULTS/**</exclude>
						<exclude>README.md</exclude>
					</excludes>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>
