Skip to content

Navigation Menu

Sign in
Sign up

Gradle unable to resolve Guava in a project, with a VariantSelectionByAttributesException error #8398

Open
Labels
P4no SLO type=documentationDocumentation that is other than for an API

Description

Guava Version

33.5.0

Description

In a gradle project I have a build that uses some Java tooling as part of its
build machinery, but is not, itself, a Java project. One of the tooling
dependencies (javaparser) has a dependency on Guava.

For historical reasons that project's build.gradle.kts applied the
java-library plugin. When I removed it because its default tasks were causing
problems with other tasks and, as noted, no Java artifacts were being produced,
the build failed with an error:

Variant Selection Exception: 
 org.gradle.internal.component.resolution.failure.exception.VariantSelectionByAttributesException 
 caused by Resolution Failure: 
 org.gradle.internal.component.resolution.failure.type.NoCompatibleVariantsFailure

Gradle can no longer resolve a Guava variant that it can use. Note that javaparser is explicitly depending on the -jre Guava version. (https://github.com/javaparser/javaparser/blob/11a99ae61df28b19fb9b64e5f7c216fa71dc4020/pom.xml#L432-L437)

There's a minimal repro here: https://github.com/Saxonica/guava-variant-problem

This project contains two Gradle sub-projects, java_lib and
non_java whose build.gradle.kts differ only in the plugin they apply.

non_java applies the base plugin, and java_lib applies the java-library
plugin. They both contain a simple configuration which declares a dependency on
Guava.

Running ./gradlew java_lib:dependencies shows that Guava resolves fine, and
./gradlew non_java:depdendencies shows the failure.

This is defintely unexpected behvaiour, and seems like buggy behaviour, though I
am really not sure if this is a Gradle problem or a Guava Gradle metadata
problem.

I imagine this is related to #7059, #6801 and friends

Example

Clone https://github.com/Saxonica/guava-variant-problem and run the following:
./gradlew non_java:dependencies`

Expected Behavior

A properly resolved dependency tree, whose macguffin configuration's dependency tree should be identical to the result of running ./gradlew java_lib:dependencies:

> Task :non_java:dependencies
------------------------------------------------------------
Project ':non_java'
------------------------------------------------------------
macguffin
\--- com.google.guava:guava:33.6.0-jre
 +--- com.google.guava:failureaccess:1.0.3
 +--- com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
 +--- org.jspecify:jspecify:1.0.0
 +--- com.google.errorprone:error_prone_annotations:2.47.0
 \--- com.google.j2objc:j2objc-annotations:3.1
macguffinRuntime (n)
\--- com.google.guava:guava:33.6.0-jre (n)
(n) - A dependency or dependency configuration that cannot be resolved.
A web-based, searchable dependency report is available by adding the --scan option.
BUILD SUCCESSFUL in 414ms

Actual Behavior

> Task :non_java:dependencies
------------------------------------------------------------
Project ':non_java'
------------------------------------------------------------
macguffin
\--- com.google.guava:guava:33.6.0-jre FAILED
macguffinRuntime (n)
\--- com.google.guava:guava:33.6.0-jre (n)
(n) - A dependency or dependency configuration that cannot be resolved.
A web-based, searchable dependency report is available by adding the --scan option.
BUILD SUCCESSFUL in 414ms

Packages

No response

Platforms

No response

Checklist

  • I agree to follow the code of conduct.

  • I can reproduce the bug with the latest version of Guava available.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P4no SLO type=documentationDocumentation that is other than for an API

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      AltStyle によって変換されたページ (->オリジナル) /