You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by el...@apache.org on 2018/09/13 22:45:13 UTC

phoenix git commit: PHOENIX-4880 Shade the rest of Phoenix dependencies in phoenix-server.jar

Repository: phoenix
Updated Branches:
  refs/heads/master 2437049b4 -> ba1fd712a


PHOENIX-4880 Shade the rest of Phoenix dependencies in phoenix-server.jar

* Declare the used and missing commons-lang dependency in phoenix-core
* Upgrade to commons-lang3 in phoenix-core
* Relocate META-INF/services via shade-plugin
* Move all dependencies provided by hbase classpath to "scope=provided"
  - This not only skips them in the jar, but skips their transitive dependencies
  - Dependencies with no deps (e.g. log4j) are just marked as excludes
* Bundle and relocate *all* dependencies of Phoenix for the hbase server-side CP

The net result is a slightly larger phoenix-server jar, but one that
should be bullet-proof for us moving forward. Specifically, this fixes
running IndexTool via `bin/hbase` as a mapreduce job.


Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/ba1fd712
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/ba1fd712
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/ba1fd712

Branch: refs/heads/master
Commit: ba1fd712ae8cdc0fc20805a7b03b7df7b0258542
Parents: 2437049
Author: Josh Elser <el...@apache.org>
Authored: Fri Aug 31 19:20:14 2018 -0400
Committer: Josh Elser <el...@apache.org>
Committed: Tue Sep 11 22:10:19 2018 -0400

----------------------------------------------------------------------
 phoenix-client/pom.xml                          |   7 +
 phoenix-core/pom.xml                            |   4 +
 .../phoenix/end2end/AlterTableWithViewsIT.java  |   2 +-
 .../org/apache/phoenix/end2end/DateTimeIT.java  |   2 +-
 .../PartialScannerResultsDisabledIT.java        |   2 +-
 .../org/apache/phoenix/end2end/SortOrderIT.java |   2 +-
 .../phoenix/end2end/UserDefinedFunctionsIT.java |   2 +-
 .../end2end/index/IndexMaintenanceIT.java       |   2 +-
 .../UpsertSelectOverlappingBatchesIT.java       |   2 +-
 .../function/CollationKeyFunction.java          |   2 +-
 .../org/apache/phoenix/log/QueryLoggerUtil.java |   2 +-
 .../phoenix/mapreduce/CsvBulkLoadTool.java      |   2 +-
 .../mapreduce/MultiHfileOutputFormat.java       |   2 +-
 .../mapreduce/index/IndexScrutinyTool.java      |   2 +-
 .../phoenix/mapreduce/index/IndexTool.java      |   2 +-
 .../util/PhoenixConfigurationUtil.java          |   2 +-
 .../GlobalMetricRegistriesAdapter.java          |   2 +-
 .../java/org/apache/phoenix/util/DateUtil.java  |   2 +-
 .../org/apache/phoenix/util/PhoenixRuntime.java |   2 +-
 .../java/org/apache/phoenix/util/QueryUtil.java |   2 +-
 .../org/apache/phoenix/util/StringUtil.java     |  10 +-
 .../function/CollationKeyFunctionTest.java      |   2 +-
 .../index/covered/CoveredColumnIndexCodec.java  |   4 +-
 .../apache/phoenix/query/KeyRangeClipTest.java  |   2 +-
 .../apache/phoenix/util/PhoenixRuntimeTest.java |   2 +-
 .../org/apache/hadoop/hive/ql/QTestUtil.java    |   2 +-
 .../phoenix/hive/query/PhoenixQueryBuilder.java |   2 +-
 .../hive/query/PhoenixQueryBuilderTest.java     |   2 +-
 .../phoenix/pherf/configuration/Scenario.java   |   4 +-
 .../phoenix/pherf/rules/RulesApplier.java       |   4 +-
 .../apache/phoenix/pig/PhoenixHBaseLoader.java  |   2 +-
 phoenix-server/pom.xml                          | 289 +++++++++++++++----
 pom.xml                                         |   9 +-
 33 files changed, 286 insertions(+), 95 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/phoenix/blob/ba1fd712/phoenix-client/pom.xml
----------------------------------------------------------------------
diff --git a/phoenix-client/pom.xml b/phoenix-client/pom.xml
index 65c2298..2d50d2c 100644
--- a/phoenix-client/pom.xml
+++ b/phoenix-client/pom.xml
@@ -162,6 +162,13 @@
                   <shadedPattern>${shaded.package}.com.jamesmurty</shadedPattern>
                 </relocation>
                 <relocation>
+                  <pattern>com.google</pattern>
+                  <shadedPattern>${shaded.package}.com.google</shadedPattern>
+                  <excludes>
+                    <exclude>com.google.protobuf.**</exclude>
+                  </excludes>
+                </relocation>
+                <relocation>
                   <pattern>com.jcraft</pattern>
                   <shadedPattern>${shaded.package}.com.jcraft</shadedPattern>
                 </relocation>

