Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

java.lang.NoSuchMethodError: com.google.common.collect.ImmutableList.builderWithExpectedSize #591

Closed
bootstraponline opened this issue Jul 12, 2018 · 41 comments

Comments

@bootstraponline
Copy link
Contributor

Description of the issue:

./gradlew jib fails

Expected behavior:

./gradlew jib works

Steps to reproduce:

I added jib to my project and ./gradlew jib is broken.

Environment:

  • macOS 10.13.5
  • java version 1.8.0_172
  • Gradle 4.8.1

jib-gradle-plugin Configuration:

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath Plugins.KOTLIN
    }
}

plugins {
    // https://plugins.gradle.org/plugin/com.google.cloud.tools.jib
    id 'com.google.cloud.tools.jib' version '0.9.6'
}

apply plugin: 'java'
apply plugin: 'kotlin'

jib.to.image = 'gcr.io/delta-essence-114723/soseedy'

dependencies {
    compile project(':dataseedingapi')

    // https://search.maven.org/#search%7Cga%7C1%7Cg%3A%22io.grpc%22%20a%3A%22grpc-netty%22
    compile 'io.grpc:grpc-netty:1.12.0'
    compile Libs.KOTLIN_STD_LIB

    // https://mvnrepository.com/artifact/io.netty/netty-tcnative-boringssl-static
    compile 'io.netty:netty-tcnative-boringssl-static:2.0.8.Final'

    testCompile Libs.JUNIT
}

sourceCompatibility = "1.8"
targetCompatibility = "1.8"

repositories {
    mavenCentral()
}
compileKotlin {
    kotlinOptions {
        jvmTarget = "1.8"
    }
}
compileTestKotlin {
    kotlinOptions {
        jvmTarget = "1.8"
    }
}

task("fatJar", type: Jar) {
    baseName = "${project.name}-all"
    manifest {
        attributes 'Main-Class': 'com.instructure.dataseeding.OutOfProcessServer'
    }
    from { configurations.runtime.collect { it.isDirectory() ? it : zipTree(it) } }
    with jar
}

Log output:

Gradle stacktrace
warning: Base image 'gcr.io/distroless/java' does not use a specific image digest - build may not be reproducible

Containerizing application to gcr.io/delta-essence-114723/soseedy...

Retrieving registry credentials for gcr.io...
Getting base image gcr.io/distroless/java...
Building dependencies layer...
Building resources layer...
Building classes layer...

> Task :jib FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':jib'.
> com.google.common.collect.ImmutableList.builderWithExpectedSize(I)Lcom/google/common/collect/ImmutableList$Builder;

* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':jib'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:110)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
        at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
        at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
        at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59)
        at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
        at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
        at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
        at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.run(EventFiringTaskExecuter.java:51)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:317)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:309)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:185)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:97)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:46)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$ExecuteTaskAction.execute(DefaultTaskExecutionGraph.java:262)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$ExecuteTaskAction.execute(DefaultTaskExecutionGraph.java:246)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:136)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:130)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.execute(DefaultTaskPlanExecutor.java:201)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.executeWithTask(DefaultTaskPlanExecutor.java:192)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:130)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
Caused by: java.lang.NoSuchMethodError: com.google.common.collect.ImmutableList.builderWithExpectedSize(I)Lcom/google/common/collect/ImmutableList$Builder;
        at com.google.cloud.tools.jib.builder.EntrypointBuilder.makeEntrypoint(EntrypointBuilder.java:46)
        at com.google.cloud.tools.jib.builder.BuildSteps.getEntrypoint(BuildSteps.java:128)
        at com.google.cloud.tools.jib.builder.BuildSteps.lambda$forBuildToDockerRegistry$0(BuildSteps.java:85)
        at com.google.cloud.tools.jib.builder.BuildSteps.run(BuildSteps.java:197)
        at com.google.cloud.tools.jib.frontend.BuildStepsRunner.build(BuildStepsRunner.java:187)
        at com.google.cloud.tools.jib.gradle.BuildImageTask.buildImage(BuildImageTask.java:150)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:46)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:794)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:761)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:131)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:317)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:309)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:185)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:97)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:120)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:99)
        ... 30 more


* Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
See https://docs.gradle.org/4.8.1/userguide/command_line_interface.html#sec:command_line_warnings

BUILD FAILED in 1s
11 actionable tasks: 2 executed, 9 up-to-date

Additional Information:

I'm using Kotlin. ./gradlew assemble works.

@coollog
Copy link
Contributor

coollog commented Jul 12, 2018

It looks like it might be failing to resolve the Guava dependency. @GoogleContainerTools/java-tools

@loosebazooka
Copy link
Member

loosebazooka commented Jul 12, 2018

Or a guava buildscript version mismatch?

builderWithExpectedSize is from version 23.1 onwards.

You can try to force your buildscript version to match jibs and see if that works, although I can't be sure what's causing a non-compatible version to be pulled in

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath "com.google.guava:guava:23.5-jre"
        classpath Plugins.KOTLIN
    }
}

@bootstraponline
Copy link
Contributor Author

Thanks. I'll try to force resolve guava and see if that helps.

@bootstraponline
Copy link
Contributor Author

I added an override to build.gradle then I ran ./gradlew dependencies I'm still getting the same error. Is there any other solution I can try?

configurations.all {
    resolutionStrategy {
        force 'com.google.guava:guava:23.6.1-jre'
    }
}
gradle dependencies
------------------------------------------------------------
Root project
------------------------------------------------------------

annotationProcessor - Annotation processors and their dependencies for source set 'main'.
No dependencies

apiElements - API elements for main. (n)
No dependencies

archives - Configuration for archive artifacts.
No dependencies

compile - Dependencies for source set 'main' (deprecated, use 'implementation ' instead).
+--- project :dataseedingapi
|    +--- io.grpc:grpc-protobuf-lite:1.6.1
|    |    +--- io.grpc:grpc-core:1.6.1 -> 1.12.0
|    |    |    +--- io.grpc:grpc-context:1.12.0
|    |    |    +--- com.google.code.gson:gson:2.7 -> 2.8.0
|    |    |    +--- com.google.guava:guava:20.0 -> 23.6.1-jre
|    |    |    |    +--- com.google.code.findbugs:jsr305:1.3.9 -> 3.0.0
|    |    |    |    +--- org.checkerframework:checker-compat-qual:2.0.0
|    |    |    |    +--- com.google.errorprone:error_prone_annotations:2.1.3
|    |    |    |    +--- com.google.j2objc:j2objc-annotations:1.1
|    |    |    |    \--- org.codehaus.mojo:animal-sniffer-annotations:1.14
|    |    |    +--- com.google.errorprone:error_prone_annotations:2.1.2 -> 2.1.3
|    |    |    +--- com.google.code.findbugs:jsr305:3.0.0
|    |    |    +--- io.opencensus:opencensus-api:0.11.0
|    |    |    \--- io.opencensus:opencensus-contrib-grpc-metrics:0.11.0
|    |    |         \--- io.opencensus:opencensus-api:0.11.0
|    |    +--- com.google.protobuf:protobuf-lite:3.0.1
|    |    \--- com.google.guava:guava:19.0 -> 23.6.1-jre (*)
|    +--- io.grpc:grpc-stub:1.6.1
|    |    \--- io.grpc:grpc-core:1.6.1 -> 1.12.0 (*)
|    +--- org.jetbrains.kotlin:kotlin-stdlib:1.2.40
|    |    \--- org.jetbrains:annotations:13.0
|    +--- com.squareup.retrofit2:retrofit:2.3.0
|    |    \--- com.squareup.okhttp3:okhttp:3.8.0 -> 3.9.0
|    |         \--- com.squareup.okio:okio:1.13.0
|    +--- com.squareup.retrofit2:converter-gson:2.3.0
|    |    +--- com.squareup.retrofit2:retrofit:2.3.0 (*)
|    |    \--- com.google.code.gson:gson:2.7 -> 2.8.0
|    +--- com.squareup.retrofit2:converter-scalars:2.1.0
|    |    \--- com.squareup.retrofit2:retrofit:2.1.0 -> 2.3.0 (*)
|    +--- com.squareup.okhttp3:logging-interceptor:3.8.0
|    |    \--- com.squareup.okhttp3:okhttp:3.8.0 -> 3.9.0 (*)
|    +--- com.squareup.okhttp3:okhttp:3.9.0 (*)
|    +--- com.google.code.gson:gson:2.8.0
|    +--- org.jsoup:jsoup:1.10.3
|    \--- com.github.javafaker:javafaker:0.14
|         +--- org.apache.commons:commons-lang3:3.5
|         +--- org.yaml:snakeyaml:1.19
|         \--- com.github.mifmif:generex:1.0.2
|              \--- dk.brics.automaton:automaton:1.11-8
+--- io.grpc:grpc-netty:1.12.0
|    +--- io.grpc:grpc-core:[1.12.0] -> 1.12.0 (*)
|    +--- io.netty:netty-codec-http2:[4.1.22.Final] -> 4.1.22.Final
|    |    +--- io.netty:netty-codec-http:4.1.22.Final
|    |    |    \--- io.netty:netty-codec:4.1.22.Final
|    |    |         \--- io.netty:netty-transport:4.1.22.Final
|    |    |              +--- io.netty:netty-buffer:4.1.22.Final
|    |    |              |    \--- io.netty:netty-common:4.1.22.Final
|    |    |              \--- io.netty:netty-resolver:4.1.22.Final
|    |    |                   \--- io.netty:netty-common:4.1.22.Final
|    |    \--- io.netty:netty-handler:4.1.22.Final
|    |         +--- io.netty:netty-buffer:4.1.22.Final (*)
|    |         +--- io.netty:netty-transport:4.1.22.Final (*)
|    |         \--- io.netty:netty-codec:4.1.22.Final (*)
|    \--- io.netty:netty-handler-proxy:4.1.22.Final
|         +--- io.netty:netty-transport:4.1.22.Final (*)
|         +--- io.netty:netty-codec-socks:4.1.22.Final
|         |    \--- io.netty:netty-codec:4.1.22.Final (*)
|         \--- io.netty:netty-codec-http:4.1.22.Final (*)
+--- org.jetbrains.kotlin:kotlin-stdlib:1.2.40 (*)
\--- io.netty:netty-tcnative-boringssl-static:2.0.8.Final

