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

2.39.0 release broke java compilation on my project #1167

Closed
tomkozlowski opened this issue Jan 13, 2020 · 7 comments
Closed

2.39.0 release broke java compilation on my project #1167

tomkozlowski opened this issue Jan 13, 2020 · 7 comments

Comments

@tomkozlowski
Copy link

What happened?

The change in #1085 appears to have broken my usage in a kotlin project during the compileJava step:

Picked up _JAVA_OPTIONS: -Dorg.gradle.internal.launcher.welcomeMessageEnabled=false -Xmx8192m
An exception has occurred in the compiler ((version info not available)). Please file a bug against the Java compiler via the Java bug reporting page (http://bugreport.java.com) after checking the Bug Database (http://bugs.java.com) for duplicates. Include your program and the following diagnostic in your report. Thank you.
java.lang.IllegalArgumentException: Cannot combine scanner suppliers with different implementations of 'MockitoInternalUsage': org.mockito.errorprone.bugpatterns.MockitoInternalUsage, com.google.errorprone.bugpatterns.MockitoInternalUsage
	at com.google.errorprone.scanner.ScannerSupplier.lambda$plus$6(ScannerSupplier.java:245)
	at com.google.common.collect.RegularImmutableBiMap.forEach(RegularImmutableBiMap.java:157)
	at com.google.errorprone.scanner.ScannerSupplier.plus(ScannerSupplier.java:239)
	at com.google.errorprone.ErrorPronePlugins.loadPlugins(ErrorPronePlugins.java:46)
	at com.google.errorprone.ErrorProneAnalyzer.lambda$scansPlugins$0(ErrorProneAnalyzer.java:77)
	at com.google.common.base.Suppliers$NonSerializableMemoizingSupplier.get(Suppliers.java:167)
	at com.google.errorprone.ErrorProneAnalyzer.finished(ErrorProneAnalyzer.java:151)
	at com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:120)
	at com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1404)
	at com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1353)
	at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:946)
	at com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:100)
	at com.sun.tools.javac.api.JavacTaskImpl.handleExceptions(JavacTaskImpl.java:142)
	at com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:96)
	at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:90)
	at org.gradle.api.internal.tasks.compile.AnnotationProcessingCompileTask.call(AnnotationProcessingCompileTask.java:93)
	at org.gradle.api.internal.tasks.compile.ResourceCleaningCompilationTask.call(ResourceCleaningCompilationTask.java:57)
	at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:54)
	at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:39)
	at org.gradle.api.internal.tasks.compile.daemon.AbstractDaemonCompiler$CompilerWorkAction.execute(AbstractDaemonCompiler.java:113)
	at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:47)
	at org.gradle.workers.internal.AbstractClassLoaderWorker$1.create(AbstractClassLoaderWorker.java:46)
	at org.gradle.workers.internal.AbstractClassLoaderWorker$1.create(AbstractClassLoaderWorker.java:36)
	at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:98)
	at org.gradle.workers.internal.AbstractClassLoaderWorker.executeInClassLoader(AbstractClassLoaderWorker.java:36)
	at org.gradle.workers.internal.FlatClassLoaderWorker.execute(FlatClassLoaderWorker.java:31)
	at org.gradle.workers.internal.WorkerDaemonServer.execute(WorkerDaemonServer.java:56)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.gradle.process.internal.worker.request.WorkerAction.run(WorkerAction.java:118)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182)
	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164)
	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:412)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
	at java.lang.Thread.run(Thread.java:748)

My guess is that the source of the issue might be the use of one of these two libs in my build.gradle:

    testCompile 'org.mockito:mockito-core'
    testCompile "com.nhaarman.mockitokotlin2:mockito-kotlin"

What did you want to happen?

Upgrading minor version releases to not break compilation in my project

@carterkozak
Copy link
Contributor

Are you forcing an older than expected error-prone version? If you're forcing down from 2.3.4 to 2.3.3 I would expect that issue.
In 2.3.4 that check was moved out of error-prone into mockito.

@tomkozlowski
Copy link
Author

I'm not forcing an older-than-expected errorprone version (at least that I can find in my gradle dependencies), but there does seem to be a handful of places where it's resolving 2.3.4 -> 2.3.3 that I should probably dig into. Or would it be preferable to just force errorprone version 2.3.4 across the board?

@tomkozlowski
Copy link
Author

Hmm, yeah so it looks like gradle is recommending 2.3.3 which appears to be sourced entirely from com.palantir.baseline:baseline-error-prone

./gradlew dependencyInsight --dependency com.google.errorprone:error_prone_core --configuration allProcessors   

> Task :dependencyInsight
com.google.errorprone:error_prone_core:2.3.3
   variant "compile" [
      org.gradle.status          = release (not requested)
      org.gradle.usage           = java-api
      org.gradle.libraryelements = jar (not requested)
      org.gradle.category        = library (not requested)
   ]
   Selection reasons:
      - Selected by rule : Recommending version 2.3.3 for dependency com.google.errorprone:error_prone_core via override transitive recommendation
                with reasons: nebula.dependency-recommender uses a properties file: <my project>/versions.props, nebula.dependency-recommender uses mavenBom: <web server framework>

