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.
This commit is contained in:
ZHANG Dapeng 2020-03-04 16:10:46 -08:00 committed by GitHub
parent f85843bb88
commit 7be75a0bcb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 49 additions and 37 deletions

View File

@ -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)
}
}
}

View File

@ -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
}

View File

@ -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) {

View File

@ -59,7 +59,11 @@ public class ChannelAndServerBuilderTest {
}
List<Object[]> 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)

View File

@ -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)
}
}
}