compileClasspath - Compile classpath for source set 'main'.
+--- project :dataseedingapi
|    +--- io.grpc:grpc-protobuf-lite:1.6.1
|    |    +--- io.grpc:grpc-core:1.6.1 -> 1.12.0
|    |    |    +--- io.grpc:grpc-context:1.12.0
|    |    |    +--- com.google.code.gson:gson:2.7
|    |    |    +--- com.google.guava:guava:20.0 -> 23.6.1-jre
|    |    |    |    +--- com.google.code.findbugs:jsr305:1.3.9 -> 3.0.0
|    |    |    |    +--- org.checkerframework:checker-compat-qual:2.0.0
|    |    |    |    +--- com.google.errorprone:error_prone_annotations:2.1.3
|    |    |    |    +--- com.google.j2objc:j2objc-annotations:1.1
|    |    |    |    \--- org.codehaus.mojo:animal-sniffer-annotations:1.14
|    |    |    +--- com.google.errorprone:error_prone_annotations:2.1.2 -> 2.1.3
|    |    |    +--- com.google.code.findbugs:jsr305:3.0.0
|    |    |    +--- io.opencensus:opencensus-api:0.11.0
|    |    |    \--- io.opencensus:opencensus-contrib-grpc-metrics:0.11.0
|    |    |         \--- io.opencensus:opencensus-api:0.11.0
|    |    +--- com.google.protobuf:protobuf-lite:3.0.1
|    |    \--- com.google.guava:guava:19.0 -> 23.6.1-jre (*)
|    \--- io.grpc:grpc-stub:1.6.1
|         \--- io.grpc:grpc-core:1.6.1 -> 1.12.0 (*)
+--- io.grpc:grpc-netty:1.12.0
|    +--- io.grpc:grpc-core:[1.12.0] -> 1.12.0 (*)
|    +--- io.netty:netty-codec-http2:[4.1.22.Final] -> 4.1.22.Final
|    |    +--- io.netty:netty-codec-http:4.1.22.Final
|    |    |    \--- io.netty:netty-codec:4.1.22.Final
|    |    |         \--- io.netty:netty-transport:4.1.22.Final
|    |    |              +--- io.netty:netty-buffer:4.1.22.Final
|    |    |              |    \--- io.netty:netty-common:4.1.22.Final
|    |    |              \--- io.netty:netty-resolver:4.1.22.Final
|    |    |                   \--- io.netty:netty-common:4.1.22.Final
|    |    \--- io.netty:netty-handler:4.1.22.Final
|    |         +--- io.netty:netty-buffer:4.1.22.Final (*)
|    |         +--- io.netty:netty-transport:4.1.22.Final (*)
|    |         \--- io.netty:netty-codec:4.1.22.Final (*)
|    \--- io.netty:netty-handler-proxy:4.1.22.Final
|         +--- io.netty:netty-transport:4.1.22.Final (*)
|         +--- io.netty:netty-codec-socks:4.1.22.Final
|         |    \--- io.netty:netty-codec:4.1.22.Final (*)
|         \--- io.netty:netty-codec-http:4.1.22.Final (*)
+--- org.jetbrains.kotlin:kotlin-stdlib:1.2.40
|    \--- org.jetbrains:annotations:13.0
\--- io.netty:netty-tcnative-boringssl-static:2.0.8.Final

compileOnly - Compile only dependencies for source set 'main'.
No dependencies

default - Configuration for default artifacts.
+--- project :dataseedingapi
|    +--- io.grpc:grpc-protobuf-lite:1.6.1
|    |    +--- io.grpc:grpc-core:1.6.1 -> 1.12.0
|    |    |    +--- io.grpc:grpc-context:1.12.0
|    |    |    +--- com.google.code.gson:gson:2.7 -> 2.8.0
|    |    |    +--- com.google.guava:guava:20.0 -> 23.6.1-jre
|    |    |    |    +--- com.google.code.findbugs:jsr305:1.3.9 -> 3.0.0
|    |    |    |    +--- org.checkerframework:checker-compat-qual:2.0.0
|    |    |    |    +--- com.google.errorprone:error_prone_annotations:2.1.3
|    |    |    |    +--- com.google.j2objc:j2objc-annotations:1.1
|    |    |    |    \--- org.codehaus.mojo:animal-sniffer-annotations:1.14
|    |    |    +--- com.google.errorprone:error_prone_annotations:2.1.2 -> 2.1.3
|    |    |    +--- com.google.code.findbugs:jsr305:3.0.0
|    |    |    +--- io.opencensus:opencensus-api:0.11.0
|    |    |    \--- io.opencensus:opencensus-contrib-grpc-metrics:0.11.0
|    |    |         \--- io.opencensus:opencensus-api:0.11.0
|    |    +--- com.google.protobuf:protobuf-lite:3.0.1
|    |    \--- com.google.guava:guava:19.0 -> 23.6.1-jre (*)
|    +--- io.grpc:grpc-stub:1.6.1
|    |    \--- io.grpc:grpc-core:1.6.1 -> 1.12.0 (*)
|    +--- org.jetbrains.kotlin:kotlin-stdlib:1.2.40
|    |    \--- org.jetbrains:annotations:13.0
|    +--- com.squareup.retrofit2:retrofit:2.3.0
|    |    \--- com.squareup.okhttp3:okhttp:3.8.0 -> 3.9.0
|    |         \--- com.squareup.okio:okio:1.13.0
|    +--- com.squareup.retrofit2:converter-gson:2.3.0
|    |    +--- com.squareup.retrofit2:retrofit:2.3.0 (*)
|    |    \--- com.google.code.gson:gson:2.7 -> 2.8.0
|    +--- com.squareup.retrofit2:converter-scalars:2.1.0
|    |    \--- com.squareup.retrofit2:retrofit:2.1.0 -> 2.3.0 (*)
|    +--- com.squareup.okhttp3:logging-interceptor:3.8.0
|    |    \--- com.squareup.okhttp3:okhttp:3.8.0 -> 3.9.0 (*)
|    +--- com.squareup.okhttp3:okhttp:3.9.0 (*)
|    +--- com.google.code.gson:gson:2.8.0
|    +--- org.jsoup:jsoup:1.10.3
|    \--- com.github.javafaker:javafaker:0.14
|         +--- org.apache.commons:commons-lang3:3.5
|         +--- org.yaml:snakeyaml:1.19
|         \--- com.github.mifmif:generex:1.0.2
|              \--- dk.brics.automaton:automaton:1.11-8
+--- io.grpc:grpc-netty:1.12.0
|    +--- io.grpc:grpc-core:[1.12.0] -> 1.12.0 (*)
|    +--- io.netty:netty-codec-http2:[4.1.22.Final] -> 4.1.22.Final
|    |    +--- io.netty:netty-codec-http:4.1.22.Final
|    |    |    \--- io.netty:netty-codec:4.1.22.Final
|    |    |         \--- io.netty:netty-transport:4.1.22.Final
|    |    |              +--- io.netty:netty-buffer:4.1.22.Final
|    |    |              |    \--- io.netty:netty-common:4.1.22.Final
|    |    |              \--- io.netty:netty-resolver:4.1.22.Final
|    |    |                   \--- io.netty:netty-common:4.1.22.Final
|    |    \--- io.netty:netty-handler:4.1.22.Final
|    |         +--- io.netty:netty-buffer:4.1.22.Final (*)
|    |         +--- io.netty:netty-transport:4.1.22.Final (*)
|    |         \--- io.netty:netty-codec:4.1.22.Final (*)
|    \--- io.netty:netty-handler-proxy:4.1.22.Final
|         +--- io.netty:netty-transport:4.1.22.Final (*)
|         +--- io.netty:netty-codec-socks:4.1.22.Final
|         |    \--- io.netty:netty-codec:4.1.22.Final (*)
|         \--- io.netty:netty-codec-http:4.1.22.Final (*)
+--- org.jetbrains.kotlin:kotlin-stdlib:1.2.40 (*)
\--- io.netty:netty-tcnative-boringssl-static:2.0.8.Final

