From 7be75a0bcb3711514c3d8e6e6fefdfb4b5ee2c2d Mon Sep 17 00:00:00 2001 From: ZHANG Dapeng Date: Wed, 4 Mar 2020 16:10:46 -0800 Subject: [PATCH] all: let interop test use shaded dependency correctly take 2 First rolls forward #6791, then fixes the issue of missing transitive dependency for the shadow configuration. --- alts/build.gradle | 22 +++++++----- gae-interop-testing/gae-jdk8/build.gradle | 4 ++- interop-testing/build.gradle | 18 +++------- .../io/grpc/ChannelAndServerBuilderTest.java | 6 +++- xds/build.gradle | 36 +++++++++++-------- 5 files changed, 49 insertions(+), 37 deletions(-) diff --git a/alts/build.gradle b/alts/build.gradle index b6110b8054..9796ada6ab 100644 --- a/alts/build.gradle +++ b/alts/build.gradle @@ -16,12 +16,12 @@ dependencies { compile project(':grpc-auth'), project(':grpc-core'), project(':grpc-grpclb'), - project(':grpc-netty'), project(':grpc-protobuf'), project(':grpc-stub'), libraries.lang, libraries.protobuf, libraries.conscrypt + def nettyDependency = compile project(':grpc-netty') compile (libraries.google_auth_oauth2_http) { // prefer our own versions instead of google-auth-oauth2-http's dependency exclude group: 'com.google.guava', module: 'guava' @@ -29,6 +29,10 @@ dependencies { exclude group: 'io.grpc', module: 'grpc-context' } compileOnly libraries.javax_annotation + + shadow configurations.compile.getDependencies().minus(nettyDependency) + shadow project(path: ':grpc-netty-shaded', configuration: 'shadow') + testCompile project(':grpc-testing'), project(':grpc-testing-proto'), libraries.guava, @@ -81,14 +85,16 @@ publishing { artifacts.remove(originalJar) pom.withXml { - // Swap our dependency to grpc-netty-shaded. Projects depending on this via - // project(':grpc-alts') will still be using the non-shaded form. - asNode().dependencies.'*'.findAll() { dep -> - dep.artifactId.text() == 'grpc-netty' - }.each() { netty -> - netty.artifactId*.value = 'grpc-netty-shaded' - netty.version*.value = "[" + netty.version.text() + "]" + def dependenciesNode = new Node(null, 'dependencies') + project.configurations.shadow.allDependencies.each { dep -> + def dependencyNode = dependenciesNode.appendNode('dependency') + dependencyNode.appendNode('groupId', dep.group) + dependencyNode.appendNode('artifactId', dep.name) + def version = (dep.name == 'grpc-netty-shaded') ? '[' + dep.version + ']' : dep.version + dependencyNode.appendNode('version', version) + dependencyNode.appendNode('scope', 'compile') } + asNode().dependencies[0].replaceNode(dependenciesNode) } } } diff --git a/gae-interop-testing/gae-jdk8/build.gradle b/gae-interop-testing/gae-jdk8/build.gradle index fd3e9ffabf..1ef4086dcc 100644 --- a/gae-interop-testing/gae-jdk8/build.gradle +++ b/gae-interop-testing/gae-jdk8/build.gradle @@ -50,7 +50,9 @@ dependencies { compile project(":grpc-okhttp") compile project(":grpc-protobuf") compile project(":grpc-stub") - compile project(":grpc-interop-testing") + compile (project(":grpc-interop-testing")) { + exclude group: "io.grpc", module: "grpc-netty-shaded" + } compile libraries.netty_tcnative } diff --git a/interop-testing/build.gradle b/interop-testing/build.gradle index e528d6104c..2e89b01fec 100644 --- a/interop-testing/build.gradle +++ b/interop-testing/build.gradle @@ -16,7 +16,7 @@ configurations { evaluationDependsOn(project(':grpc-context').path) dependencies { - compile project(':grpc-alts'), + compile project(path: ':grpc-alts', configuration: 'shadow'), project(':grpc-auth'), project(':grpc-census'), project(':grpc-core'), @@ -113,21 +113,13 @@ task grpclb_long_lived_affinity_test_client(type: CreateStartScripts) { } task xds_test_client(type: CreateStartScripts) { - // Use task dependsOn instead of depending on project(':grpc-xds') in configurations because - // grpc-xds is not published yet and we don't want grpc-interop-testin to depend on it in maven. - dependsOn ':grpc-xds:shadowJar' - // Add all other dependencies that grpc-xds needs. - dependencies { compile project(':grpc-services'), libraries.netty_epoll } mainClassName = "io.grpc.testing.integration.XdsTestClient" applicationName = "xds-test-client" - outputDir = new File(project.buildDir, 'tmp') - classpath = startScripts.classpath + fileTree("${project(':grpc-xds').buildDir}/libs") - doLast { - unixScript.text = unixScript.text.replace( - '\$APP_HOME/lib/grpc-xds', "${project(':grpc-xds').buildDir}/libs/grpc-xds") - windowsScript.text = windowsScript.text.replace( - '%APP_HOME%\\lib\\grpc-xds', "${project(':grpc-xds').buildDir}\\libs\\grpc-xds") + dependencies { + runtime project(path: ':grpc-xds', configuration: 'shadow') } + outputDir = new File(project.buildDir, 'tmp') + classpath = startScripts.classpath } task xds_test_server(type: CreateStartScripts) { diff --git a/interop-testing/src/test/java/io/grpc/ChannelAndServerBuilderTest.java b/interop-testing/src/test/java/io/grpc/ChannelAndServerBuilderTest.java index b83bb61357..6d082d4042 100644 --- a/interop-testing/src/test/java/io/grpc/ChannelAndServerBuilderTest.java +++ b/interop-testing/src/test/java/io/grpc/ChannelAndServerBuilderTest.java @@ -59,7 +59,11 @@ public class ChannelAndServerBuilderTest { } List classes = new ArrayList<>(); for (ClassInfo classInfo : classInfos) { - Class clazz = Class.forName(classInfo.getName(), false /*initialize*/, loader); + String className = classInfo.getName(); + if (className.contains("io.grpc.netty.shaded.io.netty")) { + continue; + } + Class clazz = Class.forName(className, false /*initialize*/, loader); if (ServerBuilder.class.isAssignableFrom(clazz) && clazz != ServerBuilder.class) { classes.add(new Object[]{clazz}); } else if (ManagedChannelBuilder.class.isAssignableFrom(clazz) diff --git a/xds/build.gradle b/xds/build.gradle index 994d77b202..64a391ac1f 100644 --- a/xds/build.gradle +++ b/xds/build.gradle @@ -22,15 +22,14 @@ dependencies { compile project(':grpc-protobuf'), project(':grpc-stub'), project(':grpc-core'), - project(':grpc-netty'), project(':grpc-services'), - project(':grpc-alts'), - libraries.netty_epoll - - compile (libraries.pgv) { + project(path: ':grpc-alts', configuration: 'shadow') + def nettyDependency = compile project(':grpc-netty') + def pgvDependency = compile (libraries.pgv) { // PGV depends on com.google.protobuf:protobuf-java 3.6.1 conflicting with :grpc-protobuf exclude group: 'com.google.protobuf' } + compile (libraries.protobuf_util) { // prefer our own versions instead of protobuf-util's dependency exclude group: 'com.google.guava', module: 'guava' @@ -39,11 +38,18 @@ dependencies { testCompile project(':grpc-core').sourceSets.test.output - compileOnly libraries.javax_annotation + compileOnly libraries.javax_annotation, + // At runtime use the epoll included in grpc-netty-shaded + libraries.netty_epoll testCompile project(':grpc-testing'), project(':grpc-testing-proto'), - libraries.guava_testlib + libraries.guava_testlib, + libraries.netty_epoll + + shadow configurations.compile.getDependencies().minus([nettyDependency, pgvDependency]) + shadow project(path: ':grpc-netty-shaded', configuration: 'shadow') + signature "org.codehaus.mojo.signature:java17:1.0@signature" testRuntime libraries.netty_tcnative } @@ -87,14 +93,16 @@ publishing { artifacts.removeAll { it.classifier == 'original' } pom.withXml { - // Swap our dependency to grpc-netty-shaded. Projects depending on this via - // project(':grpc-xds') will still be using the non-shaded form. - asNode().dependencies.'*'.findAll() { dep -> - dep.artifactId.text() == 'grpc-netty' - }.each() { netty -> - netty.artifactId*.value = 'grpc-netty-shaded' - netty.version*.value = "[" + netty.version.text() + "]" + def dependenciesNode = new Node(null, 'dependencies') + project.configurations.shadow.allDependencies.each { dep -> + def dependencyNode = dependenciesNode.appendNode('dependency') + dependencyNode.appendNode('groupId', dep.group) + dependencyNode.appendNode('artifactId', dep.name) + def version = (dep.name == 'grpc-netty-shaded') ? '[' + dep.version + ']' : dep.version + dependencyNode.appendNode('version', version) + dependencyNode.appendNode('scope', 'compile') } + asNode().dependencies[0].replaceNode(dependenciesNode) } } }