Issue upgrading to Gradle 8.12: Problems API > "NullPointerException: group.displayName"

Current behavior

Hello,

I’m trying to upgrade a project from Gradle 8.11 to Gradle 8.12, and I’m constantly getting compilation issues when executing any gradle task.

Caused by: java.lang.NullPointerException: group.displayName must not be null
        at org.gradle.problems.internal.impl.DefaultProblemsReportCreatorKt$problemId$1$1.invoke(DefaultProblemsReportCreator.kt:104)
        at org.gradle.problems.internal.impl.DefaultProblemsReportCreatorKt$problemId$1$1.invoke(DefaultProblemsReportCreator.kt:102)
        at org.gradle.internal.cc.impl.problems.JsonWriter$jsonObjectList$1$1.invoke(JsonWriter.kt:84)
        at org.gradle.internal.cc.impl.problems.JsonWriter$jsonObjectList$1$1.invoke(JsonWriter.kt:83)
        at org.gradle.internal.cc.impl.problems.JsonWriter.jsonObject(JsonWriter.kt:39)
        at org.gradle.internal.cc.impl.problems.JsonWriter$jsonObjectList$1.invoke(JsonWriter.kt:83)
        at org.gradle.internal.cc.impl.problems.JsonWriter$jsonObjectList$1.invoke(JsonWriter.kt:82)
        at org.gradle.internal.cc.impl.problems.JsonWriter$jsonList$1$1.invoke(JsonWriter.kt:98)
        at org.gradle.internal.cc.impl.problems.JsonWriter$jsonList$1$1.invoke(JsonWriter.kt:97)
        at org.gradle.internal.cc.impl.problems.JsonWriter.jsonListItem(JsonWriter.kt:105)
        at org.gradle.internal.cc.impl.problems.JsonWriter.jsonList(JsonWriter.kt:97)
        at org.gradle.internal.cc.impl.problems.JsonWriter.jsonObjectList(JsonWriter.kt:82)
        at org.gradle.internal.cc.impl.problems.JsonWriter.jsonObjectList(JsonWriter.kt:77)

Investigation

I’ve narrowed down the problem to the new Problems API implementation (this line, specifically).

Workaround

The error goes away as soon as I:

  • Revert back to Gradle 8.11, or
  • Disable the generated HTML report with --no-problems-report flag.

Repro steps

Unfortunately, I have not been able to create a self-contained reproducer project, not even with the project replicator. My app consists of several modules, combines React Native and KMP, so not a very common setup and hard to replicate.

I’m guessing there’s something wrong with my project that the Problems API would warn me about, but unfortunately it’s hard to figure out what given that the reports fails to build.

Full stacktrace