implementation - Implementation only dependencies for source set 'main'. (n)
No dependencies

kapt
\--- org.jetbrains.kotlin:kotlin-annotation-processing-gradle:1.2.40
     +--- org.jetbrains.kotlin:kotlin-stdlib:1.2.40
     |    \--- org.jetbrains:annotations:13.0
     \--- org.jetbrains.kotlin:kotlin-compiler-embeddable:1.2.40
          +--- org.jetbrains.kotlin:kotlin-stdlib:1.2.40 (*)
          \--- org.jetbrains.kotlin:kotlin-script-runtime:1.2.40

kaptTest
\--- org.jetbrains.kotlin:kotlin-annotation-processing-gradle:1.2.40
     +--- org.jetbrains.kotlin:kotlin-stdlib:1.2.40
     |    \--- org.jetbrains:annotations:13.0
     \--- org.jetbrains.kotlin:kotlin-compiler-embeddable:1.2.40
          +--- org.jetbrains.kotlin:kotlin-stdlib:1.2.40 (*)
          \--- org.jetbrains.kotlin:kotlin-script-runtime:1.2.40

runtime - Runtime dependencies for source set 'main' (deprecated, use 'runtimeOnly ' instead).
+--- project :dataseedingapi
|    +--- io.grpc:grpc-protobuf-lite:1.6.1
|    |    +--- io.grpc:grpc-core:1.6.1 -> 1.12.0
|    |    |    +--- io.grpc:grpc-context:1.12.0
|    |    |    +--- com.google.code.gson:gson:2.7 -> 2.8.0
|    |    |    +--- com.google.guava:guava:20.0 -> 23.6.1-jre
|    |    |    |    +--- com.google.code.findbugs:jsr305:1.3.9 -> 3.0.0
|    |    |    |    +--- org.checkerframework:checker-compat-qual:2.0.0
|    |    |    |    +--- com.google.errorprone:error_prone_annotations:2.1.3
|    |    |    |    +--- com.google.j2objc:j2objc-annotations:1.1
|    |    |    |    \--- org.codehaus.mojo:animal-sniffer-annotations:1.14
|    |    |    +--- com.google.errorprone:error_prone_annotations:2.1.2 -> 2.1.3
|    |    |    +--- com.google.code.findbugs:jsr305:3.0.0
|    |    |    +--- io.opencensus:opencensus-api:0.11.0
|    |    |    \--- io.opencensus:opencensus-contrib-grpc-metrics:0.11.0
|    |    |         \--- io.opencensus:opencensus-api:0.11.0
|    |    +--- com.google.protobuf:protobuf-lite:3.0.1
|    |    \--- com.google.guava:guava:19.0 -> 23.6.1-jre (*)
|    +--- io.grpc:grpc-stub:1.6.1
|    |    \--- io.grpc:grpc-core:1.6.1 -> 1.12.0 (*)
|    +--- org.jetbrains.kotlin:kotlin-stdlib:1.2.40
|    |    \--- org.jetbrains:annotations:13.0
|    +--- com.squareup.retrofit2:retrofit:2.3.0
|    |    \--- com.squareup.okhttp3:okhttp:3.8.0 -> 3.9.0
|    |         \--- com.squareup.okio:okio:1.13.0
|    +--- com.squareup.retrofit2:converter-gson:2.3.0
|    |    +--- com.squareup.retrofit2:retrofit:2.3.0 (*)
|    |    \--- com.google.code.gson:gson:2.7 -> 2.8.0
|    +--- com.squareup.retrofit2:converter-scalars:2.1.0
|    |    \--- com.squareup.retrofit2:retrofit:2.1.0 -> 2.3.0 (*)
|    +--- com.squareup.okhttp3:logging-interceptor:3.8.0
|    |    \--- com.squareup.okhttp3:okhttp:3.8.0 -> 3.9.0 (*)
|    +--- com.squareup.okhttp3:okhttp:3.9.0 (*)
|    +--- com.google.code.gson:gson:2.8.0
|    +--- org.jsoup:jsoup:1.10.3
|    \--- com.github.javafaker:javafaker:0.14
|         +--- org.apache.commons:commons-lang3:3.5
|         +--- org.yaml:snakeyaml:1.19
|         \--- com.github.mifmif:generex:1.0.2
|              \--- dk.brics.automaton:automaton:1.11-8
+--- io.grpc:grpc-netty:1.12.0
|    +--- io.grpc:grpc-core:[1.12.0] -> 1.12.0 (*)
|    +--- io.netty:netty-codec-http2:[4.1.22.Final] -> 4.1.22.Final
|    |    +--- io.netty:netty-codec-http:4.1.22.Final
|    |    |    \--- io.netty:netty-codec:4.1.22.Final
|    |    |         \--- io.netty:netty-transport:4.1.22.Final
|    |    |              +--- io.netty:netty-buffer:4.1.22.Final
|    |    |              |    \--- io.netty:netty-common:4.1.22.Final
|    |    |              \--- io.netty:netty-resolver:4.1.22.Final
|    |    |                   \--- io.netty:netty-common:4.1.22.Final
|    |    \--- io.netty:netty-handler:4.1.22.Final
|    |         +--- io.netty:netty-buffer:4.1.22.Final (*)
|    |         +--- io.netty:netty-transport:4.1.22.Final (*)
|    |         \--- io.netty:netty-codec:4.1.22.Final (*)
|    \--- io.netty:netty-handler-proxy:4.1.22.Final
|         +--- io.netty:netty-transport:4.1.22.Final (*)
|         +--- io.netty:netty-codec-socks:4.1.22.Final
|         |    \--- io.netty:netty-codec:4.1.22.Final (*)
|         \--- io.netty:netty-codec-http:4.1.22.Final (*)
+--- org.jetbrains.kotlin:kotlin-stdlib:1.2.40 (*)
\--- io.netty:netty-tcnative-boringssl-static:2.0.8.Final