http://git-wip-us.apache.org/repos/asf/phoenix/blob/ba1fd712/phoenix-core/pom.xml
----------------------------------------------------------------------
diff --git a/phoenix-core/pom.xml b/phoenix-core/pom.xml
index 4065564..80e4a89 100644
--- a/phoenix-core/pom.xml
+++ b/phoenix-core/pom.xml
@@ -337,6 +337,10 @@
       <artifactId>commons-csv</artifactId>
     </dependency>
     <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-lang3</artifactId>
+    </dependency>
+    <dependency>
       <groupId>com.google.code.findbugs</groupId>
       <artifactId>jsr305</artifactId>
     </dependency>

http://git-wip-us.apache.org/repos/asf/phoenix/blob/ba1fd712/phoenix-core/src/it/java/org/apache/phoenix/end2end/AlterTableWithViewsIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/AlterTableWithViewsIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/AlterTableWithViewsIT.java
index e97a40d..68b972a 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/AlterTableWithViewsIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/AlterTableWithViewsIT.java
@@ -37,7 +37,7 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
 
-import org.apache.commons.lang.ArrayUtils;
+import org.apache.commons.lang3.ArrayUtils;
 import org.apache.hadoop.hbase.client.HTable;
 import org.apache.hadoop.hbase.client.Result;
 import org.apache.hadoop.hbase.client.ResultScanner;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/ba1fd712/phoenix-core/src/it/java/org/apache/phoenix/end2end/DateTimeIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/DateTimeIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/DateTimeIT.java
index cc7c7a7..eecc540 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/DateTimeIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/DateTimeIT.java
@@ -56,7 +56,7 @@ import java.util.GregorianCalendar;
 import java.util.Properties;
 import java.util.TimeZone;
 
-import org.apache.commons.lang.time.FastDateFormat;
+import org.apache.commons.lang3.time.FastDateFormat;
 import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 import org.apache.hadoop.hbase.util.Bytes;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/ba1fd712/phoenix-core/src/it/java/org/apache/phoenix/end2end/PartialScannerResultsDisabledIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/PartialScannerResultsDisabledIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/PartialScannerResultsDisabledIT.java
index 59471dd..671419e 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/PartialScannerResultsDisabledIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/PartialScannerResultsDisabledIT.java
@@ -25,7 +25,7 @@ import java.util.Random;
 import java.util.UUID;
 import java.util.concurrent.atomic.AtomicInteger;
 
-import org.apache.commons.lang.RandomStringUtils;
+import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.hadoop.hbase.HConstants;
 import org.apache.phoenix.util.IndexScrutiny;
 import org.apache.phoenix.util.SchemaUtil;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/ba1fd712/phoenix-core/src/it/java/org/apache/phoenix/end2end/SortOrderIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/SortOrderIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/SortOrderIT.java
index 3f749c1..7738b1a 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/SortOrderIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/SortOrderIT.java
@@ -37,7 +37,7 @@ import java.util.GregorianCalendar;
 import java.util.List;
 import java.util.Properties;
 
-import org.apache.commons.lang.ArrayUtils;
+import org.apache.commons.lang3.ArrayUtils;
 import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.types.PDataType;
 import org.apache.phoenix.schema.types.PDecimal;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/ba1fd712/phoenix-core/src/it/java/org/apache/phoenix/end2end/UserDefinedFunctionsIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/UserDefinedFunctionsIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/UserDefinedFunctionsIT.java
index ebb2462..93834ea 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/UserDefinedFunctionsIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/UserDefinedFunctionsIT.java
@@ -50,7 +50,7 @@ import java.util.jar.Manifest;
 import javax.tools.JavaCompiler;
 import javax.tools.ToolProvider;
 
-import org.apache.commons.lang.exception.ExceptionUtils;
+import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.FileUtil;
 import org.apache.hadoop.fs.Path;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/ba1fd712/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexMaintenanceIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexMaintenanceIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexMaintenanceIT.java
index 9ff5a35..0970a23 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexMaintenanceIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/IndexMaintenanceIT.java
@@ -33,7 +33,7 @@ import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.Properties;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.phoenix.end2end.ParallelStatsDisabledIT;
 import org.apache.phoenix.query.QueryConstants;
 import org.apache.phoenix.util.DateUtil;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/ba1fd712/phoenix-core/src/it/java/org/apache/phoenix/execute/UpsertSelectOverlappingBatchesIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/execute/UpsertSelectOverlappingBatchesIT.java b/phoenix-core/src/it/java/org/apache/phoenix/execute/UpsertSelectOverlappingBatchesIT.java
