You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beam.apache.org by lc...@apache.org on 2017/11/17 22:30:16 UTC

[45/50] [abbrv] beam git commit: Add shadow configuration for sdks/java/core updating all other projects to use it. Add shadowTest configuration for sdks/java/core updating all other projects to use it.

Add shadow configuration for sdks/java/core updating all other projects to use it.
Add shadowTest configuration for sdks/java/core updating all other projects to use it.


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

Branch: refs/heads/master
Commit: e4951a240a585c4c20def8dcf810ce1be2118bbb
Parents: 45c4db6
Author: Luke Cwik <lc...@google.com>
Authored: Mon Nov 6 22:53:03 2017 -0800
Committer: Luke Cwik <lc...@google.com>
Committed: Fri Nov 17 14:27:16 2017 -0800

----------------------------------------------------------------------
 build_rules.gradle                              | 31 +++++++++++++++-
 examples/java/build.gradle                      |  2 +-
 examples/java8/build.gradle                     |  2 +-
 runners/apex/build.gradle                       |  5 ++-
 runners/core-construction-java/build.gradle     |  2 +-
 runners/core-java/build.gradle                  | 13 ++-----
 runners/direct-java/build.gradle                |  5 ++-
 runners/flink/build.gradle                      |  5 ++-
 runners/gearpump/build.gradle                   |  4 +--
 runners/google-cloud-dataflow-java/build.gradle |  5 ++-
 runners/spark/build.gradle                      |  5 ++-
 sdks/java/core/build.gradle                     | 38 ++++++++++++++++++++
 .../google-cloud-platform-core/build.gradle     | 13 ++-----
 sdks/java/extensions/jackson/build.gradle       |  2 +-
 sdks/java/extensions/join-library/build.gradle  |  2 +-
 sdks/java/extensions/protobuf/build.gradle      |  4 +--
 sdks/java/extensions/sorter/build.gradle        |  2 +-
 sdks/java/extensions/sql/build.gradle           |  7 ++--
 sdks/java/harness/build.gradle                  |  7 ++--
 sdks/java/io/amqp/build.gradle                  |  2 +-
 sdks/java/io/cassandra/build.gradle             |  2 +-
 sdks/java/io/common/build.gradle                |  2 +-
 .../elasticsearch-tests-2/build.gradle          |  2 +-
 .../elasticsearch-tests-5/build.gradle          |  2 +-
 .../elasticsearch-tests-common/build.gradle     |  2 +-
 sdks/java/io/elasticsearch/build.gradle         |  2 +-
 sdks/java/io/google-cloud-platform/build.gradle |  5 ++-
 sdks/java/io/hadoop-common/build.gradle         |  2 +-
 sdks/java/io/hadoop-file-system/build.gradle    | 13 ++-----
 sdks/java/io/hadoop/input-format/build.gradle   | 13 ++-----
 sdks/java/io/hadoop/jdk1.8-tests/build.gradle   |  2 +-
 sdks/java/io/hbase/build.gradle                 | 13 ++-----
 sdks/java/io/hcatalog/build.gradle              |  2 +-
 sdks/java/io/jdbc/build.gradle                  |  2 +-
 sdks/java/io/jms/build.gradle                   |  2 +-
 sdks/java/io/kafka/build.gradle                 | 13 ++-----
 sdks/java/io/kinesis/build.gradle               |  2 +-
 sdks/java/io/mongodb/build.gradle               |  2 +-
 sdks/java/io/mqtt/build.gradle                  |  2 +-
 sdks/java/io/redis/build.gradle                 |  2 +-
 sdks/java/io/solr/build.gradle                  |  2 +-
 sdks/java/io/tika/build.gradle                  | 13 ++-----
 sdks/java/io/xml/build.gradle                   | 13 ++-----
 sdks/java/java8tests/build.gradle               |  2 +-
 sdks/java/maven-archetypes/starter/build.gradle |  2 +-
 sdks/java/nexmark/build.gradle                  |  2 +-
 46 files changed, 132 insertions(+), 145 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/build_rules.gradle
----------------------------------------------------------------------
diff --git a/build_rules.gradle b/build_rules.gradle
index d89c0ed..bcde635 100644
--- a/build_rules.gradle
+++ b/build_rules.gradle
@@ -57,6 +57,7 @@ apply plugin: "cz.malohlava.visteg"
 class JavaNatureConfiguration {
   double javaVersion = 1.7
   boolean enableFindbugs = true
+  boolean enableShadow = true
 }
 
 /** Takes a map of parameters. See JavaNatureConfiguration for the set of parameters allowed. */
@@ -73,7 +74,6 @@ ext.applyJavaNature = {
     options.encoding = "UTF-8"
   }
 
-  // Skip test failures to enumerate all that is failing
   test {
     // Configure the gradle include defaults to be equivalent to the maven-surefire-plugin
     // http://maven.apache.org/components/surefire/maven-surefire-plugin/test-mojo.html
@@ -131,6 +131,35 @@ ext.applyJavaNature = {
     }
   }
 