runtimeClasspath - Runtime classpath of source set 'main'.
+--- project :dataseedingapi
|    +--- io.grpc:grpc-protobuf-lite:1.6.1
|    |    +--- io.grpc:grpc-core:1.6.1 -> 1.12.0
|    |    |    +--- io.grpc:grpc-context:1.12.0
|    |    |    +--- com.google.code.gson:gson:2.7 -> 2.8.0
|    |    |    +--- com.google.guava:guava:20.0 -> 23.6.1-jre
|    |    |    |    +--- com.google.code.findbugs:jsr305:1.3.9 -> 3.0.0
|    |    |    |    +--- org.checkerframework:checker-compat-qual:2.0.0
|    |    |    |    +--- com.google.errorprone:error_prone_annotations:2.1.3
|    |    |    |    +--- com.google.j2objc:j2objc-annotations:1.1
|    |    |    |    \--- org.codehaus.mojo:animal-sniffer-annotations:1.14
|    |    |    +--- com.google.errorprone:error_prone_annotations:2.1.2 -> 2.1.3
|    |    |    +--- com.google.code.findbugs:jsr305:3.0.0
|    |    |    +--- io.opencensus:opencensus-api:0.11.0
|    |    |    \--- io.opencensus:opencensus-contrib-grpc-metrics:0.11.0
|    |    |         \--- io.opencensus:opencensus-api:0.11.0
|    |    +--- com.google.protobuf:protobuf-lite:3.0.1
|    |    \--- com.google.guava:guava:19.0 -> 23.6.1-jre (*)
|    +--- io.grpc:grpc-stub:1.6.1
|    |    \--- io.grpc:grpc-core:1.6.1 -> 1.12.0 (*)
|    +--- org.jetbrains.kotlin:kotlin-stdlib:1.2.40
|    |    \--- org.jetbrains:annotations:13.0
|    +--- com.squareup.retrofit2:retrofit:2.3.0
|    |    \--- com.squareup.okhttp3:okhttp:3.8.0 -> 3.9.0
|    |         \--- com.squareup.okio:okio:1.13.0
|    +--- com.squareup.retrofit2:converter-gson:2.3.0
|    |    +--- com.squareup.retrofit2:retrofit:2.3.0 (*)
|    |    \--- com.google.code.gson:gson:2.7 -> 2.8.0
|    +--- com.squareup.retrofit2:converter-scalars:2.1.0
|    |    \--- com.squareup.retrofit2:retrofit:2.1.0 -> 2.3.0 (*)
|    +--- com.squareup.okhttp3:logging-interceptor:3.8.0
|    |    \--- com.squareup.okhttp3:okhttp:3.8.0 -> 3.9.0 (*)
|    +--- com.squareup.okhttp3:okhttp:3.9.0 (*)
|    +--- com.google.code.gson:gson:2.8.0
|    +--- org.jsoup:jsoup:1.10.3
|    \--- com.github.javafaker:javafaker:0.14
|         +--- org.apache.commons:commons-lang3:3.5
|         +--- org.yaml:snakeyaml:1.19
|         \--- com.github.mifmif:generex:1.0.2
|              \--- dk.brics.automaton:automaton:1.11-8
+--- io.grpc:grpc-netty:1.12.0
|    +--- io.grpc:grpc-core:[1.12.0] -> 1.12.0 (*)
|    +--- io.netty:netty-codec-http2:[4.1.22.Final] -> 4.1.22.Final
|    |    +--- io.netty:netty-codec-http:4.1.22.Final
|    |    |    \--- io.netty:netty-codec:4.1.22.Final
|    |    |         \--- io.netty:netty-transport:4.1.22.Final
|    |    |              +--- io.netty:netty-buffer:4.1.22.Final
|    |    |              |    \--- io.netty:netty-common:4.1.22.Final
|    |    |              \--- io.netty:netty-resolver:4.1.22.Final
|    |    |                   \--- io.netty:netty-common:4.1.22.Final
|    |    \--- io.netty:netty-handler:4.1.22.Final
|    |         +--- io.netty:netty-buffer:4.1.22.Final (*)
|    |         +--- io.netty:netty-transport:4.1.22.Final (*)
|    |         \--- io.netty:netty-codec:4.1.22.Final (*)
|    \--- io.netty:netty-handler-proxy:4.1.22.Final
|         +--- io.netty:netty-transport:4.1.22.Final (*)
|         +--- io.netty:netty-codec-socks:4.1.22.Final
|         |    \--- io.netty:netty-codec:4.1.22.Final (*)
|         \--- io.netty:netty-codec-http:4.1.22.Final (*)
+--- org.jetbrains.kotlin:kotlin-stdlib:1.2.40 (*)
\--- io.netty:netty-tcnative-boringssl-static:2.0.8.Final

runtimeElements - Elements of runtime for main. (n)
No dependencies

runtimeOnly - Runtime only dependencies for source set 'main'. (n)
No dependencies

testAnnotationProcessor - Annotation processors and their dependencies for source set 'test'.
No dependencies

testCompile - Dependencies for source set 'test' (deprecated, use 'testImplementation ' instead).
+--- project :dataseedingapi
|    +--- io.grpc:grpc-protobuf-lite:1.6.1
|    |    +--- io.grpc:grpc-core:1.6.1 -> 1.12.0
|    |    |    +--- io.grpc:grpc-context:1.12.0
|    |    |    +--- com.google.code.gson:gson:2.7 -> 2.8.0
|    |    |    +--- com.google.guava:guava:20.0 -> 23.6.1-jre
|    |    |    |    +--- com.google.code.findbugs:jsr305:1.3.9 -> 3.0.0
|    |    |    |    +--- org.checkerframework:checker-compat-qual:2.0.0
|    |    |    |    +--- com.google.errorprone:error_prone_annotations:2.1.3
|    |    |    |    +--- com.google.j2objc:j2objc-annotations:1.1
|    |    |    |    \--- org.codehaus.mojo:animal-sniffer-annotations:1.14
|    |    |    +--- com.google.errorprone:error_prone_annotations:2.1.2 -> 2.1.3
|    |    |    +--- com.google.code.findbugs:jsr305:3.0.0
|    |    |    +--- io.opencensus:opencensus-api:0.11.0
|    |    |    \--- io.opencensus:opencensus-contrib-grpc-metrics:0.11.0
|    |    |         \--- io.opencensus:opencensus-api:0.11.0
|    |    +--- com.google.protobuf:protobuf-lite:3.0.1
|    |    \--- com.google.guava:guava:19.0 -> 23.6.1-jre (*)
|    +--- io.grpc:grpc-stub:1.6.1
|    |    \--- io.grpc:grpc-core:1.6.1 -> 1.12.0 (*)
|    +--- org.jetbrains.kotlin:kotlin-stdlib:1.2.40
|    |    \--- org.jetbrains:annotations:13.0
|    +--- com.squareup.retrofit2:retrofit:2.3.0
|    |    \--- com.squareup.okhttp3:okhttp:3.8.0 -> 3.9.0
|    |         \--- com.squareup.okio:okio:1.13.0
|    +--- com.squareup.retrofit2:converter-gson:2.3.0
|    |    +--- com.squareup.retrofit2:retrofit:2.3.0 (*)
|    |    \--- com.google.code.gson:gson:2.7 -> 2.8.0
|    +--- com.squareup.retrofit2:converter-scalars:2.1.0
|    |    \--- com.squareup.retrofit2:retrofit:2.1.0 -> 2.3.0 (*)
|    +--- com.squareup.okhttp3:logging-interceptor:3.8.0
|    |    \--- com.squareup.okhttp3:okhttp:3.8.0 -> 3.9.0 (*)
|    +--- com.squareup.okhttp3:okhttp:3.9.0 (*)
|    +--- com.google.code.gson:gson:2.8.0
|    +--- org.jsoup:jsoup:1.10.3
|    \--- com.github.javafaker:javafaker:0.14
|         +--- org.apache.commons:commons-lang3:3.5
|         +--- org.yaml:snakeyaml:1.19
|         \--- com.github.mifmif:generex:1.0.2
|              \--- dk.brics.automaton:automaton:1.11-8
+--- io.grpc:grpc-netty:1.12.0
|    +--- io.grpc:grpc-core:[1.12.0] -> 1.12.0 (*)
|    +--- io.netty:netty-codec-http2:[4.1.22.Final] -> 4.1.22.Final
|    |    +--- io.netty:netty-codec-http:4.1.22.Final
|    |    |    \--- io.netty:netty-codec:4.1.22.Final
|    |    |         \--- io.netty:netty-transport:4.1.22.Final
|    |    |              +--- io.netty:netty-buffer:4.1.22.Final
|    |    |              |    \--- io.netty:netty-common:4.1.22.Final
|    |    |              \--- io.netty:netty-resolver:4.1.22.Final
|    |    |                   \--- io.netty:netty-common:4.1.22.Final
|    |    \--- io.netty:netty-handler:4.1.22.Final
|    |         +--- io.netty:netty-buffer:4.1.22.Final (*)
|    |         +--- io.netty:netty-transport:4.1.22.Final (*)
|    |         \--- io.netty:netty-codec:4.1.22.Final (*)
|    \--- io.netty:netty-handler-proxy:4.1.22.Final
|         +--- io.netty:netty-transport:4.1.22.Final (*)
|         +--- io.netty:netty-codec-socks:4.1.22.Final
|         |    \--- io.netty:netty-codec:4.1.22.Final (*)
|         \--- io.netty:netty-codec-http:4.1.22.Final (*)
+--- org.jetbrains.kotlin:kotlin-stdlib:1.2.40 (*)
+--- io.netty:netty-tcnative-boringssl-static:2.0.8.Final
\--- junit:junit:4.12
     \--- org.hamcrest:hamcrest-core:1.3