index 0759caa..d18a090 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/execute/UpsertSelectOverlappingBatchesIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/execute/UpsertSelectOverlappingBatchesIT.java
@@ -35,7 +35,7 @@ import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 
-import org.apache.commons.lang.exception.ExceptionUtils;
+import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.apache.hadoop.hbase.HBaseIOException;
 import org.apache.hadoop.hbase.HBaseTestingUtility;
 import org.apache.hadoop.hbase.HConstants;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/ba1fd712/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CollationKeyFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CollationKeyFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CollationKeyFunction.java
index 9d48feb..570e30d 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CollationKeyFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CollationKeyFunction.java
@@ -24,7 +24,7 @@ import java.text.Collator;
 import java.util.List;
 import java.util.Locale;
 
-import org.apache.commons.lang.BooleanUtils;
+import org.apache.commons.lang3.BooleanUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/ba1fd712/phoenix-core/src/main/java/org/apache/phoenix/log/QueryLoggerUtil.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/log/QueryLoggerUtil.java b/phoenix-core/src/main/java/org/apache/phoenix/log/QueryLoggerUtil.java
index 21917ed..2645e5c 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/log/QueryLoggerUtil.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/log/QueryLoggerUtil.java
@@ -21,7 +21,7 @@ import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.util.List;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.phoenix.query.ConnectionQueryServices;
 import org.apache.phoenix.schema.PName;
 

http://git-wip-us.apache.org/repos/asf/phoenix/blob/ba1fd712/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/CsvBulkLoadTool.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/CsvBulkLoadTool.java b/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/CsvBulkLoadTool.java
index 14b8c34..8daf5d3 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/CsvBulkLoadTool.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/CsvBulkLoadTool.java
@@ -23,7 +23,7 @@ import java.util.List;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
-import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.lang3.StringEscapeUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.mapreduce.Job;
 import org.apache.hadoop.util.ToolRunner;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/ba1fd712/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/MultiHfileOutputFormat.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/MultiHfileOutputFormat.java b/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/MultiHfileOutputFormat.java
index 945f3ac..1103f3e 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/MultiHfileOutputFormat.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/MultiHfileOutputFormat.java
@@ -33,7 +33,7 @@ import java.util.TreeMap;
 import java.util.TreeSet;
 import java.util.UUID;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/ba1fd712/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/index/IndexScrutinyTool.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/index/IndexScrutinyTool.java b/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/index/IndexScrutinyTool.java
index 124ee75..0299d6f 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/index/IndexScrutinyTool.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/index/IndexScrutinyTool.java
@@ -31,7 +31,7 @@ import org.apache.commons.cli.HelpFormatter;
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
-import org.apache.commons.lang.exception.ExceptionUtils;
+import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.conf.Configured;
 import org.apache.hadoop.fs.FileSystem;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/ba1fd712/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/index/IndexTool.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/index/IndexTool.java b/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/index/IndexTool.java
index 27210c1..91ce671 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/index/IndexTool.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/index/IndexTool.java
@@ -37,7 +37,7 @@ import org.apache.commons.cli.HelpFormatter;
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
-import org.apache.commons.lang.exception.ExceptionUtils;
+import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.conf.Configured;
 import org.apache.hadoop.fs.FileSystem;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/ba1fd712/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/util/PhoenixConfigurationUtil.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/util/PhoenixConfigurationUtil.java b/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/util/PhoenixConfigurationUtil.java
index 3b63f66..909c85c 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/util/PhoenixConfigurationUtil.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/util/PhoenixConfigurationUtil.java
@@ -17,7 +17,7 @@
  */
 package org.apache.phoenix.mapreduce.util;
 
-import static org.apache.commons.lang.StringUtils.isNotEmpty;
+import static org.apache.commons.lang3.StringUtils.isNotEmpty;
 import static org.apache.phoenix.query.QueryServices.USE_STATS_FOR_PARALLELIZATION;
 import static org.apache.phoenix.query.QueryServicesOptions.DEFAULT_USE_STATS_FOR_PARALLELIZATION;
 

http://git-wip-us.apache.org/repos/asf/phoenix/blob/ba1fd712/phoenix-core/src/main/java/org/apache/phoenix/monitoring/GlobalMetricRegistriesAdapter.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/monitoring/GlobalMetricRegistriesAdapter.java b/phoenix-core/src/main/java/org/apache/phoenix/monitoring/GlobalMetricRegistriesAdapter.java
index 381a757..19d68cc 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/monitoring/GlobalMetricRegistriesAdapter.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/monitoring/GlobalMetricRegistriesAdapter.java
@@ -20,7 +20,7 @@ package org.apache.phoenix.monitoring;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Map.Entry;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hbase.metrics.Counter;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/ba1fd712/phoenix-core/src/main/java/org/apache/phoenix/util/DateUtil.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/util/DateUtil.java b/phoenix-core/src/main/java/org/apache/phoenix/util/DateUtil.java
index f67f152..138c85b 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/util/DateUtil.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/util/DateUtil.java
@@ -31,7 +31,7 @@ import java.text.SimpleDateFormat;
 import java.util.List;
 import java.util.TimeZone;
 