com.google.errorprone:error_prone_core:2.3.2 -> 2.3.3
\--- org.mockito:mockito-errorprone:3.2.4
     \--- com.palantir.baseline:baseline-error-prone:2.49.0
          \--- allProcessors

com.google.errorprone:error_prone_core:2.3.4 -> 2.3.3
\--- com.palantir.baseline:baseline-error-prone:2.49.0
     \--- allProcessors

I tried pinning com.google.errorprone:* = 2.3.4 in versions.props and that appears to have corrected the dependency resolution to the expected version and allowed my compilation to succeed.

./gradlew dependencyInsight --dependency com.google.errorprone:error_prone_core --configuration allProcessors

> Task :dependencyInsight
com.google.errorprone:error_prone_core:2.3.4
   variant "compile" [
      org.gradle.status          = release (not requested)
      org.gradle.usage           = java-api
      org.gradle.libraryelements = jar (not requested)
      org.gradle.category        = library (not requested)
   ]
   Selection reasons:
      - Selected by rule : Recommending version 2.3.4 for dependency com.google.errorprone:error_prone_core via override transitive recommendation
                with reasons: nebula.dependency-recommender uses a properties file: /Volumes/git/workshop/slim/versions.props
      - Selected by rule : Recommending version 2.3.4 for dependency com.google.errorprone:error_prone_core via override transitive recommendation
                with reasons: nebula.dependency-recommender uses a properties file: /Volumes/git/workshop/slim/versions.props, nebula.dependency-recommender uses mavenBom: com.palantir.witchcraft:witchcraft-core-bom:pom:0.216.1

com.google.errorprone:error_prone_core:2.3.4
\--- com.palantir.baseline:baseline-error-prone:2.49.0
     \--- allProcessors

com.google.errorprone:error_prone_core:2.3.2 -> 2.3.4
\--- org.mockito:mockito-errorprone:3.2.4
     \--- com.palantir.baseline:baseline-error-prone:2.49.0
          \--- allProcessors

@carterkozak going to leave this issue open in case you think there's a way to enforce resolution to 2.3.4 within the com.palantir.baseline:baseline-error-prone jar

@dansanduleac
Copy link
Contributor

The problem is that you're using nebula dependency recommender instead of GCV.

   Selection reasons:
      - Selected by rule : Recommending version 2.3.3 for dependency com.google.errorprone:error_prone_core via override transitive recommendation
                with reasons: nebula.dependency-recommender uses a properties file: <my project>/versions.props, nebula.dependency-recommender uses mavenBom: <web server framework>

going to leave this issue open in case you think there's a way to enforce resolution to 2.3.4 within the com.palantir.baseline:baseline-error-prone jar

baseline already recommends 2.3.4, you can see that right there in the dependencyInsight you posted:

com.google.errorprone:error_prone_core:2.3.4 -> 2.3.3
\--- com.palantir.baseline:baseline-error-prone:2.49.0

it's just that nebula overrides all transitive constraints once you've declared that you want a particular version, which makes errors of this kind very common.
The solution is to move to GCV.

@tomkozlowski
Copy link
Author

tomkozlowski commented Jan 14, 2020

hmm, looked like I had GCV imported on my classpath but not actually applied:

    dependencies {
        classpath 'com.palantir.conjure.backcompat:gradle-conjure-backcompat:2.0.0'
        classpath 'com.palantir.gradle.changelog:gradle-changelog:2.16.0'
        classpath 'com.netflix.nebula:nebula-publishing-plugin:14.1.1'
        classpath 'com.palantir.baseline:gradle-baseline-java:2.49.0'
        classpath 'com.palantir.blacklist:gradle-blacklist-plugin:0.12.3'
        classpath 'com.palantir.gradle.conjure:gradle-conjure:4.15.0'
        classpath 'com.palantir.gradle.consistentversions:gradle-consistent-versions:1.15.0'
        classpath 'com.palantir.preflight:gradle-preflight:1.14.2'
        classpath 'com.palantir.sls-packaging:gradle-sls-packaging:4.5.1'
        classpath 'com.palantir.gradle.gitversion:gradle-git-version:0.12.2'
        classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.50'
    }

Though with that set of buildscript deps I'm not sure where the nebula dependency-recommendation is coming from, I guess it could be a transitive dep through the nebula publishing plugin?

@ferozco
Copy link
Contributor

ferozco commented Jan 14, 2020

nebula is pulled in by baseline. You'll want to turn off nebula if you are using GCV: https://github.com/palantir/gradle-baseline#turning-it-off

@iamdanfox
Copy link
Contributor

Perhaps it is time for baseline to stop bundling nebula dependency recommender... #1169

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

5 participants