testCompileClasspath - Compile classpath for source set 'test'.
+--- project :dataseedingapi
|    +--- io.grpc:grpc-protobuf-lite:1.6.1
|    |    +--- io.grpc:grpc-core:1.6.1 -> 1.12.0
|    |    |    +--- io.grpc:grpc-context:1.12.0
|    |    |    +--- com.google.code.gson:gson:2.7
|    |    |    +--- com.google.guava:guava:20.0 -> 23.6.1-jre
|    |    |    |    +--- com.google.code.findbugs:jsr305:1.3.9 -> 3.0.0
|    |    |    |    +--- org.checkerframework:checker-compat-qual:2.0.0
|    |    |    |    +--- com.google.errorprone:error_prone_annotations:2.1.3
|    |    |    |    +--- com.google.j2objc:j2objc-annotations:1.1
|    |    |    |    \--- org.codehaus.mojo:animal-sniffer-annotations:1.14
|    |    |    +--- com.google.errorprone:error_prone_annotations:2.1.2 -> 2.1.3
|    |    |    +--- com.google.code.findbugs:jsr305:3.0.0
|    |    |    +--- io.opencensus:opencensus-api:0.11.0
|    |    |    \--- io.opencensus:opencensus-contrib-grpc-metrics:0.11.0
|    |    |         \--- io.opencensus:opencensus-api:0.11.0
|    |    +--- com.google.protobuf:protobuf-lite:3.0.1
|    |    \--- com.google.guava:guava:19.0 -> 23.6.1-jre (*)
|    \--- io.grpc:grpc-stub:1.6.1
|         \--- io.grpc:grpc-core:1.6.1 -> 1.12.0 (*)
+--- io.grpc:grpc-netty:1.12.0
|    +--- io.grpc:grpc-core:[1.12.0] -> 1.12.0 (*)
|    +--- io.netty:netty-codec-http2:[4.1.22.Final] -> 4.1.22.Final
|    |    +--- io.netty:netty-codec-http:4.1.22.Final
|    |    |    \--- io.netty:netty-codec:4.1.22.Final
|    |    |         \--- io.netty:netty-transport:4.1.22.Final
|    |    |              +--- io.netty:netty-buffer:4.1.22.Final
|    |    |              |    \--- io.netty:netty-common:4.1.22.Final
|    |    |              \--- io.netty:netty-resolver:4.1.22.Final
|    |    |                   \--- io.netty:netty-common:4.1.22.Final
|    |    \--- io.netty:netty-handler:4.1.22.Final
|    |         +--- io.netty:netty-buffer:4.1.22.Final (*)
|    |         +--- io.netty:netty-transport:4.1.22.Final (*)
|    |         \--- io.netty:netty-codec:4.1.22.Final (*)
|    \--- io.netty:netty-handler-proxy:4.1.22.Final
|         +--- io.netty:netty-transport:4.1.22.Final (*)
|         +--- io.netty:netty-codec-socks:4.1.22.Final
|         |    \--- io.netty:netty-codec:4.1.22.Final (*)
|         \--- io.netty:netty-codec-http:4.1.22.Final (*)
+--- org.jetbrains.kotlin:kotlin-stdlib:1.2.40
|    \--- org.jetbrains:annotations:13.0
+--- io.netty:netty-tcnative-boringssl-static:2.0.8.Final
\--- junit:junit:4.12
     \--- org.hamcrest:hamcrest-core:1.3

testCompileOnly - Compile only dependencies for source set 'test'.
No dependencies

testImplementation - Implementation only dependencies for source set 'test'. (n)
No dependencies

testRuntime - Runtime dependencies for source set 'test' (deprecated, use 'testRuntimeOnly ' instead).
+--- project :dataseedingapi
|    +--- io.grpc:grpc-protobuf-lite:1.6.1
|    |    +--- io.grpc:grpc-core:1.6.1 -> 1.12.0
|    |    |    +--- io.grpc:grpc-context:1.12.0
|    |    |    +--- com.google.code.gson:gson:2.7 -> 2.8.0
|    |    |    +--- com.google.guava:guava:20.0 -> 23.6.1-jre
|    |    |    |    +--- com.google.code.findbugs:jsr305:1.3.9 -> 3.0.0
|    |    |    |    +--- org.checkerframework:checker-compat-qual:2.0.0
|    |    |    |    +--- com.google.errorprone:error_prone_annotations:2.1.3
|    |    |    |    +--- com.google.j2objc:j2objc-annotations:1.1
|    |    |    |    \--- org.codehaus.mojo:animal-sniffer-annotations:1.14
|    |    |    +--- com.google.errorprone:error_prone_annotations:2.1.2 -> 2.1.3
|    |    |    +--- com.google.code.findbugs:jsr305:3.0.0
|    |    |    +--- io.opencensus:opencensus-api:0.11.0
|    |    |    \--- io.opencensus:opencensus-contrib-grpc-metrics:0.11.0
|    |    |         \--- io.opencensus:opencensus-api:0.11.0
|    |    +--- com.google.protobuf:protobuf-lite:3.0.1
|    |    \--- com.google.guava:guava:19.0 -> 23.6.1-jre (*)
|    +--- io.grpc:grpc-stub:1.6.1
|    |    \--- io.grpc:grpc-core:1.6.1 -> 1.12.0 (*)
|    +--- org.jetbrains.kotlin:kotlin-stdlib:1.2.40
|    |    \--- org.jetbrains:annotations:13.0
|    +--- com.squareup.retrofit2:retrofit:2.3.0
|    |    \--- com.squareup.okhttp3:okhttp:3.8.0 -> 3.9.0
|    |         \--- com.squareup.okio:okio:1.13.0
|    +--- com.squareup.retrofit2:converter-gson:2.3.0
|    |    +--- com.squareup.retrofit2:retrofit:2.3.0 (*)
|    |    \--- com.google.code.gson:gson:2.7 -> 2.8.0
|    +--- com.squareup.retrofit2:converter-scalars:2.1.0
|    |    \--- com.squareup.retrofit2:retrofit:2.1.0 -> 2.3.0 (*)
|    +--- com.squareup.okhttp3:logging-interceptor:3.8.0
|    |    \--- com.squareup.okhttp3:okhttp:3.8.0 -> 3.9.0 (*)
|    +--- com.squareup.okhttp3:okhttp:3.9.0 (*)
|    +--- com.google.code.gson:gson:2.8.0
|    +--- org.jsoup:jsoup:1.10.3
|    \--- com.github.javafaker:javafaker:0.14
|         +--- org.apache.commons:commons-lang3:3.5
|         +--- org.yaml:snakeyaml:1.19
|         \--- com.github.mifmif:generex:1.0.2
|              \--- dk.brics.automaton:automaton:1.11-8
+--- io.grpc:grpc-netty:1.12.0
|    +--- io.grpc:grpc-core:[1.12.0] -> 1.12.0 (*)
|    +--- io.netty:netty-codec-http2:[4.1.22.Final] -> 4.1.22.Final
|    |    +--- io.netty:netty-codec-http:4.1.22.Final
|    |    |    \--- io.netty:netty-codec:4.1.22.Final
|    |    |         \--- io.netty:netty-transport:4.1.22.Final
|    |    |              +--- io.netty:netty-buffer:4.1.22.Final
|    |    |              |    \--- io.netty:netty-common:4.1.22.Final
|    |    |              \--- io.netty:netty-resolver:4.1.22.Final
|    |    |                   \--- io.netty:netty-common:4.1.22.Final
|    |    \--- io.netty:netty-handler:4.1.22.Final
|    |         +--- io.netty:netty-buffer:4.1.22.Final (*)
|    |         +--- io.netty:netty-transport:4.1.22.Final (*)
|    |         \--- io.netty:netty-codec:4.1.22.Final (*)
|    \--- io.netty:netty-handler-proxy:4.1.22.Final
|         +--- io.netty:netty-transport:4.1.22.Final (*)
|         +--- io.netty:netty-codec-socks:4.1.22.Final
|         |    \--- io.netty:netty-codec:4.1.22.Final (*)
|         \--- io.netty:netty-codec-http:4.1.22.Final (*)
+--- org.jetbrains.kotlin:kotlin-stdlib:1.2.40 (*)
+--- io.netty:netty-tcnative-boringssl-static:2.0.8.Final
\--- junit:junit:4.12
     \--- org.hamcrest:hamcrest-core:1.3