+  if (configuration.enableShadow) {
+    apply plugin: 'com.github.johnrengelman.shadow'
+
+    // Shade guava in all our dependencies.
+    shadowJar {
+      classifier = "shaded"
+      mergeServiceFiles()
+      dependencies {
+        exclude(".*")
+        include(dependency(library.java.guava))
+      }
+      relocate("com.google.common", "org.apache.beam." + project.name + ".repackaged.com.google.common") {
+        // com.google.common is too generic, need to exclude guava-testlib
+        exclude "com.google.common.*.testing.*"
+      }
+    }
+
+    // Create a new configuration 'shadowTest' like 'shadow' for the test scope
+    configurations {
+      shadowTest {
+        description = "shaded test runtime"
+        extendsFrom testRuntime
+      }
+    }
+    // TODO: Figure out how to create ShadowJar task for testShadowJar here
+    // that is extendable within each sub-project with any additional includes.
+    // Optimally, a single configuration would apply to both.
+  }
+
   // Ban these dependencies from all configurations
   configurations.all {
     // guava-jdk5 brings in classes which conflict with guava

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/examples/java/build.gradle
----------------------------------------------------------------------
diff --git a/examples/java/build.gradle b/examples/java/build.gradle
index c806bf6..97c609f 100644
--- a/examples/java/build.gradle
+++ b/examples/java/build.gradle
@@ -31,7 +31,7 @@ description = "Apache Beam :: Examples :: Java"
 evaluationDependsOn(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-io-parent:beam-sdks-java-io-google-cloud-platform")
 
 dependencies {
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-extensions-parent:beam-sdks-java-extensions-google-cloud-platform-core")
   compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-io-parent:beam-sdks-java-io-google-cloud-platform")
   compile library.java.google_api_client

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/examples/java8/build.gradle
----------------------------------------------------------------------
diff --git a/examples/java8/build.gradle b/examples/java8/build.gradle
index eb0d52d..4970721 100644
--- a/examples/java8/build.gradle
+++ b/examples/java8/build.gradle
@@ -22,7 +22,7 @@ applyJavaNature(javaVersion: 1.8)
 description = "Apache Beam :: Examples :: Java 8"
 
 dependencies {
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-extensions-parent:beam-sdks-java-extensions-google-cloud-platform-core")
   compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-io-parent:beam-sdks-java-io-google-cloud-platform")
   compile project(":beam-examples-parent:beam-examples-java")

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/runners/apex/build.gradle
----------------------------------------------------------------------
diff --git a/runners/apex/build.gradle b/runners/apex/build.gradle
index a2e8b36..d07ddfa 100644
--- a/runners/apex/build.gradle
+++ b/runners/apex/build.gradle
@@ -28,13 +28,12 @@ description = "Apache Beam :: Runners :: Apex"
  * TODO: Swap to generating test artifacts which we can then rely on instead of 
  * the test outputs directly.
  */
-evaluationDependsOn(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
 evaluationDependsOn(":beam-model-parent:beam-model-fn-execution")
 evaluationDependsOn(":beam-runners-parent:beam-runners-core-java")
 
 dependencies {
   compile project(":beam-model-parent:beam-model-pipeline")
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile project(":beam-runners-parent:beam-runners-core-construction-java")
   compile project(":beam-runners-parent:beam-runners-core-java")
   compile library.java.apex_common
@@ -43,7 +42,7 @@ dependencies {
   compile library.java.commons_lang3
   compile library.java.findbugs_jsr305
   runtime library.java.apex_engine
-  testCompile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core").sourceSets.test.output
+  testCompile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadowTest")
   testCompile project(":beam-model-parent:beam-model-fn-execution").sourceSets.test.output
   testCompile project(":beam-runners-parent:beam-runners-core-java").sourceSets.test.output
   testCompile library.java.hamcrest_core

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/runners/core-construction-java/build.gradle
----------------------------------------------------------------------
diff --git a/runners/core-construction-java/build.gradle b/runners/core-construction-java/build.gradle
index 891f2fc..597c94e 100644
--- a/runners/core-construction-java/build.gradle
+++ b/runners/core-construction-java/build.gradle
@@ -32,7 +32,7 @@ test {
 dependencies {
   compile project(":beam-model-parent:beam-model-pipeline")
   compile project(":beam-model-parent:beam-model-job-management")
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile library.java.jackson_annotations
   compile library.java.jackson_databind
   compile library.java.jackson_core

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/runners/core-java/build.gradle
----------------------------------------------------------------------
diff --git a/runners/core-java/build.gradle b/runners/core-java/build.gradle
index 7ab450a..362b064 100644
--- a/runners/core-java/build.gradle
+++ b/runners/core-java/build.gradle
@@ -21,15 +21,6 @@ applyJavaNature()
 
 description = "Apache Beam :: Runners :: Core Java"
 
-/*
- * We need to rely on manually specifying these evaluationDependsOn to ensure that
- * the following projects are evaluated before we evaluate this project. This is because
- * we are attempting to reference the "sourceSets.test.output" directly.
- * TODO: Swap to generating test artifacts which we can then rely on instead of
- * the test outputs directly.
- */
-evaluationDependsOn(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
-
 // Exclude tests that need a runner
 test {
   systemProperty "beamUseDummyRunner", "true"
@@ -40,7 +31,7 @@ test {
 
 dependencies {
   compile project(":beam-model-parent:beam-model-pipeline")
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile project(":beam-model-parent:beam-model-fn-execution")
   compile project(":beam-runners-parent:beam-runners-core-construction-java")
   compile library.java.findbugs_jsr305
@@ -49,7 +40,7 @@ dependencies {
   compile library.java.grpc_stub
   compile library.java.joda_time
   compile library.java.slf4j_api
-  testCompile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core").sourceSets.test.output
+  testCompile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadowTest")
   testCompile library.java.hamcrest_core
   testCompile library.java.mockito_core
   testCompile library.java.junit

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/runners/direct-java/build.gradle
----------------------------------------------------------------------
diff --git a/runners/direct-java/build.gradle b/runners/direct-java/build.gradle
index 984fe2d..e0465da 100644
--- a/runners/direct-java/build.gradle
+++ b/runners/direct-java/build.gradle
@@ -28,13 +28,12 @@ description = "Apache Beam :: Runners :: Direct Java"
  * TODO: Swap to generating test artifacts which we can then rely on instead of 
  * the test outputs directly.
  */
-evaluationDependsOn(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
 evaluationDependsOn(":beam-runners-parent:beam-runners-core-java")
 evaluationDependsOn(":beam-model-parent:beam-model-fn-execution")
 
 dependencies {
   compile project(":beam-model-parent:beam-model-pipeline")
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile project(":beam-runners-parent:beam-runners-core-construction-java")
   compile project(":beam-runners-parent:beam-runners-core-java")
   compile library.java.guava
@@ -43,7 +42,7 @@ dependencies {
   compile library.java.slf4j_api
   provided library.java.hamcrest_core
   provided library.java.junit
-  testCompile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core").sourceSets.test.output
+  testCompile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadowTest")
   testCompile project(":beam-runners-parent:beam-runners-core-java").sourceSets.test.output
   testCompile project(":beam-model-parent:beam-model-fn-execution").sourceSets.test.output
   testCompile library.java.guava_testlib

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/runners/flink/build.gradle
----------------------------------------------------------------------
diff --git a/runners/flink/build.gradle b/runners/flink/build.gradle
index 7a318fe..0fba94e 100644
--- a/runners/flink/build.gradle
+++ b/runners/flink/build.gradle
@@ -28,7 +28,6 @@ description = "Apache Beam :: Runners :: Flink"
  * TODO: Swap to generating test artifacts which we can then rely on instead of
  * the test outputs directly.
  */
-evaluationDependsOn(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
 evaluationDependsOn(":beam-model-parent:beam-model-fn-execution")
 evaluationDependsOn(":beam-runners-parent:beam-runners-core-java")
 
@@ -43,7 +42,7 @@ test {
 def flink_version = "1.3.0"
 
 dependencies {
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile project(":beam-runners-parent:beam-runners-core-java")
   compile project(":beam-runners-parent:beam-runners-core-construction-java")
   compile library.java.jackson_annotations
@@ -58,7 +57,7 @@ dependencies {
   compile "org.apache.flink:flink-java:$flink_version"
   compile "org.apache.flink:flink-runtime_2.10:$flink_version"
   compile "org.apache.flink:flink-streaming-java_2.10:$flink_version"
-  testCompile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core").sourceSets.test.output
+  testCompile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadowTest")
   testCompile project(":beam-model-parent:beam-model-fn-execution").sourceSets.test.output
   testCompile project(":beam-runners-parent:beam-runners-core-java").sourceSets.test.output
   testCompile library.java.commons_lang3

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/runners/gearpump/build.gradle
----------------------------------------------------------------------
diff --git a/runners/gearpump/build.gradle b/runners/gearpump/build.gradle
index 9136d97..d6b42c9 100644
--- a/runners/gearpump/build.gradle
+++ b/runners/gearpump/build.gradle
@@ -24,7 +24,7 @@ description = "Apache Beam :: Runners :: Gearpump"
 def gearpump_version = "0.8.4"
 
 dependencies {
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile project(":beam-runners-parent:beam-runners-core-java")
   compile project(":beam-runners-parent:beam-runners-core-construction-java")
   compile "org.apache.gearpump:gearpump-core_2.11:$gearpump_version"
@@ -35,7 +35,7 @@ dependencies {
   compile library.java.findbugs_jsr305
   compileOnly "com.typesafe:config:1.3.0"
   compileOnly "org.scala-lang:scala-library:2.11.8"
-  testCompile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  testCompile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadowTest")
   testCompile library.java.junit
   testCompile library.java.hamcrest_core
   testCompile library.java.jackson_databind

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/runners/google-cloud-dataflow-java/build.gradle
----------------------------------------------------------------------
diff --git a/runners/google-cloud-dataflow-java/build.gradle b/runners/google-cloud-dataflow-java/build.gradle
index 6e7e0f5..ca7a7c2 100644
--- a/runners/google-cloud-dataflow-java/build.gradle
+++ b/runners/google-cloud-dataflow-java/build.gradle
@@ -29,7 +29,6 @@ description = "Apache Beam :: Runners :: Google Cloud Dataflow"
  * the test outputs directly.
  */
 evaluationDependsOn(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-io-parent:beam-sdks-java-io-google-cloud-platform")
-evaluationDependsOn(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
 evaluationDependsOn(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-extensions-parent:beam-sdks-java-extensions-google-cloud-platform-core")
 evaluationDependsOn(":beam-model-parent:beam-model-fn-execution")
 
@@ -49,7 +48,7 @@ test {
 
 dependencies {
   compile project(":beam-model-parent:beam-model-pipeline")
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-extensions-parent:beam-sdks-java-extensions-google-cloud-platform-core")
   compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-io-parent:beam-sdks-java-io-google-cloud-platform")
   compile project(":beam-runners-parent:beam-runners-core-construction-java")
@@ -73,7 +72,7 @@ dependencies {
   testCompile library.java.hamcrest_core
   testCompile library.java.junit
   testCompile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-io-parent:beam-sdks-java-io-google-cloud-platform").sourceSets.test.output
-  testCompile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core").sourceSets.test.output
+  testCompile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadowTest")
   testCompile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-extensions-parent:beam-sdks-java-extensions-google-cloud-platform-core").sourceSets.test.output
   testCompile project(":beam-model-parent:beam-model-fn-execution").sourceSets.test.output
   testCompile library.java.guava_testlib

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/runners/spark/build.gradle
----------------------------------------------------------------------
diff --git a/runners/spark/build.gradle b/runners/spark/build.gradle
index 59eda3b..117a154 100644
--- a/runners/spark/build.gradle
+++ b/runners/spark/build.gradle
@@ -28,7 +28,6 @@ description = "Apache Beam :: Runners :: Spark"
  * TODO: Swap to generating test artifacts which we can then rely on instead of
  * the test outputs directly.
  */
-evaluationDependsOn(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
 evaluationDependsOn(":beam-model-parent:beam-model-fn-execution")
 evaluationDependsOn(":beam-runners-parent:beam-runners-core-java")
 
@@ -51,7 +50,7 @@ test {
 
 dependencies {
   compile project(":beam-model-parent:beam-model-pipeline")
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile project(":beam-runners-parent:beam-runners-core-construction-java")
   compile project(":beam-runners-parent:beam-runners-core-java")
   compile library.java.findbugs_jsr305
@@ -74,7 +73,7 @@ dependencies {
   provided "org.scala-lang:scala-library:2.10.5"
   provided "com.esotericsoftware.kryo:kryo:2.21"
   testCompile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-io-parent:beam-sdks-java-io-kafka")
-  testCompile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core").sourceSets.test.output
+  testCompile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadowTest")
   testCompile project(":beam-model-parent:beam-model-fn-execution").sourceSets.test.output
   testCompile project(":beam-runners-parent:beam-runners-core-java").sourceSets.test.output
   testCompile library.java.avro

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/sdks/java/core/build.gradle
----------------------------------------------------------------------
diff --git a/sdks/java/core/build.gradle b/sdks/java/core/build.gradle
index 3764f18..b6c47e8 100644
--- a/sdks/java/core/build.gradle
+++ b/sdks/java/core/build.gradle
@@ -73,9 +73,47 @@ dependencies {
   testCompile "com.esotericsoftware.kryo:kryo:2.21"
 }
 
+// Shade dependencies.
+shadowJar {
+  dependencies {
+    include(dependency(library.java.protobuf_java))
+    include(dependency(library.java.byte_buddy))
+    include(dependency("org.apache.commons:.*"))
+  }
+  relocate "com.google.thirdparty", "org.apache.beam.sdk.repackaged.com.google.thirdparty"
+  relocate "com.google.protobuf", "org.apache.beam.sdk.repackaged.com.google.protobuf"
+  relocate "net.bytebuddy", "org.apache.beam.sdk.repackaged.net.bytebuddy"
+  relocate "org.apache.commons", "org.apache.beam.sdk.repackaged.org.apache.commons"
+}
+
+// Create a shaded test jar.
+task shadowTestJar(type: com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar) {
+  classifier = "shaded-tests"
+  from sourceSets.test.output
+  configurations = [project.configurations.testRuntime]
+  dependencies {
+    exclude(".*")
+    include(dependency(library.java.guava))
+    include(dependency(library.java.protobuf_java))
+    include(dependency(library.java.byte_buddy))
+    include(dependency("org.apache.commons:.*"))
+  }
+  relocate("com.google.common", "org.apache.beam.sdk.repackaged.com.google.common") {
+    // com.google.common is too generic, need to exclude guava-testlib
+    exclude "com.google.common.*.testing.*"
+  }
+  relocate "com.google.thirdparty", "org.apache.beam.sdk.repackaged.com.google.thirdparty"
+  relocate "com.google.protobuf", "org.apache.beam.sdk.repackaged.com.google.protobuf"
+  relocate "net.bytebuddy", "org.apache.beam.sdk.repackaged.net.bytebuddy"
+  relocate "org.apache.commons", "org.apache.beam.sdk.repackaged.org.apache.commons"
+}
+
 task packageTests(type: Jar) {
   from sourceSets.test.output
   classifier = "tests"
 }
 
 artifacts.archives packageTests
+artifacts {
+  shadowTest shadowTestJar
+}

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/sdks/java/extensions/google-cloud-platform-core/build.gradle
----------------------------------------------------------------------
diff --git a/sdks/java/extensions/google-cloud-platform-core/build.gradle b/sdks/java/extensions/google-cloud-platform-core/build.gradle
index 390a841..ba681db 100644
--- a/sdks/java/extensions/google-cloud-platform-core/build.gradle
+++ b/sdks/java/extensions/google-cloud-platform-core/build.gradle
@@ -21,15 +21,6 @@ applyJavaNature()
 
 description = "Apache Beam :: SDKs :: Java :: Extensions :: Google Cloud Platform Core"
 
-/*
- * We need to rely on manually specifying these evaluationDependsOn to ensure that
- * the following projects are evaluated before we evaluate this project. This is because
- * we are attempting to reference the "sourceSets.test.output" directly.
- * TODO: Swap to generating test artifacts which we can then rely on instead of
- * the test outputs directly.
- */
-evaluationDependsOn(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
-
 // Exclude tests that need a runner
 test {
   systemProperty "beamUseDummyRunner", "true"
@@ -39,7 +30,7 @@ test {
 }
 
 dependencies {
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile library.java.google_http_client_jackson2
   compile library.java.google_auth_library_oauth2_http
   compile library.java.google_api_client
@@ -57,7 +48,7 @@ dependencies {
   compile library.java.jackson_databind
   compileOnly library.java.hamcrest_core
   compileOnly library.java.junit
-  testCompile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core").sourceSets.test.output
+  testCompile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadowTest")
   testCompile library.java.guava_testlib
   testCompile library.java.mockito_core
   testCompile library.java.slf4j_jdk14

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/sdks/java/extensions/jackson/build.gradle
----------------------------------------------------------------------
diff --git a/sdks/java/extensions/jackson/build.gradle b/sdks/java/extensions/jackson/build.gradle
index 5db7b52..bf6a0a8 100644
--- a/sdks/java/extensions/jackson/build.gradle
+++ b/sdks/java/extensions/jackson/build.gradle
@@ -22,7 +22,7 @@ applyJavaNature()
 description = "Apache Beam :: SDKs :: Java :: Extensions :: Jackson"
 
 dependencies {
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile library.java.jackson_databind
   compile library.java.guava
   testCompile project(":beam-runners-parent:beam-runners-direct-java")

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/sdks/java/extensions/join-library/build.gradle
----------------------------------------------------------------------
diff --git a/sdks/java/extensions/join-library/build.gradle b/sdks/java/extensions/join-library/build.gradle
index 57609da..f515aa6 100644
--- a/sdks/java/extensions/join-library/build.gradle
+++ b/sdks/java/extensions/join-library/build.gradle
@@ -22,7 +22,7 @@ applyJavaNature()
 description = "Apache Beam :: SDKs :: Java :: Extensions :: Join library"
 
 dependencies {
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile library.java.guava
   testCompile project(":beam-runners-parent:beam-runners-direct-java")
   testCompile library.java.hamcrest_core

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/sdks/java/extensions/protobuf/build.gradle
----------------------------------------------------------------------
diff --git a/sdks/java/extensions/protobuf/build.gradle b/sdks/java/extensions/protobuf/build.gradle
index 95b5c72..d52abf8 100644
--- a/sdks/java/extensions/protobuf/build.gradle
+++ b/sdks/java/extensions/protobuf/build.gradle
@@ -23,10 +23,10 @@ applyGrpcNature()
 description = "Apache Beam :: SDKs :: Java :: Extensions :: Protobuf"
 
 dependencies {
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile library.java.protobuf_java
   compile library.java.guava
-  testCompile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  testCompile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadowTest")
   testCompile library.java.hamcrest_core
   testCompile library.java.mockito_core
   testCompile library.java.junit

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/sdks/java/extensions/sorter/build.gradle
----------------------------------------------------------------------
diff --git a/sdks/java/extensions/sorter/build.gradle b/sdks/java/extensions/sorter/build.gradle
index 92a7424..e34ca87 100644
--- a/sdks/java/extensions/sorter/build.gradle
+++ b/sdks/java/extensions/sorter/build.gradle
@@ -22,7 +22,7 @@ applyJavaNature()
 description = "Apache Beam :: SDKs :: Java :: Extensions :: Sorter"
 
 dependencies {
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile library.java.guava
   provided library.java.hadoop_mapreduce_client_core
   provided library.java.hadoop_common

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/sdks/java/extensions/sql/build.gradle
----------------------------------------------------------------------
diff --git a/sdks/java/extensions/sql/build.gradle b/sdks/java/extensions/sql/build.gradle
index 6142ab6..fd72892 100644
--- a/sdks/java/extensions/sql/build.gradle
+++ b/sdks/java/extensions/sql/build.gradle
@@ -29,7 +29,7 @@ def calcite_version = "1.13.0"
 def avatica_version = "1.10.0"
 
 dependencies {
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-extensions-parent:beam-sdks-java-extensions-join-library")
   compile "org.apache.calcite:calcite-core:$calcite_version"
   compile "org.apache.calcite:calcite-linq4j:$calcite_version"
@@ -38,9 +38,8 @@ dependencies {
   compile library.java.slf4j_api
   compile library.java.commons_csv
   compile library.java.joda_time
-//  providedCompile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-io-parent:beam-sdks-java-io-kafka")
-  compileOnly project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-io-parent:beam-sdks-java-io-kafka")
-  compileOnly library.java.kafka_clients
+  provided project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-io-parent:beam-sdks-java-io-kafka")
+  provided library.java.kafka_clients
   runtime project(":beam-runners-parent:beam-runners-direct-java")
   testCompile library.java.slf4j_jdk14
   testCompile library.java.junit

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/sdks/java/harness/build.gradle
----------------------------------------------------------------------
diff --git a/sdks/java/harness/build.gradle b/sdks/java/harness/build.gradle
index 1f23dad..6524769 100644
--- a/sdks/java/harness/build.gradle
+++ b/sdks/java/harness/build.gradle
@@ -17,8 +17,7 @@
  */
 
 apply from: project(":").file("build_rules.gradle")
-applyJavaNature(javaVersion: 1.8)
-
+applyJavaNature(javaVersion: 1.8, enableShadow: false /* Disable shadow because of custom configuration below. */)
 apply plugin: "com.github.johnrengelman.shadow"
 
 description = "Apache Beam :: SDKs :: Java :: Harness"
@@ -35,7 +34,7 @@ evaluationDependsOn(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-fn-e
 dependencies {
   compile project(":beam-model-parent:beam-model-pipeline")
   compile project(":beam-model-parent:beam-model-fn-execution")
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-fn-execution")
   compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-extensions-parent:beam-sdks-java-extensions-google-cloud-platform-core")
   compile project(":beam-runners-parent:beam-runners-core-java")
@@ -51,7 +50,7 @@ dependencies {
   compile library.java.joda_time
   compile library.java.slf4j_api
   provided library.java.error_prone_annotations
-  testCompile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  testCompile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadowTest")
   testCompile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-fn-execution").sourceSets.test.output
   testCompile library.java.hamcrest_core
   testCompile library.java.junit

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/sdks/java/io/amqp/build.gradle
----------------------------------------------------------------------
diff --git a/sdks/java/io/amqp/build.gradle b/sdks/java/io/amqp/build.gradle
index 9f6dc3a..07b3889 100644
--- a/sdks/java/io/amqp/build.gradle
+++ b/sdks/java/io/amqp/build.gradle
@@ -22,7 +22,7 @@ applyJavaNature()
 description = "Apache Beam :: SDKs :: Java :: IO :: AMQP"
 
 dependencies {
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile library.java.joda_time
   compile library.java.guava
   compile library.java.findbugs_jsr305

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/sdks/java/io/cassandra/build.gradle
----------------------------------------------------------------------
diff --git a/sdks/java/io/cassandra/build.gradle b/sdks/java/io/cassandra/build.gradle
index 056572a..58efa3c 100644
--- a/sdks/java/io/cassandra/build.gradle
+++ b/sdks/java/io/cassandra/build.gradle
@@ -33,7 +33,7 @@ evaluationDependsOn(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-io-p
 def cassandra_version = "3.2.0"
 
 dependencies {
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile library.java.slf4j_api
   compile library.java.guava
   compile library.java.findbugs_jsr305

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/sdks/java/io/common/build.gradle
----------------------------------------------------------------------
diff --git a/sdks/java/io/common/build.gradle b/sdks/java/io/common/build.gradle
index 8e052ff..6eed365 100644
--- a/sdks/java/io/common/build.gradle
+++ b/sdks/java/io/common/build.gradle
@@ -22,7 +22,7 @@ applyJavaNature()
 description = "Apache Beam :: SDKs :: Java :: IO :: Common"
 
 dependencies {
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile library.java.guava
   testCompile library.java.junit
 }

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/sdks/java/io/elasticsearch-tests/elasticsearch-tests-2/build.gradle
----------------------------------------------------------------------
diff --git a/sdks/java/io/elasticsearch-tests/elasticsearch-tests-2/build.gradle b/sdks/java/io/elasticsearch-tests/elasticsearch-tests-2/build.gradle
index 3d69332..27d228c 100644
--- a/sdks/java/io/elasticsearch-tests/elasticsearch-tests-2/build.gradle
+++ b/sdks/java/io/elasticsearch-tests/elasticsearch-tests-2/build.gradle
@@ -37,7 +37,7 @@ def elastic_search_version = "2.4.1"
 
 dependencies {
   testCompile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-io-parent:beam-sdks-java-io-elasticsearch-tests-parent:beam-sdks-java-io-elasticsearch-tests-common").sourceSets.test.output
-  testCompile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  testCompile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   testCompile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-io-parent:beam-sdks-java-io-elasticsearch")
   testCompile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-io-parent:beam-sdks-java-io-common").sourceSets.test.output
   testCompile project(":beam-runners-parent:beam-runners-direct-java")

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/sdks/java/io/elasticsearch-tests/elasticsearch-tests-5/build.gradle
----------------------------------------------------------------------
diff --git a/sdks/java/io/elasticsearch-tests/elasticsearch-tests-5/build.gradle b/sdks/java/io/elasticsearch-tests/elasticsearch-tests-5/build.gradle
index 5763a0d..a0f623c 100644
--- a/sdks/java/io/elasticsearch-tests/elasticsearch-tests-5/build.gradle
+++ b/sdks/java/io/elasticsearch-tests/elasticsearch-tests-5/build.gradle
@@ -56,7 +56,7 @@ dependencies {
   testCompile "com.carrotsearch.randomizedtesting:randomizedtesting-runner:2.5.0"
   testCompile "org.elasticsearch:elasticsearch:$elastic_search_version"
 
-  testCompile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  testCompile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   testCompile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-io-parent:beam-sdks-java-io-elasticsearch")
   testCompile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-io-parent:beam-sdks-java-io-common").sourceSets.test.output
   testCompile project(":beam-runners-parent:beam-runners-direct-java")

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/sdks/java/io/elasticsearch-tests/elasticsearch-tests-common/build.gradle
----------------------------------------------------------------------
diff --git a/sdks/java/io/elasticsearch-tests/elasticsearch-tests-common/build.gradle b/sdks/java/io/elasticsearch-tests/elasticsearch-tests-common/build.gradle
index 883a057..cd5cf46 100644
--- a/sdks/java/io/elasticsearch-tests/elasticsearch-tests-common/build.gradle
+++ b/sdks/java/io/elasticsearch-tests/elasticsearch-tests-common/build.gradle
@@ -40,7 +40,7 @@ dependencies {
   testCompile "org.apache.httpcomponents:httpcore:4.4.5"
   testCompile "org.apache.httpcomponents:httpclient:4.5.2"
 
-  testCompile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  testCompile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   testCompile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-io-parent:beam-sdks-java-io-elasticsearch")
   testCompile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-io-parent:beam-sdks-java-io-common").sourceSets.test.output
   testCompile project(":beam-runners-parent:beam-runners-direct-java")

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/sdks/java/io/elasticsearch/build.gradle
----------------------------------------------------------------------
diff --git a/sdks/java/io/elasticsearch/build.gradle b/sdks/java/io/elasticsearch/build.gradle
index ab8f7b5..a2e5a02 100644
--- a/sdks/java/io/elasticsearch/build.gradle
+++ b/sdks/java/io/elasticsearch/build.gradle
@@ -22,7 +22,7 @@ applyJavaNature()
 description = "Apache Beam :: SDKs :: Java :: IO :: Elasticsearch"
 
 dependencies {
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile library.java.jackson_databind
   compile library.java.findbugs_jsr305
   compile library.java.guava

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/sdks/java/io/google-cloud-platform/build.gradle
----------------------------------------------------------------------
diff --git a/sdks/java/io/google-cloud-platform/build.gradle b/sdks/java/io/google-cloud-platform/build.gradle
index 20ac67f..3fc50a3 100644
--- a/sdks/java/io/google-cloud-platform/build.gradle
+++ b/sdks/java/io/google-cloud-platform/build.gradle
@@ -28,11 +28,10 @@ description = "Apache Beam :: SDKs :: Java :: IO :: Google Cloud Platform"
  * TODO: Swap to generating test artifacts which we can then rely on instead of
  * the test outputs directly.
  */
-evaluationDependsOn(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
 evaluationDependsOn(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-extensions-parent:beam-sdks-java-extensions-google-cloud-platform-core")
 
 dependencies {
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-extensions-parent:beam-sdks-java-extensions-google-cloud-platform-core")
   compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-extensions-parent:beam-sdks-java-extensions-protobuf")
   compile library.java.jackson_databind
@@ -69,7 +68,7 @@ dependencies {
   compile library.java.proto_google_common_protos
   runtime library.java.grpc_all
   runtime library.java.netty_tcnative_boringssl_static
-  testCompile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core").sourceSets.test.output
+  testCompile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadowTest")
   testCompile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-extensions-parent:beam-sdks-java-extensions-google-cloud-platform-core").sourceSets.test.output
   testCompile project(":beam-runners-parent:beam-runners-direct-java")
   testCompile library.java.hamcrest_core

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/sdks/java/io/hadoop-common/build.gradle
----------------------------------------------------------------------
diff --git a/sdks/java/io/hadoop-common/build.gradle b/sdks/java/io/hadoop-common/build.gradle
index 152475a..5ef17d1 100644
--- a/sdks/java/io/hadoop-common/build.gradle
+++ b/sdks/java/io/hadoop-common/build.gradle
@@ -22,7 +22,7 @@ applyJavaNature()
 description = "Apache Beam :: SDKs :: Java :: IO :: Hadoop Common"
 
 dependencies {
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile library.java.findbugs_jsr305
   provided library.java.hadoop_client
   provided library.java.hadoop_common

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/sdks/java/io/hadoop-file-system/build.gradle
----------------------------------------------------------------------
diff --git a/sdks/java/io/hadoop-file-system/build.gradle b/sdks/java/io/hadoop-file-system/build.gradle
index b81cf39..d1e2368 100644
--- a/sdks/java/io/hadoop-file-system/build.gradle
+++ b/sdks/java/io/hadoop-file-system/build.gradle
@@ -21,17 +21,8 @@ applyJavaNature()
 
 description = "Apache Beam :: SDKs :: Java :: IO :: Hadoop File System"
 
-/*
- * We need to rely on manually specifying these evaluationDependsOn to ensure that
- * the following projects are evaluated before we evaluate this project. This is because
- * we are attempting to reference the "sourceSets.test.output" directly.
- * TODO: Swap to generating test artifacts which we can then rely on instead of
- * the test outputs directly.
- */
-evaluationDependsOn(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
-
 dependencies {
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile library.java.jackson_core
   compile library.java.jackson_databind
   compile library.java.guava
@@ -41,7 +32,7 @@ dependencies {
   provided library.java.hadoop_common
   provided library.java.hadoop_mapreduce_client_core
   testCompile project(":beam-runners-parent:beam-runners-direct-java")
-  testCompile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core").sourceSets.test.output
+  testCompile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadowTest")
   testCompile library.java.guava_testlib
   testCompile library.java.hamcrest_core
   testCompile library.java.mockito_core

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/sdks/java/io/hadoop/input-format/build.gradle
----------------------------------------------------------------------
diff --git a/sdks/java/io/hadoop/input-format/build.gradle b/sdks/java/io/hadoop/input-format/build.gradle
index 4ee9742..c03adc4 100644
--- a/sdks/java/io/hadoop/input-format/build.gradle
+++ b/sdks/java/io/hadoop/input-format/build.gradle
@@ -21,15 +21,6 @@ applyJavaNature()
 
 description = "Apache Beam :: SDKs :: Java :: IO :: Hadoop :: input-format"
 
-/*
- * We need to rely on manually specifying these evaluationDependsOn to ensure that
- * the following projects are evaluated before we evaluate this project. This is because
- * we are attempting to reference the "sourceSets.test.output" directly.
- * TODO: Swap to generating test artifacts which we can then rely on instead of
- * the test outputs directly.
- */
-evaluationDependsOn(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
-
 def log4j_version = "2.6.2"
 
 dependencies {
@@ -41,8 +32,8 @@ dependencies {
   provided library.java.hadoop_mapreduce_client_core
   testCompile library.java.hamcrest_core
 
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core").sourceSets.test.output
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
+  testCompile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadowTest")
   testCompile project(":beam-runners-parent:beam-runners-direct-java")
   testCompile "org.apache.logging.log4j:log4j-core:$log4j_version"
   testCompile library.java.junit

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/sdks/java/io/hadoop/jdk1.8-tests/build.gradle
----------------------------------------------------------------------
diff --git a/sdks/java/io/hadoop/jdk1.8-tests/build.gradle b/sdks/java/io/hadoop/jdk1.8-tests/build.gradle
index 764da1f..e94512a 100644
--- a/sdks/java/io/hadoop/jdk1.8-tests/build.gradle
+++ b/sdks/java/io/hadoop/jdk1.8-tests/build.gradle
@@ -57,7 +57,7 @@ dependencies {
   testCompile "org.apache.cassandra:cassandra-all:3.9"
   testCompile "com.datastax.cassandra:cassandra-driver-core:3.1.1"
 
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   testCompile project(":beam-runners-parent:beam-runners-direct-java")
   testCompile "org.apache.logging.log4j:log4j-core:$log4j_version"
   testCompile library.java.junit

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/sdks/java/io/hbase/build.gradle
----------------------------------------------------------------------
diff --git a/sdks/java/io/hbase/build.gradle b/sdks/java/io/hbase/build.gradle
index da7504d..5e27b1a 100644
--- a/sdks/java/io/hbase/build.gradle
+++ b/sdks/java/io/hbase/build.gradle
@@ -21,15 +21,6 @@ applyJavaNature()
 
 description = "Apache Beam :: SDKs :: Java :: IO :: HBase"
 
-/*
- * We need to rely on manually specifying these evaluationDependsOn to ensure that
- * the following projects are evaluated before we evaluate this project. This is because
- * we are attempting to reference the "sourceSets.test.output" directly.
- * TODO: Swap to generating test artifacts which we can then rely on instead of
- * the test outputs directly.
- */
-evaluationDependsOn(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
-
 test {
   systemProperty "log4j.configuration", "log4j-test.properties"
   jvmArgs "-XX:-UseGCOverheadLimit"
@@ -48,13 +39,13 @@ test {
 def hbase_version = "1.2.6"
 
 dependencies {
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-io-parent:beam-sdks-java-io-hadoop-common")
   compile library.java.guava
   compile library.java.findbugs_jsr305
   compile library.java.slf4j_api
   compile "org.apache.hbase:hbase-shaded-client:$hbase_version"
-  testCompile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core").sourceSets.test.output
+  testCompile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadowTest")
   testCompile project(":beam-runners-parent:beam-runners-direct-java")
   testCompile library.java.commons_lang3
   testCompile library.java.junit

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/sdks/java/io/hcatalog/build.gradle
----------------------------------------------------------------------
diff --git a/sdks/java/io/hcatalog/build.gradle b/sdks/java/io/hcatalog/build.gradle
index c795df3..844a95f 100644
--- a/sdks/java/io/hcatalog/build.gradle
+++ b/sdks/java/io/hcatalog/build.gradle
@@ -31,7 +31,7 @@ test {
 }
 
 dependencies {
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-io-parent:beam-sdks-java-io-hadoop-common")
   compile library.java.slf4j_api
   compile library.java.guava

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/sdks/java/io/jdbc/build.gradle
----------------------------------------------------------------------
diff --git a/sdks/java/io/jdbc/build.gradle b/sdks/java/io/jdbc/build.gradle
index 096f77c..dd6e357 100644
--- a/sdks/java/io/jdbc/build.gradle
+++ b/sdks/java/io/jdbc/build.gradle
@@ -31,7 +31,7 @@ description = "Apache Beam :: SDKs :: Java :: IO :: JDBC"
 evaluationDependsOn(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-io-parent:beam-sdks-java-io-common")
 
 dependencies {
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile library.java.guava
   compile library.java.findbugs_jsr305
   compile "org.apache.commons:commons-dbcp2:2.1.1"

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/sdks/java/io/jms/build.gradle
----------------------------------------------------------------------
diff --git a/sdks/java/io/jms/build.gradle b/sdks/java/io/jms/build.gradle
index 314b16a..7744747 100644
--- a/sdks/java/io/jms/build.gradle
+++ b/sdks/java/io/jms/build.gradle
@@ -22,7 +22,7 @@ applyJavaNature()
 description = "Apache Beam :: SDKs :: Java :: IO :: JMS"
 
 dependencies {
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile library.java.slf4j_api
   compile library.java.joda_time
   compile library.java.guava

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/sdks/java/io/kafka/build.gradle
----------------------------------------------------------------------
diff --git a/sdks/java/io/kafka/build.gradle b/sdks/java/io/kafka/build.gradle
index 28660ae..eb755d9 100644
--- a/sdks/java/io/kafka/build.gradle
+++ b/sdks/java/io/kafka/build.gradle
@@ -21,17 +21,8 @@ applyJavaNature(enableFindbugs: false)
 
 description = "Apache Beam :: SDKs :: Java :: IO :: Kafka"
 
-/*
- * We need to rely on manually specifying these evaluationDependsOn to ensure that
- * the following projects are evaluated before we evaluate this project. This is because
- * we are attempting to reference the "sourceSets.test.output" directly.
- * TODO: Swap to generating test artifacts which we can then rely on instead of
- * the test outputs directly.
- */
-evaluationDependsOn(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
-
 dependencies {
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile library.java.kafka_clients
   compile library.java.slf4j_api
   compile library.java.joda_time
@@ -41,7 +32,7 @@ dependencies {
   compile library.java.jackson_databind
   compile "org.springframework:spring-expression:4.3.5.RELEASE"
   testCompile project(":beam-runners-parent:beam-runners-direct-java")
-  testCompile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core").sourceSets.test.output
+  testCompile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadowTest")
   testCompile library.java.hamcrest_core
   testCompile library.java.junit
   testCompile library.java.slf4j_jdk14

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/sdks/java/io/kinesis/build.gradle
----------------------------------------------------------------------
diff --git a/sdks/java/io/kinesis/build.gradle b/sdks/java/io/kinesis/build.gradle
index 0bab361..769e972 100644
--- a/sdks/java/io/kinesis/build.gradle
+++ b/sdks/java/io/kinesis/build.gradle
@@ -29,7 +29,7 @@ test {
 def aws_version = "1.11.18"
 
 dependencies {
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile library.java.slf4j_api
   compile library.java.joda_time
   compile library.java.guava

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/sdks/java/io/mongodb/build.gradle
----------------------------------------------------------------------
diff --git a/sdks/java/io/mongodb/build.gradle b/sdks/java/io/mongodb/build.gradle
index bab3ec9..cabab9f 100644
--- a/sdks/java/io/mongodb/build.gradle
+++ b/sdks/java/io/mongodb/build.gradle
@@ -22,7 +22,7 @@ applyJavaNature()
 description = "Apache Beam :: SDKs :: Java :: IO :: MongoDB"
 
 dependencies {
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile library.java.slf4j_api
   compile library.java.guava
   compile library.java.findbugs_jsr305

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/sdks/java/io/mqtt/build.gradle
----------------------------------------------------------------------
diff --git a/sdks/java/io/mqtt/build.gradle b/sdks/java/io/mqtt/build.gradle
index 71cab93..9a54918 100644
--- a/sdks/java/io/mqtt/build.gradle
+++ b/sdks/java/io/mqtt/build.gradle
@@ -22,7 +22,7 @@ applyJavaNature()
 description = "Apache Beam :: SDKs :: Java :: IO :: MQTT"
 
 dependencies {
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile library.java.slf4j_api
   compile library.java.joda_time
   compile library.java.guava

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/sdks/java/io/redis/build.gradle
----------------------------------------------------------------------
diff --git a/sdks/java/io/redis/build.gradle b/sdks/java/io/redis/build.gradle
index 5962819..c9b1fb7 100644
--- a/sdks/java/io/redis/build.gradle
+++ b/sdks/java/io/redis/build.gradle
@@ -22,7 +22,7 @@ applyJavaNature()
 description = "Apache Beam :: SDKs :: Java :: IO :: Redis"
 
 dependencies {
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile library.java.guava
   compile library.java.findbugs_jsr305
   compile "redis.clients:jedis:2.9.0"

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/sdks/java/io/solr/build.gradle
----------------------------------------------------------------------
diff --git a/sdks/java/io/solr/build.gradle b/sdks/java/io/solr/build.gradle
index 7d4946e..48c0b36 100644
--- a/sdks/java/io/solr/build.gradle
+++ b/sdks/java/io/solr/build.gradle
@@ -22,7 +22,7 @@ applyJavaNature()
 description = "Apache Beam :: SDKs :: Java :: IO :: Solr"
 
 dependencies {
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile library.java.guava
   compile library.java.findbugs_jsr305
   compile library.java.commons_compress

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/sdks/java/io/tika/build.gradle
----------------------------------------------------------------------
diff --git a/sdks/java/io/tika/build.gradle b/sdks/java/io/tika/build.gradle
index 86b988e..b858d7a 100644
--- a/sdks/java/io/tika/build.gradle
+++ b/sdks/java/io/tika/build.gradle
@@ -21,23 +21,14 @@ applyJavaNature(javaVersion: 1.8)
 
 description = "Apache Beam :: SDKs :: Java :: IO :: Tika"
 
-/*
- * We need to rely on manually specifying these evaluationDependsOn to ensure that
- * the following projects are evaluated before we evaluate this project. This is because
- * we are attempting to reference the "sourceSets.test.output" directly.
- * TODO: Swap to generating test artifacts which we can then rely on instead of
- * the test outputs directly.
- */
-evaluationDependsOn(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
-
 def tika_version = "1.16"
 
 dependencies {
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile library.java.guava
   compile library.java.findbugs_jsr305
   compile "org.apache.tika:tika-core:$tika_version"
-  testCompile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core").sourceSets.test.output
+  testCompile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadowTest")
   testCompile project(":beam-runners-parent:beam-runners-direct-java")
   testCompile library.java.junit
   testCompile library.java.hamcrest_core

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/sdks/java/io/xml/build.gradle
----------------------------------------------------------------------
diff --git a/sdks/java/io/xml/build.gradle b/sdks/java/io/xml/build.gradle
index 282e30d..e2d1662 100644
--- a/sdks/java/io/xml/build.gradle
+++ b/sdks/java/io/xml/build.gradle
@@ -21,22 +21,13 @@ applyJavaNature()
 
 description = "Apache Beam :: SDKs :: Java :: IO :: XML"
 
-/*
- * We need to rely on manually specifying these evaluationDependsOn to ensure that
- * the following projects are evaluated before we evaluate this project. This is because
- * we are attempting to reference the "sourceSets.test.output" directly.
- * TODO: Swap to generating test artifacts which we can then rely on instead of
- * the test outputs directly.
- */
-evaluationDependsOn(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
-
 dependencies {
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile library.java.stax2_api
   compile library.java.guava
   compile library.java.findbugs_jsr305
   runtime library.java.woodstox_core_asl
-  testCompile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core").sourceSets.test.output
+  testCompile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadowTest")
   testCompile project(":beam-runners-parent:beam-runners-direct-java")
   testCompile library.java.junit
   testCompile library.java.slf4j_jdk14

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/sdks/java/java8tests/build.gradle
----------------------------------------------------------------------
diff --git a/sdks/java/java8tests/build.gradle b/sdks/java/java8tests/build.gradle
index e70a869..a7b0b5f 100644
--- a/sdks/java/java8tests/build.gradle
+++ b/sdks/java/java8tests/build.gradle
@@ -22,7 +22,7 @@ applyJavaNature(javaVersion: 1.8)
 description = "Apache Beam :: SDKs :: Java :: Java 8 Tests"
 
 dependencies {
-  testCompile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  testCompile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   testCompile project(":beam-runners-parent:beam-runners-direct-java")
   testCompile library.java.guava
   testCompile library.java.joda_time

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/sdks/java/maven-archetypes/starter/build.gradle
----------------------------------------------------------------------
diff --git a/sdks/java/maven-archetypes/starter/build.gradle b/sdks/java/maven-archetypes/starter/build.gradle
index ecc986a..36f66cc 100644
--- a/sdks/java/maven-archetypes/starter/build.gradle
+++ b/sdks/java/maven-archetypes/starter/build.gradle
@@ -23,7 +23,7 @@ description = "Apache Beam :: SDKs :: Java :: Maven Archetypes :: Starter"
 
 dependencies {
   runtime project(":beam-runners-parent:beam-runners-direct-java")
-  runtime project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  runtime project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
 }
 
 task packageTests(type: Jar) {

http://git-wip-us.apache.org/repos/asf/beam/blob/e4951a24/sdks/java/nexmark/build.gradle
----------------------------------------------------------------------
diff --git a/sdks/java/nexmark/build.gradle b/sdks/java/nexmark/build.gradle
index 70536c2..de50506 100644
--- a/sdks/java/nexmark/build.gradle
+++ b/sdks/java/nexmark/build.gradle
@@ -22,7 +22,7 @@ applyJavaNature()
 description = "Apache Beam :: SDKs :: Java :: Nexmark"
 
 dependencies {
-  compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core")
+  compile project(path: ":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-core", configuration: "shadow")
   compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-io-parent:beam-sdks-java-io-google-cloud-platform")
   compile project(":beam-sdks-parent:beam-sdks-java-parent:beam-sdks-java-extensions-parent:beam-sdks-java-extensions-google-cloud-platform-core")
   compile library.java.google_api_services_bigquery