-import org.apache.commons.lang.time.FastDateFormat;
+import org.apache.commons.lang3.time.FastDateFormat;
 import org.apache.phoenix.schema.IllegalDataException;
 import org.apache.phoenix.schema.TypeMismatchException;
 import org.apache.phoenix.schema.types.PDataType;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/ba1fd712/phoenix-core/src/main/java/org/apache/phoenix/util/PhoenixRuntime.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/util/PhoenixRuntime.java b/phoenix-core/src/main/java/org/apache/phoenix/util/PhoenixRuntime.java
index 8553047..85883ec 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/util/PhoenixRuntime.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/util/PhoenixRuntime.java
@@ -50,7 +50,7 @@ import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
 import org.apache.commons.cli.PosixParser;
-import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.lang3.StringEscapeUtils;
 import org.apache.hadoop.hbase.Cell;
 import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.client.Mutation;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/ba1fd712/phoenix-core/src/main/java/org/apache/phoenix/util/QueryUtil.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/util/QueryUtil.java b/phoenix-core/src/main/java/org/apache/phoenix/util/QueryUtil.java
index 94cbfea..6499bd6 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/util/QueryUtil.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/util/QueryUtil.java
@@ -30,7 +30,7 @@ import java.util.Properties;
 
 import javax.annotation.Nullable;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.conf.Configuration;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/ba1fd712/phoenix-core/src/main/java/org/apache/phoenix/util/StringUtil.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/util/StringUtil.java b/phoenix-core/src/main/java/org/apache/phoenix/util/StringUtil.java
index 4d3a36f..e32cf9a 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/util/StringUtil.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/util/StringUtil.java
@@ -19,7 +19,6 @@ package org.apache.phoenix.util;
 
 import java.util.Arrays;
 
-import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.phoenix.exception.UndecodableByteException;
 import org.apache.phoenix.schema.SortOrder;