testRuntimeClasspath - Runtime classpath of source set 'test'.
+--- project :dataseedingapi
|    +--- io.grpc:grpc-protobuf-lite:1.6.1
|    |    +--- io.grpc:grpc-core:1.6.1 -> 1.12.0
|    |    |    +--- io.grpc:grpc-context:1.12.0
|    |    |    +--- com.google.code.gson:gson:2.7 -> 2.8.0
|    |    |    +--- com.google.guava:guava:20.0 -> 23.6.1-jre
|    |    |    |    +--- com.google.code.findbugs:jsr305:1.3.9 -> 3.0.0
|    |    |    |    +--- org.checkerframework:checker-compat-qual:2.0.0
|    |    |    |    +--- com.google.errorprone:error_prone_annotations:2.1.3
|    |    |    |    +--- com.google.j2objc:j2objc-annotations:1.1
|    |    |    |    \--- org.codehaus.mojo:animal-sniffer-annotations:1.14
|    |    |    +--- com.google.errorprone:error_prone_annotations:2.1.2 -> 2.1.3
|    |    |    +--- com.google.code.findbugs:jsr305:3.0.0
|    |    |    +--- io.opencensus:opencensus-api:0.11.0
|    |    |    \--- io.opencensus:opencensus-contrib-grpc-metrics:0.11.0
|    |    |         \--- io.opencensus:opencensus-api:0.11.0
|    |    +--- com.google.protobuf:protobuf-lite:3.0.1
|    |    \--- com.google.guava:guava:19.0 -> 23.6.1-jre (*)
|    +--- io.grpc:grpc-stub:1.6.1
|    |    \--- io.grpc:grpc-core:1.6.1 -> 1.12.0 (*)
|    +--- org.jetbrains.kotlin:kotlin-stdlib:1.2.40
|    |    \--- org.jetbrains:annotations:13.0
|    +--- com.squareup.retrofit2:retrofit:2.3.0
|    |    \--- com.squareup.okhttp3:okhttp:3.8.0 -> 3.9.0
|    |         \--- com.squareup.okio:okio:1.13.0
|    +--- com.squareup.retrofit2:converter-gson:2.3.0
|    |    +--- com.squareup.retrofit2:retrofit:2.3.0 (*)
|    |    \--- com.google.code.gson:gson:2.7 -> 2.8.0
|    +--- com.squareup.retrofit2:converter-scalars:2.1.0
|    |    \--- com.squareup.retrofit2:retrofit:2.1.0 -> 2.3.0 (*)
|    +--- com.squareup.okhttp3:logging-interceptor:3.8.0
|    |    \--- com.squareup.okhttp3:okhttp:3.8.0 -> 3.9.0 (*)
|    +--- com.squareup.okhttp3:okhttp:3.9.0 (*)
|    +--- com.google.code.gson:gson:2.8.0
|    +--- org.jsoup:jsoup:1.10.3
|    \--- com.github.javafaker:javafaker:0.14
|         +--- org.apache.commons:commons-lang3:3.5
|         +--- org.yaml:snakeyaml:1.19
|         \--- com.github.mifmif:generex:1.0.2
|              \--- dk.brics.automaton:automaton:1.11-8
+--- io.grpc:grpc-netty:1.12.0
|    +--- io.grpc:grpc-core:[1.12.0] -> 1.12.0 (*)
|    +--- io.netty:netty-codec-http2:[4.1.22.Final] -> 4.1.22.Final
|    |    +--- io.netty:netty-codec-http:4.1.22.Final
|    |    |    \--- io.netty:netty-codec:4.1.22.Final
|    |    |         \--- io.netty:netty-transport:4.1.22.Final
|    |    |              +--- io.netty:netty-buffer:4.1.22.Final
|    |    |              |    \--- io.netty:netty-common:4.1.22.Final
|    |    |              \--- io.netty:netty-resolver:4.1.22.Final
|    |    |                   \--- io.netty:netty-common:4.1.22.Final
|    |    \--- io.netty:netty-handler:4.1.22.Final
|    |         +--- io.netty:netty-buffer:4.1.22.Final (*)
|    |         +--- io.netty:netty-transport:4.1.22.Final (*)
|    |         \--- io.netty:netty-codec:4.1.22.Final (*)
|    \--- io.netty:netty-handler-proxy:4.1.22.Final
|         +--- io.netty:netty-transport:4.1.22.Final (*)
|         +--- io.netty:netty-codec-socks:4.1.22.Final
|         |    \--- io.netty:netty-codec:4.1.22.Final (*)
|         \--- io.netty:netty-codec-http:4.1.22.Final (*)
+--- org.jetbrains.kotlin:kotlin-stdlib:1.2.40 (*)
+--- io.netty:netty-tcnative-boringssl-static:2.0.8.Final
\--- junit:junit:4.12
     \--- org.hamcrest:hamcrest-core:1.3

testRuntimeOnly - Runtime only dependencies for source set 'test'. (n)
No dependencies

(*) - dependencies omitted (listed previously)

A web-based, searchable dependency report is available by adding the --scan option.

BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed

@bootstraponline
Copy link
Contributor Author

bootstraponline commented Jul 13, 2018

Buildscript modification is also resulting in the same error:

buildscript {

    repositories {
        mavenCentral()
    }

    dependencies {
        classpath "com.google.guava:guava:23.6.1-jre"
        classpath Plugins.KOTLIN
    }
}

@loosebazooka
Copy link
Member

loosebazooka commented Jul 13, 2018

Ah sorry, I should have been more clear, the buildscript classpath is separate from your application, it's the classpath of the instance of gradle+plugins building your application. But it looks like you covered it anyway in : #591 (comment)

I still think it could be a buildscript dependency issue:

  1. Can you run gradle buildEnvironment and see what the output is?
  2. I'm not familiar with Plugins.KOTLIN, what is that referencing? Can you point me to where you found that?
  3. Do you have a parent build.gradle that is bringing in buildscript dependencies?

@bootstraponline
Copy link
Contributor Author

Can you run gradle buildEnvironment and see what the output is?

gradle buildEnvironment
------------------------------------------------------------
Root project
------------------------------------------------------------

