GoogleContainerTools / jib

🏗 Build container images for your Java applications.
Apache License 2.0
13.65k stars 1.44k forks source link

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

Closed bootstraponline closed 6 years ago

bootstraponline commented 6 years ago

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:

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 commented 6 years ago

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

loosebazooka commented 6 years ago

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 commented 6 years ago

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

bootstraponline commented 6 years ago

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 commented 6 years ago

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 commented 6 years ago

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 : https://github.com/GoogleContainerTools/jib/issues/591#issuecomment-404698414

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 commented 6 years ago

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 commented 6 years ago

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 commented 6 years ago

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 commented 6 years ago

image

I even tried a resolution strategy in the buildscript

bootstraponline commented 6 years ago

I think jib may want to shade guava.

loosebazooka commented 6 years ago

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

bootstraponline commented 6 years ago

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 commented 6 years ago

@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 commented 6 years ago

@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 commented 6 years ago

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 commented 6 years ago

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 fromguava-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 commented 6 years ago

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

bootstraponline commented 6 years ago

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 commented 6 years ago

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

remmeier commented 5 years ago

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 commented 5 years ago

@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 commented 5 years ago

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 commented 5 years ago

@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 commented 5 years ago

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

sergeykad commented 4 years ago

I experience this issue with Gradle 5.6.2. The mentioned https://github.com/gradle/gradle/issues/3698 bug supposed to be fixed there already.

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

chanseokoh commented 4 years ago

Hi @sergeykad, recent Jib versions use Guava 28. Try forcing guava 28.0-jre by following https://github.com/GoogleContainerTools/jib/issues/1390#issuecomment-451286883. If it doesn't work, could you provide us a small sample that reproduces the issue (e.g., like https://github.com/GoogleContainerTools/jib/issues/591#issuecomment-477897568)?

sergeykad commented 4 years ago

@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 commented 4 years ago

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 commented 4 years ago

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 https://github.com/GoogleContainerTools/jib/issues/591#issuecomment-478027065 doesn't force a certain Guava version. See https://github.com/GoogleContainerTools/jib/issues/1390#issuecomment-451286883 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 commented 4 years ago

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 commented 4 years ago

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 commented 4 years ago

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 commented 10 months ago

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 commented 10 months ago

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

sgammon commented 10 months ago

@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 commented 10 months ago

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 commented 10 months ago

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 commented 10 months ago

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

sgammon commented 10 months ago

@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 commented 10 months ago

(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).