* Exception is:
java.util.concurrent.ExecutionException: java.lang.NullPointerException: group.displayName must not be null
        at java.base/java.util.concurrent.FutureTask.report(Unknown Source)
        at java.base/java.util.concurrent.FutureTask.get(Unknown Source)
        at org.gradle.internal.configuration.problems.CommonReport$State$Spooling.commitReportTo(CommonReport.kt:192)
        at org.gradle.internal.configuration.problems.CommonReport.writeReportFileTo(CommonReport.kt:370)
        at org.gradle.problems.internal.impl.DefaultProblemsReportCreator.createReportFile(DefaultProblemsReportCreator.kt:65)
        at org.gradle.problems.internal.services.DefaultProblemSummarizer.report(DefaultProblemSummarizer.java:77)
        at org.gradle.internal.buildtree.ProblemReportingBuildActionRunner.reportProblems(ProblemReportingBuildActionRunner.java:61)
        at org.gradle.internal.buildtree.ProblemReportingBuildActionRunner.run(ProblemReportingBuildActionRunner.java:52)
        at org.gradle.launcher.exec.BuildOutcomeReportingBuildActionRunner.run(BuildOutcomeReportingBuildActionRunner.java:71)
        at org.gradle.tooling.internal.provider.FileSystemWatchingBuildActionRunner.run(FileSystemWatchingBuildActionRunner.java:135)
        at org.gradle.launcher.exec.BuildCompletionNotifyingBuildActionRunner.run(BuildCompletionNotifyingBuildActionRunner.java:41)
        at org.gradle.launcher.exec.RootBuildLifecycleBuildActionExecutor.lambda$execute$0(RootBuildLifecycleBuildActionExecutor.java:54)
        at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:130)
        at org.gradle.launcher.exec.RootBuildLifecycleBuildActionExecutor.execute(RootBuildLifecycleBuildActionExecutor.java:54)
        at org.gradle.internal.buildtree.InitDeprecationLoggingActionExecutor.execute(InitDeprecationLoggingActionExecutor.java:62)
        at org.gradle.internal.buildtree.InitProblems.execute(InitProblems.java:36)
        at org.gradle.internal.buildtree.DefaultBuildTreeContext.execute(DefaultBuildTreeContext.java:40)
        at org.gradle.launcher.exec.BuildTreeLifecycleBuildActionExecutor.lambda$execute$0(BuildTreeLifecycleBuildActionExecutor.java:71)
        at org.gradle.internal.buildtree.BuildTreeState.run(BuildTreeState.java:60)
        at org.gradle.launcher.exec.BuildTreeLifecycleBuildActionExecutor.execute(BuildTreeLifecycleBuildActionExecutor.java:71)
        at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor$2.call(RunAsBuildOperationBuildActionExecutor.java:67)
        at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor$2.call(RunAsBuildOperationBuildActionExecutor.java:63)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
        at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor.execute(RunAsBuildOperationBuildActionExecutor.java:63)
        at org.gradle.launcher.exec.RunAsWorkerThreadBuildActionExecutor.lambda$execute$0(RunAsWorkerThreadBuildActionExecutor.java:36)
        at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:263)
        at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
        at org.gradle.launcher.exec.RunAsWorkerThreadBuildActionExecutor.execute(RunAsWorkerThreadBuildActionExecutor.java:36)
        at org.gradle.tooling.internal.provider.continuous.ContinuousBuildActionExecutor.execute(ContinuousBuildActionExecutor.java:110)
        at org.gradle.tooling.internal.provider.SubscribableBuildActionExecutor.execute(SubscribableBuildActionExecutor.java:64)
        at org.gradle.internal.session.DefaultBuildSessionContext.execute(DefaultBuildSessionContext.java:46)
        at org.gradle.internal.buildprocess.execution.BuildSessionLifecycleBuildActionExecutor$ActionImpl.apply(BuildSessionLifecycleBuildActionExecutor.java:92)
        at org.gradle.internal.buildprocess.execution.BuildSessionLifecycleBuildActionExecutor$ActionImpl.apply(BuildSessionLifecycleBuildActionExecutor.java:80)
        at org.gradle.internal.session.BuildSessionState.run(BuildSessionState.java:71)
        at org.gradle.internal.buildprocess.execution.BuildSessionLifecycleBuildActionExecutor.execute(BuildSessionLifecycleBuildActionExecutor.java:62)
        at org.gradle.internal.buildprocess.execution.BuildSessionLifecycleBuildActionExecutor.execute(BuildSessionLifecycleBuildActionExecutor.java:41)
        at org.gradle.internal.buildprocess.execution.StartParamsValidatingActionExecutor.execute(StartParamsValidatingActionExecutor.java:64)
        at org.gradle.internal.buildprocess.execution.StartParamsValidatingActionExecutor.execute(StartParamsValidatingActionExecutor.java:32)
        at org.gradle.internal.buildprocess.execution.SessionFailureReportingActionExecutor.execute(SessionFailureReportingActionExecutor.java:51)
        at org.gradle.internal.buildprocess.execution.SessionFailureReportingActionExecutor.execute(SessionFailureReportingActionExecutor.java:39)
        at org.gradle.internal.buildprocess.execution.SetupLoggingActionExecutor.execute(SetupLoggingActionExecutor.java:47)
        at org.gradle.internal.buildprocess.execution.SetupLoggingActionExecutor.execute(SetupLoggingActionExecutor.java:31)
        at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:70)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:39)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:29)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:35)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.ForwardClientInput.lambda$execute$0(ForwardClientInput.java:40)
        at org.gradle.internal.daemon.clientinput.ClientInputForwarder.forwardInput(ClientInputForwarder.java:80)
        at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:37)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:64)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:63)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:84)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
        at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:52)
        at org.gradle.launcher.daemon.server.DaemonStateCoordinator.lambda$runCommand$0(DaemonStateCoordinator.java:321)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:48)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException: group.displayName must not be null
        at org.gradle.problems.internal.impl.DefaultProblemsReportCreatorKt$problemId$1$1.invoke(DefaultProblemsReportCreator.kt:104)
        at org.gradle.problems.internal.impl.DefaultProblemsReportCreatorKt$problemId$1$1.invoke(DefaultProblemsReportCreator.kt:102)
        at org.gradle.internal.cc.impl.problems.JsonWriter$jsonObjectList$1$1.invoke(JsonWriter.kt:84)
        at org.gradle.internal.cc.impl.problems.JsonWriter$jsonObjectList$1$1.invoke(JsonWriter.kt:83)
        at org.gradle.internal.cc.impl.problems.JsonWriter.jsonObject(JsonWriter.kt:39)
        at org.gradle.internal.cc.impl.problems.JsonWriter$jsonObjectList$1.invoke(JsonWriter.kt:83)
        at org.gradle.internal.cc.impl.problems.JsonWriter$jsonObjectList$1.invoke(JsonWriter.kt:82)
        at org.gradle.internal.cc.impl.problems.JsonWriter$jsonList$1$1.invoke(JsonWriter.kt:98)
        at org.gradle.internal.cc.impl.problems.JsonWriter$jsonList$1$1.invoke(JsonWriter.kt:97)
        at org.gradle.internal.cc.impl.problems.JsonWriter.jsonListItem(JsonWriter.kt:105)
        at org.gradle.internal.cc.impl.problems.JsonWriter.jsonList(JsonWriter.kt:97)
        at org.gradle.internal.cc.impl.problems.JsonWriter.jsonObjectList(JsonWriter.kt:82)
        at org.gradle.internal.cc.impl.problems.JsonWriter.jsonObjectList(JsonWriter.kt:77)
        at org.gradle.problems.internal.impl.DefaultProblemsReportCreatorKt$problemId$1.invoke(DefaultProblemsReportCreator.kt:102)
        at org.gradle.problems.internal.impl.DefaultProblemsReportCreatorKt$problemId$1.invoke(DefaultProblemsReportCreator.kt:100)
        at org.gradle.internal.cc.impl.problems.JsonWriter.property(JsonWriter.kt:73)
        at org.gradle.problems.internal.impl.DefaultProblemsReportCreatorKt.problemId(DefaultProblemsReportCreator.kt:100)
        at org.gradle.problems.internal.impl.DefaultProblemsReportCreator$createReportFile$1$writeToJson$1$1$1$2$1$1.invoke(DefaultProblemsReportCreator.kt:78)
        at org.gradle.problems.internal.impl.DefaultProblemsReportCreator$createReportFile$1$writeToJson$1$1$1$2$1$1.invoke(DefaultProblemsReportCreator.kt:77)
        at org.gradle.internal.cc.impl.problems.JsonWriter.jsonObject(JsonWriter.kt:39)
        at org.gradle.problems.internal.impl.DefaultProblemsReportCreator$createReportFile$1$writeToJson$1$1$1$2$1.invoke(DefaultProblemsReportCreator.kt:77)
        at org.gradle.problems.internal.impl.DefaultProblemsReportCreator$createReportFile$1$writeToJson$1$1$1$2$1.invoke(DefaultProblemsReportCreator.kt:76)
        at org.gradle.internal.cc.impl.problems.JsonWriter$jsonList$1$1.invoke(JsonWriter.kt:98)
        at org.gradle.internal.cc.impl.problems.JsonWriter$jsonList$1$1.invoke(JsonWriter.kt:97)
        at org.gradle.internal.cc.impl.problems.JsonWriter.jsonListItem(JsonWriter.kt:105)
        at org.gradle.internal.cc.impl.problems.JsonWriter.jsonList(JsonWriter.kt:97)
        at org.gradle.internal.cc.impl.problems.JsonWriter.jsonList(JsonWriter.kt:90)
        at org.gradle.problems.internal.impl.DefaultProblemsReportCreator$createReportFile$1$writeToJson$1$1$1$2.invoke(DefaultProblemsReportCreator.kt:76)
        at org.gradle.problems.internal.impl.DefaultProblemsReportCreator$createReportFile$1$writeToJson$1$1$1$2.invoke(DefaultProblemsReportCreator.kt:75)
        at org.gradle.internal.cc.impl.problems.JsonWriter.property(JsonWriter.kt:73)
        at org.gradle.problems.internal.impl.DefaultProblemsReportCreator$createReportFile$1$writeToJson$1$1$1.invoke(DefaultProblemsReportCreator.kt:75)
        at org.gradle.problems.internal.impl.DefaultProblemsReportCreator$createReportFile$1$writeToJson$1$1$1.invoke(DefaultProblemsReportCreator.kt:69)
        at org.gradle.internal.cc.impl.problems.JsonWriter.jsonObject(JsonWriter.kt:39)
        at org.gradle.problems.internal.impl.DefaultProblemsReportCreator$createReportFile$1$writeToJson$1$1.invoke(DefaultProblemsReportCreator.kt:69)
        at org.gradle.problems.internal.impl.DefaultProblemsReportCreator$createReportFile$1$writeToJson$1$1.invoke(DefaultProblemsReportCreator.kt:68)
        at org.gradle.internal.cc.impl.problems.JsonWriter.property(JsonWriter.kt:73)
        at org.gradle.problems.internal.impl.DefaultProblemsReportCreator$createReportFile$1.writeToJson(DefaultProblemsReportCreator.kt:68)
        at org.gradle.internal.cc.impl.problems.JsonModelWriter.endModel(JsonModelWriter.kt:31)
        at org.gradle.internal.cc.impl.problems.HtmlReportWriter.endHtmlReport(HtmlReportWriter.kt:41)
        at org.gradle.internal.configuration.problems.CommonReport$State$Spooling.closeHtmlReport(CommonReport.kt:213)
        at org.gradle.internal.configuration.problems.CommonReport$State$Spooling.access$closeHtmlReport(CommonReport.kt:140)
        at org.gradle.internal.configuration.problems.CommonReport$State$Spooling$commitReportTo$reportFile$1.call(CommonReport.kt:189)
        at org.gradle.internal.configuration.problems.CommonReport$State$Spooling$commitReportTo$reportFile$1.call(CommonReport.kt:188)
        at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
        ... 5 more
        Suppressed: com.fasterxml.jackson.core.JsonGenerationException: Current context not Object but Array
                at com.fasterxml.jackson.core.JsonGenerator._reportError(JsonGenerator.java:2858)
                at com.fasterxml.jackson.core.json.WriterBasedJsonGenerator.writeEndObject(WriterBasedJsonGenerator.java:356)
                at org.gradle.internal.cc.impl.problems.JsonWriter.endObject(JsonWriter.kt:48)
                at org.gradle.internal.cc.impl.problems.JsonWriter$JsonObject.close(JsonWriter.kt:30)
                at kotlin.jdk7.AutoCloseableKt.closeFinally(AutoCloseableJVM.kt:51)
                at org.gradle.internal.cc.impl.problems.JsonWriter.jsonObject(JsonWriter.kt:38)
                ... 29 more
        Suppressed: com.fasterxml.jackson.core.JsonGenerationException: Current context not Object but Array
                at com.fasterxml.jackson.core.JsonGenerator._reportError(JsonGenerator.java:2858)
                at com.fasterxml.jackson.core.json.WriterBasedJsonGenerator.writeEndObject(WriterBasedJsonGenerator.java:356)
                at org.gradle.internal.cc.impl.problems.JsonWriter.endObject(JsonWriter.kt:48)
                at org.gradle.internal.cc.impl.problems.JsonWriter$JsonObject.close(JsonWriter.kt:30)
                at kotlin.jdk7.AutoCloseableKt.closeFinally(AutoCloseableJVM.kt:51)
                at org.gradle.internal.cc.impl.problems.JsonWriter.jsonObject(JsonWriter.kt:38)
                ... 16 more

Sounds like you should open a bug report about it.

To find where the problem is coming from, I think you should put a breakpoint to the constructor of org.gradle.api.problems.internal.DefaultProblemGroup with a condition that displayName is null.

Thanks @Vampire , reported: Issue upgrading to Gradle 8.12: Problems API > “NullPointerException: group.displayName” · Issue #32573 · gradle/gradle · GitHub

Just in case anyone comes across this post, that issue was triaged and it’s a legitimate issue. Looks like it’s currently in the to-do list for 8.14 RC1. In the meantime, --no-problems-report should be enough.

1 Like