classpath
+--- com.google.guava:guava:23.6.1-jre
| +--- com.google.code.findbugs:jsr305:1.3.9
| +--- org.checkerframework:checker-compat-qual:2.0.0
| +--- com.google.errorprone:error_prone_annotations:2.1.3
| +--- com.google.j2objc:j2objc-annotations:1.1
| --- org.codehaus.mojo:animal-sniffer-annotations:1.14
+--- org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.40
| +--- org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.2.40
| | --- org.jetbrains.kotlin:kotlin-stdlib:1.2.40
| | --- org.jetbrains:annotations:13.0
| +--- org.jetbrains.kotlin:kotlin-stdlib:1.2.40 ()
| +--- org.jetbrains.kotlin:kotlin-compiler-embeddable:1.2.40
| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.2.40 (
)
| | --- org.jetbrains.kotlin:kotlin-script-runtime:1.2.40
| +--- org.jetbrains.kotlin:kotlin-annotation-processing-gradle:1.2.40
| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.2.40 ()
| | --- org.jetbrains.kotlin:kotlin-compiler-embeddable:1.2.40 (
)
| +--- org.jetbrains.kotlin:kotlin-android-extensions:1.2.40
| | --- org.jetbrains.kotlin:kotlin-compiler-embeddable:1.2.40 ()
| +--- org.jetbrains.kotlin:kotlin-compiler-runner:1.2.40
| | +--- org.jetbrains.kotlin:kotlin-build-common:1.2.40
| | --- org.jetbrains.kotlin:kotlin-daemon-client:1.2.40
| --- org.jetbrains.kotlin:kotlin-reflect:1.2.40
| --- org.jetbrains.kotlin:kotlin-stdlib:1.2.40 (
)
--- com.google.cloud.tools.jib:com.google.cloud.tools.jib.gradle.plugin:0.9.6
--- gradle.plugin.com.google.cloud.tools:jib-gradle-plugin:0.9.6
+--- com.google.http-client:google-http-client:1.23.0
| +--- com.google.code.findbugs:jsr305:1.3.9
| --- org.apache.httpcomponents:httpclient:4.0.1
| +--- org.apache.httpcomponents:httpcore:4.0.1
| +--- commons-logging:commons-logging:1.1.1
| --- commons-codec:commons-codec:1.3
+--- org.apache.commons:commons-compress:1.17
+--- com.google.guava:guava:23.5-jre -> 23.6.1-jre (*)
+--- com.fasterxml.jackson.core:jackson-databind:2.9.6
| +--- com.fasterxml.jackson.core:jackson-annotations:2.9.0
| --- com.fasterxml.jackson.core:jackson-core:2.9.6
+--- org.slf4j:slf4j-api:1.7.25
--- org.javassist:javassist:3.22.0-GA

(*) - dependencies omitted (listed previously)

A web-based, searchable dependency report is available by adding the --scan option.

BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed

I'm not familiar with Plugins.KOTLIN, what is that referencing? Can you point me to where you found that?

GlobalDependencies.kt#L80 defines Plugins.KOTLIN in the buildSrc symlink.

Do you have a parent build.gradle that is bringing in buildscript dependencies?

This is an older release, however it's the same project I'm working on:

I'll see if I can update the open source to get a reproducible example.

@loosebazooka
Copy link
Member

loosebazooka commented Jul 13, 2018

So there is a quirk of gradle where a parent build classpath take priority over a child buildscript classpath (https://discuss.gradle.org/t/version-is-root-build-gradle-buildscript-is-overriding-subproject-buildscript-dependency-versions/20746)

The protobuf-gradle-plugin in the soseedgrpc and dataseedingapi projects appears to be pulling in guava:18 see: https://github.com/google/protobuf-gradle-plugin/blob/master/build.gradle#L68

Now, if my assumptions are correct, you might be able to fix this by putting the guava version override in your root bulid.gradle (in buildscript classpath above other dependencies)

@bootstraponline
Copy link
Contributor Author

bootstraponline commented Jul 13, 2018

you might be able to fix this by putting the guava version override in your root bulid.gradle (in buildscript classpath above other dependencies)

I put

buildscript {
    repositories {
        mavenCentral()
    }
    
    dependencies {
        classpath("com.google.guava:guava:23.6.1-jre")
    }
}

at the top of all the build.gradle files and it didn't help. 😭

@bootstraponline
Copy link
Contributor Author

image

I even tried a resolution strategy in the buildscript

@bootstraponline
Copy link
Contributor Author

I think jib may want to shade guava.

@loosebazooka
Copy link
Member

Any chance you could provide a minimal project so I can analyze the problem on my machine?

@bootstraponline
Copy link
Contributor Author

bootstraponline commented Jul 13, 2018

Any chance you could provide a minimal project so I can analyze the problem on my machine?

  1. git clone https://github.com/instructure/instructure-android.git
  2. cd instructure-android/automation/soseedygrpc
  3. gradle jib

That reproduces the problem using the open source version. Note that gradle is used directly instead of gradlew

@ejona86
Copy link

ejona86 commented Jul 13, 2018

@bootstraponline, it would have been really helpful if the gradlew was the correct version. I ended up disabling jib to update the gradle wrapper and then re-enabling jib.

@bootstraponline
Copy link
Contributor Author

@bootstraponline, it would have been really helpful if the gradlew was the correct version

Yeah it is in the private repo. Unfortunately updating gradle in the public one breaks all the builds. I am working on a better process for our open source code so it's possible to keep up to date. I couldn't get the error to reproduce on a sample project.

@bootstraponline
Copy link
Contributor Author

There are some updates on the other thread:

It looks like protobuf-gradle-plugin is not the issue. It's not clear to me how to resolve the problem.

@loosebazooka
Copy link
Member

Right, the problem is dealing with how gradle resolves buildscript classpath dependencies, and not a problem with the protobuf plugin itself.

One more clue in this problem is that it looks like ImmutableList is being loaded from guava-22?!, that doesn't really make sense to me.

I'm seeing this info using code from this example. Just put it in your build.gradle and have it execute.

Class klass = com.google.common.collect.ImmutableList.class;
URL location = klass.getResource('/' + klass.getName().replace('.', '/') + ".class");
println "ImmutableClass from: " + location

run ./gradlew tasks or gradle tasks and you'll see the output

ImmutableList from:jar:file:/user-home/.gradle./caches/modules-2/files-2.1/com.google.guava/guava/22.0/3564ef3803de51fb0530a8377ec6100b33b0d073/guava-22.0.jar!/com/google/common/collect/ImmutableList.class

I still can't figure out why this is being loaded in, when all buildscript info is pointing to 23.5-jre. I might need to take a deeper look into buildscript deps.

@loosebazooka
Copy link
Member

okay, so I just saw @ejona86's reference to a core gradle bug about guava leaking in gradle/gradle#3698. But it's weird that we're only seeing this intermittently (just your project?).

@bootstraponline
Copy link
Contributor Author

bootstraponline commented Jul 16, 2018

But it's weird that we're only seeing this intermittently (just your project?).

Yeah, I have no idea why it's only my project that triggers the gradle core issue.

I'm getting the same output from the code snippet:

ImmutableClass from: jar:file:/Users/user/.gradle/caches/modules-2/files-2.1/com.google.guava/guava/22.0/3564ef3803de51fb0530a8377ec6100b33b0d073/guava-22.0.jar!/com/google/common/collect/ImmutableList.class

I am working with our Android team to update the open source repo. I think for now I'll have to use the distroless docker images directly. I'm worried about adding a bunch of complexity that can't be easily debugged or fixed. I wish Gradle didn't have so many sharp corners.

Thanks for your help in investigating the problem!

@coollog
Copy link
Contributor

coollog commented Aug 3, 2018

Closing - feel free to reopen if you have any further questions!

@coollog coollog closed this as completed Aug 3, 2018
@remmeier
Copy link

I'm currently running into the same issue. While overriding guava is a Gradle issue, I think it would still be great if the plugin could either eliminate the guava third-party dependency or shade it along the line of https://github.com/project-aries/docker-java-shaded to become standalone again and works regardless of what other plugins are in use.

@mvysny
Copy link

mvysny commented Mar 29, 2019

@coollog is a workaround known please? I've skimmed through this bug but nothing seems to be working for me. The steps to reproduce are easy:

  1. git clone https://github.com/mvysny/karibu-helloworld-application
  2. edit the plugins {} stanza and add id("com.google.cloud.tools.jib") version "1.0.2"
  3. ./gradlew clean jib --image=test/karibu-helloworld-app

slovdahl's workaround of excluding guava in buildscript{} unfortunately doesn't seem to work. Adding compile 'com.google.guava:guava:23.6-jre' dependency doesn't work. I understand it's a bug in Gradle but it has been there for quite some time...

@chanseokoh
Copy link
Member

Hi @mvysny,

I think your issue is different from this. I put the following at the top of your build.gradle.kts to let the buildscript use Guava 27.0.1-jre (the one that Jib 1.0.2 uses), and it works.

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath("com.google.guava:guava:27.0.1-jre")
    }
}
chanseok@chanseok1:~/tmp/karibu-helloworld-application (master)$ ./gradlew jib --image=francium25/test --stacktrace

> Configure project :
Using Gradle Vaadin Plugin 1.4.1

Containerizing application to francium25/test...

Container entrypoint set to [/usr/bin/java, -jar] (inherited from base image)
Container program arguments set to [/jetty/start.jar] (inherited from base image)