@@ -384,7 +383,14 @@ public class StringUtil {
     }
 
     public static String escapeStringConstant(String pattern) {
-        return StringEscapeUtils.escapeSql(pattern); // Need to escape double quotes
+        // commons-lang3 dropped StringEscapeUtils.escapeSql because it was
+        // extremely naive in its implementation. Copying that implementation
+        // here as a stop-gap.
+        // https://stackoverflow.com/questions/32096614/migrating-stringescapeutils-escapesql-from-commons-lang
+        if (pattern == null) {
+            return null;
+        }
+        return org.apache.commons.lang3.StringUtils.replace(pattern, "'", "''");
     }   
     
     public static String escapeBackslash(String input) {

http://git-wip-us.apache.org/repos/asf/phoenix/blob/ba1fd712/phoenix-core/src/test/java/org/apache/phoenix/expression/function/CollationKeyFunctionTest.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/test/java/org/apache/phoenix/expression/function/CollationKeyFunctionTest.java b/phoenix-core/src/test/java/org/apache/phoenix/expression/function/CollationKeyFunctionTest.java
index 93154e3..e4f9161 100644
--- a/phoenix-core/src/test/java/org/apache/phoenix/expression/function/CollationKeyFunctionTest.java
+++ b/phoenix-core/src/test/java/org/apache/phoenix/expression/function/CollationKeyFunctionTest.java
@@ -27,7 +27,7 @@ import java.util.Comparator;
 import java.util.List;
 
 import org.apache.commons.codec.binary.Hex;
-import org.apache.commons.lang.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 import org.apache.phoenix.expression.Expression;
 import org.apache.phoenix.expression.LiteralExpression;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/ba1fd712/phoenix-core/src/test/java/org/apache/phoenix/hbase/index/covered/CoveredColumnIndexCodec.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/test/java/org/apache/phoenix/hbase/index/covered/CoveredColumnIndexCodec.java b/phoenix-core/src/test/java/org/apache/phoenix/hbase/index/covered/CoveredColumnIndexCodec.java
index 1c79c4d..91ba9c0 100644
--- a/phoenix-core/src/test/java/org/apache/phoenix/hbase/index/covered/CoveredColumnIndexCodec.java
+++ b/phoenix-core/src/test/java/org/apache/phoenix/hbase/index/covered/CoveredColumnIndexCodec.java
@@ -15,7 +15,7 @@ import java.util.Arrays;
 import java.util.List;
 import java.util.Map.Entry;
 
-import org.apache.commons.lang.ArrayUtils;
+import org.apache.commons.lang3.ArrayUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.Cell;
 import org.apache.hadoop.hbase.CellUtil;
@@ -373,4 +373,4 @@ public class CoveredColumnIndexCodec extends BaseIndexCodec {
         // simple check for the moment.
         return groups.size() > 0;
     }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/phoenix/blob/ba1fd712/phoenix-core/src/test/java/org/apache/phoenix/query/KeyRangeClipTest.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/test/java/org/apache/phoenix/query/KeyRangeClipTest.java b/phoenix-core/src/test/java/org/apache/phoenix/query/KeyRangeClipTest.java
index a3da784..9b028a0 100644
--- a/phoenix-core/src/test/java/org/apache/phoenix/query/KeyRangeClipTest.java
+++ b/phoenix-core/src/test/java/org/apache/phoenix/query/KeyRangeClipTest.java
@@ -29,7 +29,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.hbase.Cell;
 import org.apache.hadoop.hbase.CellUtil;
 import org.apache.hadoop.hbase.util.Bytes;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/ba1fd712/phoenix-core/src/test/java/org/apache/phoenix/util/PhoenixRuntimeTest.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/test/java/org/apache/phoenix/util/PhoenixRuntimeTest.java b/phoenix-core/src/test/java/org/apache/phoenix/util/PhoenixRuntimeTest.java
index 7b81c8d..283da03 100644
--- a/phoenix-core/src/test/java/org/apache/phoenix/util/PhoenixRuntimeTest.java
+++ b/phoenix-core/src/test/java/org/apache/phoenix/util/PhoenixRuntimeTest.java
@@ -38,7 +38,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Properties;
 
-import org.apache.commons.lang.exception.ExceptionUtils;
+import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hbase.util.Pair;
 import org.apache.phoenix.compile.QueryPlan;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/ba1fd712/phoenix-hive/src/it/java/org/apache/hadoop/hive/ql/QTestUtil.java
----------------------------------------------------------------------
diff --git a/phoenix-hive/src/it/java/org/apache/hadoop/hive/ql/QTestUtil.java b/phoenix-hive/src/it/java/org/apache/hadoop/hive/ql/QTestUtil.java
index 2341804..9721162 100644
--- a/phoenix-hive/src/it/java/org/apache/hadoop/hive/ql/QTestUtil.java
+++ b/phoenix-hive/src/it/java/org/apache/hadoop/hive/ql/QTestUtil.java
@@ -74,7 +74,7 @@ import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.io.output.ByteArrayOutputStream;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.hadoop.fs.CommonConfigurationKeysPublic;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/ba1fd712/phoenix-hive/src/main/java/org/apache/phoenix/hive/query/PhoenixQueryBuilder.java
----------------------------------------------------------------------
diff --git a/phoenix-hive/src/main/java/org/apache/phoenix/hive/query/PhoenixQueryBuilder.java b/phoenix-hive/src/main/java/org/apache/phoenix/hive/query/PhoenixQueryBuilder.java
index ab409ad..bb32996 100644
--- a/phoenix-hive/src/main/java/org/apache/phoenix/hive/query/PhoenixQueryBuilder.java
+++ b/phoenix-hive/src/main/java/org/apache/phoenix/hive/query/PhoenixQueryBuilder.java
@@ -33,7 +33,7 @@ import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import javax.annotation.Nullable;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hive.ql.plan.ExprNodeConstantDesc;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/ba1fd712/phoenix-hive/src/test/java/org/apache/phoenix/hive/query/PhoenixQueryBuilderTest.java
----------------------------------------------------------------------
diff --git a/phoenix-hive/src/test/java/org/apache/phoenix/hive/query/PhoenixQueryBuilderTest.java b/phoenix-hive/src/test/java/org/apache/phoenix/hive/query/PhoenixQueryBuilderTest.java
index bc2cbe3..e97b518 100644
--- a/phoenix-hive/src/test/java/org/apache/phoenix/hive/query/PhoenixQueryBuilderTest.java
+++ b/phoenix-hive/src/test/java/org/apache/phoenix/hive/query/PhoenixQueryBuilderTest.java
@@ -18,7 +18,7 @@
 package org.apache.phoenix.hive.query;
 
 import com.google.common.collect.Lists;
-import org.apache.commons.lang.ArrayUtils;
+import org.apache.commons.lang3.ArrayUtils;
 import org.apache.hadoop.hive.ql.plan.ExprNodeColumnDesc;
 import org.apache.hadoop.hive.ql.plan.ExprNodeConstantDesc;
 import org.apache.hadoop.mapred.JobConf;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/ba1fd712/phoenix-pherf/src/main/java/org/apache/phoenix/pherf/configuration/Scenario.java
----------------------------------------------------------------------
diff --git a/phoenix-pherf/src/main/java/org/apache/phoenix/pherf/configuration/Scenario.java b/phoenix-pherf/src/main/java/org/apache/phoenix/pherf/configuration/Scenario.java
index 132207b..c867ae1 100644
--- a/phoenix-pherf/src/main/java/org/apache/phoenix/pherf/configuration/Scenario.java
+++ b/phoenix-pherf/src/main/java/org/apache/phoenix/pherf/configuration/Scenario.java
@@ -27,7 +27,7 @@ import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlElementWrapper;
 import javax.xml.bind.annotation.XmlRootElement;
 
-import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
 import org.apache.phoenix.pherf.util.PhoenixUtil;
 
 @XmlRootElement(namespace = "org.apache.phoenix.pherf.configuration.DataModel")
@@ -227,4 +227,4 @@ public class Scenario {
 	public void setPostScenarioDdls(List<Ddl> postScenarioDdls) {
 		this.postScenarioDdls = postScenarioDdls;
 	}
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/phoenix/blob/ba1fd712/phoenix-pherf/src/main/java/org/apache/phoenix/pherf/rules/RulesApplier.java
----------------------------------------------------------------------
diff --git a/phoenix-pherf/src/main/java/org/apache/phoenix/pherf/rules/RulesApplier.java b/phoenix-pherf/src/main/java/org/apache/phoenix/pherf/rules/RulesApplier.java
index 2afc29a..da0a172 100644
--- a/phoenix-pherf/src/main/java/org/apache/phoenix/pherf/rules/RulesApplier.java
+++ b/phoenix-pherf/src/main/java/org/apache/phoenix/pherf/rules/RulesApplier.java
@@ -20,11 +20,11 @@ package org.apache.phoenix.pherf.rules;
 
 import com.google.common.base.Preconditions;
 
-import org.apache.commons.lang.StringUtils;
 import org.apache.commons.math3.random.RandomDataGenerator;
 import org.apache.phoenix.pherf.PherfConstants;
-import org.apache.commons.lang.RandomStringUtils;
+import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.commons.lang3.RandomUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.phoenix.pherf.configuration.*;
 import org.joda.time.DateTime;
 import org.joda.time.DateTimeZone;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/ba1fd712/phoenix-pig/src/main/java/org/apache/phoenix/pig/PhoenixHBaseLoader.java
----------------------------------------------------------------------
diff --git a/phoenix-pig/src/main/java/org/apache/phoenix/pig/PhoenixHBaseLoader.java b/phoenix-pig/src/main/java/org/apache/phoenix/pig/PhoenixHBaseLoader.java
index 7380b8a..30a92b4 100644
--- a/phoenix-pig/src/main/java/org/apache/phoenix/pig/PhoenixHBaseLoader.java
+++ b/phoenix-pig/src/main/java/org/apache/phoenix/pig/PhoenixHBaseLoader.java
@@ -17,7 +17,7 @@
  */
 package org.apache.phoenix.pig;
 
-import static org.apache.commons.lang.StringUtils.isEmpty;
+import static org.apache.commons.lang3.StringUtils.isEmpty;
 
 import java.io.IOException;
 import java.util.Properties;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/ba1fd712/phoenix-server/pom.xml
----------------------------------------------------------------------
diff --git a/phoenix-server/pom.xml b/phoenix-server/pom.xml
index f75cb0e..48d6aa7 100644
--- a/phoenix-server/pom.xml
+++ b/phoenix-server/pom.xml
@@ -100,7 +100,7 @@
               <goal>shade</goal>
             </goals>
             <configuration>
-              <finalName>phoenix-${project.version}-server</finalName>
+                <finalName>phoenix-${project.version}-server</finalName>
                 <shadedArtifactAttached>false</shadedArtifactAttached>
                 <promoteTransitiveDependencies>true</promoteTransitiveDependencies>
                 <shadeTestJar>false</shadeTestJar>
@@ -109,61 +109,178 @@
                             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>
+                    <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>
+                    <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                 </transformers>
                 <artifactSet>
-                <includes>
-                  <include>org.apache.phoenix:phoenix-core</include>
-                  <include>org.iq80.snappy:snappy</include>
-                  <include>org.antlr:antlr*</include>
-                  <include>joda-time:joda-time</include>
-                  <include>org.apache.tephra:tephra*</include>
-                  <include>com.google.code.gson:gson</include>
-                  <include>org.jruby.joni:joni</include>
-                  <include>org.jruby.jcodings:jcodings</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>
-                </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>
-             <relocations>
-                <relocation>
-                  <pattern>org.joda</pattern>
-                  <shadedPattern>${shaded.package}.org.joda</shadedPattern>
-                </relocation>
-             </relocations>
+                    <includes>
+                        <include>*:*</include>
+                    </includes>
+                    <!-- Exclude things that would be available in the standard location on the hbase classpath.
+                         This does *not* exclude transitive dependencies for these. To exclude an entire "tree"
+                         of dependencies, we need to mark those as "provided" dependencies below. -->
+                    <excludes>
+                        <exclude>org.apache.zookeeper:zookeeper</exclude>
+                        <exclude>junit:junit</exclude>
+                        <exclude>org.hamcrest:hamcrest-core</exclude>
+                        <exclude>jline:jline</exclude>
+                        <exclude>org.eclipse.jetty:*</exclude>
+                        <exclude>org.apache.phoenix:phoenix-server</exclude>
+                        <exclude>sqlline:sqlline</exclude>
+                        <exclude>log4j:log4j</exclude>
+                        <exclude>org.slf4j:slf4j-api</exclude>
+                        <exclude>org.slf4j:slf4j-log4j</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>
+                <relocations>
+                    <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>
+                        <exclude>org.apache.commons.configuration.**</exclude>
+                        <exclude>org.apache.commons.configuration2.**</exclude>
+                      </excludes>
+                    </relocation>
+                    <relocation>
+                      <pattern>org.apache.htrace</pattern>
+                      <shadedPattern>${shaded.package}.org.apache.htrace</shadedPattern>
+                    </relocation>
+                    <relocation>
+                      <pattern>org.apache.http</pattern>
+                      <shadedPattern>${shaded.package}.org.apache.http</shadedPattern>
+                    </relocation>
+                    <relocation>
+                      <pattern>org.antlr</pattern>
+                      <shadedPattern>${shaded.package}.org.antlr</shadedPattern>
+                    </relocation>
+                    <relocation>
+                      <pattern>org.iq80</pattern>
+                      <shadedPattern>${shaded.package}.org.iq80</shadedPattern>
+                    </relocation>
+                    <relocation>
+                      <pattern>org.jcodings</pattern>
+                      <shadedPattern>${shaded.package}.org.jcodings</shadedPattern>
+                    </relocation>
+                    <relocation>
+                      <pattern>org.joda</pattern>
+                      <shadedPattern>${shaded.package}.org.joda</shadedPattern>
+                    </relocation>
+                    <!-- Tephra and dependencies -->
+                    <relocation>
+                      <pattern>co.cask.tephra</pattern>
+                      <shadedPattern>${shaded.package}.co.cask.tephra</shadedPattern>
+                    </relocation>
+                    <relocation>
+                      <pattern>org.apache.tephra</pattern>
+                      <shadedPattern>${shaded.package}.org.apache.tephra</shadedPattern>
+                    </relocation>
+                    <relocation>
+                      <pattern>org.apache.twill</pattern>
+                      <shadedPattern>${shaded.package}.org.apache.twill</shadedPattern>
+                    </relocation>
+                    <relocation>
+                      <pattern>org.apache.thrift</pattern>
+                      <shadedPattern>${shaded.package}.org.apache.thrift</shadedPattern>
+                    </relocation>
+                    <relocation>
+                      <!-- This would shade protobuf, but we don't package it as hbase provides it
+                           for all CPEPs. Similarly, we need to exclude the package so that
+                           Phoenix looks for it in the "standard" package. -->
+                      <pattern>com.google</pattern>
+                      <shadedPattern>${shaded.package}.com.google</shadedPattern>
+                      <excludes>
+                        <exclude>com.google.protobuf.**</exclude>
+                      </excludes>
+                    </relocation>
+                    <relocation>
+                      <pattern>com.codahale.metrics</pattern>
+                      <shadedPattern>${shaded.package}.com.codahale.metrics</shadedPattern>
+                    </relocation>
+                    <relocation>
+                      <pattern>it.unimi.dsi.fastutil</pattern>
+                      <shadedPattern>${shaded.package}.it.unimi.dsi.fastutil</shadedPattern>
+                    </relocation>
+                    <relocation>
+                      <pattern>com.ibm.icu</pattern>
+                      <shadedPattern>${shaded.package}.com.ibm.icu</shadedPattern>
+                    </relocation>
+                    <relocation>
+                      <pattern>com.force</pattern>
+                      <shadedPattern>${shaded.package}.com.force</shadedPattern>
+                    </relocation>
+                    <relocation>
+                      <pattern>com.clearspring</pattern>
+                      <shadedPattern>${shaded.package}.com.clearspring</shadedPattern>
+                    </relocation>
+                    <relocation>
+                      <pattern>org.joni</pattern>
+                      <shadedPattern>${shaded.package}.org.joni</shadedPattern>
+                    </relocation>
+                    <relocation>
+                      <pattern>org.jcodings</pattern>
+                      <shadedPattern>${shaded.package}.org.jcodings</shadedPattern>
+                    </relocation>
+                    <relocation>
+                      <pattern>org.iq80.snappy</pattern>
+                      <shadedPattern>${shaded.package}.org.iq80.snappy</shadedPattern>
+                    </relocation>
+                    <relocation>
+                      <pattern>edu.umd.cs.findbugs.annotations</pattern>
+                      <shadedPattern>${shaded.package}.edu.umd.cs.findbugs.annotations</shadedPattern>
+                    </relocation>
+                    <relocation>
+                      <pattern>net.jcip.annotations</pattern>
+                      <shadedPattern>${shaded.package}.net.jcip.annotations</shadedPattern>
+                    </relocation>
+                    <relocation>
+                      <pattern>org.codehaus.jackson</pattern>
+                      <shadedPattern>${shaded.package}.org.codehaus.jackson</shadedPattern>
+                    </relocation>
+                    <relocation>
+                      <pattern>javax.annotation</pattern>
+                      <shadedPattern>${shaded.package}.javax.annotation</shadedPattern>
+                    </relocation>
+                    <relocation>
+                      <pattern>com.lmax.disruptor</pattern>
+                      <shadedPattern>${shaded.package}.com.lmax.disruptor</shadedPattern>
+                    </relocation>
+                    <relocation>
+                      <pattern>javax.servlet</pattern>
+                      <shadedPattern>${shaded.package}.javax.servlet</shadedPattern>
+                    </relocation>
+                    <relocation>
+                      <pattern>org.aopalliance</pattern>
+                      <shadedPattern>${shaded.package}.org.aopalliance</shadedPattern>
+                    </relocation>
+                    <relocation>
+                      <pattern>org.objectweb.asm</pattern>
+                      <shadedPattern>${shaded.package}.org.objectweb.asm</shadedPattern>
+                    </relocation>
+                </relocations>
             </configuration>
           </execution>
         </executions>
@@ -177,16 +294,68 @@
       <groupId>org.apache.phoenix</groupId>
       <artifactId>phoenix-core</artifactId>
     </dependency>
+    <!-- hbase's classpath will provide these, mark them as provided to prevent
+         them, and their transitive dependencies, from being included in the
+         shaded jar. -->
     <dependency>
-      <groupId>org.apache.hadoop</groupId>
-      <artifactId>hadoop-auth</artifactId>
-      <version>2.7.1</version>
-      <scope>test</scope>
+      <groupId>org.apache.hbase</groupId>
+      <artifactId>hbase-annotations</artifactId>
+      <scope>provided</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.hbase</groupId>
-      <artifactId>hbase-testing-util</artifactId>
-      <scope>test</scope>
+      <artifactId>hbase-mapreduce</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.hbase</groupId>
+      <artifactId>hbase-common</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.hbase</groupId>
+      <artifactId>hbase-client</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.hbase</groupId>
+      <artifactId>hbase-protocol</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.hbase</groupId>
+      <artifactId>hbase-server</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.hbase</groupId>
+      <artifactId>hbase-hadoop-compat</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.hbase</groupId>
+      <artifactId>hbase-hadoop2-compat</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.hadoop</groupId>
+      <artifactId>hadoop-common</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.hadoop</groupId>
+      <artifactId>hadoop-annotations</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.hadoop</groupId>
+      <artifactId>hadoop-mapreduce-client-core</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.google.protobuf</groupId>
+      <artifactId>protobuf-java</artifactId>
+      <scope>provided</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.tephra</groupId>

http://git-wip-us.apache.org/repos/asf/phoenix/blob/ba1fd712/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 45477a8..2a4c4b3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -80,7 +80,7 @@
     <slf4j.version>1.6.4</slf4j.version>
     <protobuf-java.version>2.5.0</protobuf-java.version>
     <commons-io.version>2.1</commons-io.version>
-    <commons-lang.version>2.5</commons-lang.version>
+    <commons-lang.version>3.8</commons-lang.version>
     <commons-logging.version>1.2</commons-logging.version>
     <commons-csv.version>1.0</commons-csv.version>
     <sqlline.version>1.2.0</sqlline.version>
@@ -360,7 +360,7 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-shade-plugin</artifactId>
-          <version>2.4.3</version>
+          <version>3.1.1</version>
         </plugin>
         <plugin>
           <!-- Allows us to get the apache-ds bundle artifacts -->
@@ -954,6 +954,11 @@
         <version>${commons-csv.version}</version>
       </dependency>
       <dependency>
+        <groupId>org.apache.commons</groupId>
+        <artifactId>commons-lang3</artifactId>
+        <version>${commons-lang.version}</version>
+      </dependency>
+      <dependency>
         <groupId>joda-time</groupId>
         <artifactId>joda-time</artifactId>
         <version>${jodatime.version}</version>