Built and pushed image as francium25/test
Executing tasks:
[==============================] 100.0% complete


Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/5.2.1/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 9s
9 actionable tasks: 7 executed, 2 up-to-date
chanseok@chanseok1:~/tmp/karibu-helloworld-application (master)$ 

@chanseokoh
Copy link
Member

@mvysny your sample program works well too:

$ docker run --rm -it -p8080:8080 francium25/test
$ curl localhost:8080
<!doctype html>
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=11">
  <style type="text/css">html, body {height:100%;margin:0;}</style>

@mvysny
Copy link

mvysny commented Mar 29, 2019

@chanseokoh awesome, your suggestion also worked for me! Thank you :)

@sergeykad
Copy link

I experience this issue with Gradle 5.6.2. The mentioned gradle/gradle#3698 bug supposed to be fixed there already.

Adding Guava dependency in the buildscript block does not fix the problem either.

@chanseokoh
Copy link
Member

chanseokoh commented Oct 24, 2019

Hi @sergeykad, recent Jib versions use Guava 28. Try forcing guava 28.0-jre by following #1390 (comment). If it doesn't work, could you provide us a small sample that reproduces the issue (e.g., like #591 (comment))?

@sergeykad
Copy link

@chanseokoh I tried it now, but no dice.

BTW I use guava 28.0-jre in my project too. I will try to create a sample next week.

@sergeykad
Copy link

Running gradle buildEnvironment helped to find the problem. The parent build.gradle file have the following:

buildscript {
    repositories { jcenter() }
    dependencies {
       classpath 'com.netflix.nebula:gradle-lint-plugin:latest.release'
    }
}

The gradle-lint-plugin uses guava 19.0. As soon as I removed it, guava version jumped to the correct one.
The question is it somehow possible to use the both plugins or I have to choose one?

@chanseokoh
Copy link
Member

chanseokoh commented Oct 24, 2019

Running gradle buildEnvironment helped to find the problem.

Ah, great! I have been looking for this command for months. Thanks for the tip.

And I just realized #591 (comment) doesn't force a certain Guava version. See #1390 (comment) for the force = true usage. Perhaps you need to apply this to the parent build.gradle where gradle-lint-plugin is defined.

If that fails, you can explicitly exclude Guava from the plugin:

    classpath('com.netflix.nebula:gradle-lint-plugin:latest.release') {
      exclude group: 'com.google.guava', module: 'guava'
    }

@loosebazooka
Copy link
Member

I believe you can just include it with the Netflix nebula dependency (instead of at the subproject level) and it should work. Subproject buildscript dependencies can't override parent ones.

@thyming
Copy link

thyming commented Oct 29, 2019

For others that run into this issue and the above doesn't help, I found in my own build that dependencies forced in the main build in

buildscript {
    dependencies {
    ...
    }
}

would be ignored if they are already resolved from dependencies declared in the buildSrc/build.gradle. So make sure that the dependency conflict is resolved there if you have a buildSrc build.gradle file.

@chanseokoh
Copy link
Member

dependencies forced in the main build ... would be ignored if they are already resolved ...
So make sure that the dependency conflict is resolved there

Aha, this makes a lot of sense. That also explains why you cannot override parent dependencies from subproject buildscripts. Thanks for the tip!

@sgammon
Copy link

sgammon commented Dec 16, 2023

Hello from 2023:

Caused by: java.lang.NoSuchMethodError: 'java.util.stream.Collector com.google.common.collect.ImmutableList.toImmutableList()'
        at com.google.cloud.tools.jib.filesystem.DirectoryWalker.walk(DirectoryWalker.java:93)
        at com.google.cloud.tools.jib.filesystem.DirectoryWalker.walk(DirectoryWalker.java:78)
        at com.google.cloud.tools.jib.api.JavaContainerBuilder.addDirectoryContentsToLayer(JavaContainerBuilder.java:716)
        at com.google.cloud.tools.jib.api.JavaContainerBuilder.toContainerBuilder(JavaContainerBuilder.java:562)
        at com.google.cloud.tools.jib.gradle.GradleProjectProperties.createJibContainerBuilder(GradleProjectProperties.java:282)
        at com.google.cloud.tools.jib.plugins.common.PluginConfigurationProcessor.processCommonConfiguration(PluginConfigurationProcessor.java:430)
        at com.google.cloud.tools.jib.plugins.common.PluginConfigurationProcessor.processCommonConfiguration(PluginConfigurationProcessor.java:490)
        at com.google.cloud.tools.jib.plugins.common.PluginConfigurationProcessor.createJibBuildRunnerForRegistryImage(PluginConfigurationProcessor.java:309)
        at com.google.cloud.tools.jib.gradle.BuildImageTask.buildImage(BuildImageTask.java:116)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)

This should probably be re-opened and a fresh look given at shading

@chanseokoh
Copy link
Member

@sgammon take a look at this FAQ. You should set up your project exactly as described there.

@sgammon
Copy link

sgammon commented Dec 17, 2023

@chanseokoh we are authors of Gradle plugins ourselves so classpath issues are pretty familiar

We've seen the FAQ and followed all possible options, as well as in this thread, with no success. Our project structure is a bit different than what we've seen here, though.

@sgammon
Copy link

sgammon commented Dec 17, 2023

Can I politely ask why you don't choose to shade Guava? It has caused so many issues for us with Jib, and it is a relatively small dependency. We would be very in favor of shading as a possible fix. gRPC shades the entirety of Netty to avoid similar issues and this seems less costly by comparison.

@chanseokoh
Copy link
Member

Do note that Gradle has a bug where its buildEnv reports wrong info. The reason you are hitting the error is that your project loaded a wrong version of Guava, which you can definitely fix.

I am not in the position to answer why Jib doesn't shade its dependences, sorry.

@loosebazooka
Copy link
Member

We've generally tried to avoid shading. Is jib at too old a version or too new a version of guava?

@sgammon
Copy link

sgammon commented Dec 18, 2023

@chanseokoh

Do note that Gradle has a bug where its buildEnv reports wrong info. The reason you are hitting the error is that your project loaded a wrong version of Guava, which you can definitely fix.

Thank you, yes, I know. It is not easily fixable, though, because, as you say, the effective buildEnv dependencies for a sufficiently complex Gradle project aren't immediately clear, and sometimes it is hard to gain control over them. In our case we have several places this incorrect dependency could be coming from; these include, but are not limited to: a buildSrc project, several included (composite) builds, several suspect plugins, and the buildscript classpath itself.

Altogether these conditions make this bug nearly impossible to solve for regular users or even skilled users like us.

@loosebazooka

We've generally tried to avoid shading. Is jib at too old a version or too new a version of guava?

It's a NoSuchMethodError on something introduced in Guava 21.0. I honestly couldn't tell you, because AFAIK Guava makes every attempt not to delete symbols, and that would suggest a rather ancient version of Guava leaking onto the classpath. FWIW we are on latest in our own apps but those don't seem to be making it into the classpath so it's a moot point.

We've generally tried to avoid shading.

I understand this will increase the size of the shipped JAR and of course adds build complexity, but we are completely unable to push images for our app at the moment, since we relied on Jib to do that and now it is broken. This is only Jib's fault insofar as it relies on a stable version of Guava which works with transitive dependencies and is unshaded. The only part under Jib's control is to shade/not shade, then, since Gradle isn't reliably handling these dependencies, even at latest (we're on 8.5).

We could get something else working, but Jib's responsibility at this pivotal juncture means we are unlikely to come back to it even though we love it. I.e. the pain of working around this bug is more than the benefit offered by the library, in some cases.

This can sneak into a build pretty easily, because people often don't run Jib until it is time to deploy (since pushing and storing containers is costly!). So, you work for a few days/weeks/months, then go to deploy, and now you hit this bug. What happened along the way to shift your Guava version, in the last N commits? The answer is very hard to locate, as it turns out.

I'm just saying that, as a user journey, it doesn't get any worse than a confusing and broken experience. Ultimately, the few-megabytes of shading starts to look smaller and smaller from where we stand, but again this is just one user's perspective, having used Jib since the very beginning.

@sgammon
Copy link

sgammon commented Dec 18, 2023

(One more note: I've now observed this very same bug in a completely unrelated Android project. I'll try to isolate there as it might yield clues to what is causing this with Jib. Literally the same exact symbol and exception, but over here, when adding libs.plugins.android.library to a common module).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

10 participants