From 1f41f73664bd2bdc204250985e4e442f26495910 Mon Sep 17 00:00:00 2001 From: Jendrik Johannes Date: Thu, 29 Jun 2023 13:41:03 +0200 Subject: [PATCH] Remove annotation-only Jars from runtime classpath (in Gradle) Also reverts #9ed0fa --- guava/module.json | 90 +++++------------------ integration-tests/gradle/build.gradle.kts | 40 ++++++---- 2 files changed, 47 insertions(+), 83 deletions(-) diff --git a/guava/module.json b/guava/module.json index 0e7e5d85d087..ee789437866b 100644 --- a/guava/module.json +++ b/guava/module.json @@ -33,13 +33,6 @@ "requires": "1.0.2" } }, - { - "group": "com.google.guava", - "module": "listenablefuture", - "version": { - "requires": "9999.0-empty-to-avoid-conflict-with-guava" - } - }, { "group": "com.google.code.findbugs", "module": "jsr305", @@ -85,6 +78,11 @@ "group": "com.google.collections", "name": "google-collections", "version": "${pom.version}" + }, + { + "group": "com.google.guava", + "name": "listenablefuture", + "version": "1.0" } ] }, @@ -105,34 +103,6 @@ "version": { "requires": "1.0.2" } - }, - { - "group": "com.google.guava", - "module": "listenablefuture", - "version": { - "requires": "9999.0-empty-to-avoid-conflict-with-guava" - } - }, - { - "group": "com.google.code.findbugs", - "module": "jsr305", - "version": { - "requires": "${jsr305.version}" - } - }, - { - "group": "org.checkerframework", - "module": "checker-qual", - "version": { - "requires": "${checker.version}" - } - }, - { - "group": "com.google.errorprone", - "module": "error_prone_annotations", - "version": { - "requires": "${errorprone.version}" - } } ], "files": [ @@ -151,6 +121,11 @@ "group": "com.google.collections", "name": "google-collections", "version": "${pom.version}" + }, + { + "group": "com.google.guava", + "name": "listenablefuture", + "version": "1.0" } ] }, @@ -172,13 +147,6 @@ "requires": "1.0.2" } }, - { - "group": "com.google.guava", - "module": "listenablefuture", - "version": { - "requires": "9999.0-empty-to-avoid-conflict-with-guava" - } - }, { "group": "com.google.code.findbugs", "module": "jsr305", @@ -224,6 +192,11 @@ "group": "com.google.collections", "name": "google-collections", "version": "${pom.version}" + }, + { + "group": "com.google.guava", + "name": "listenablefuture", + "version": "1.0" } ] }, @@ -244,34 +217,6 @@ "version": { "requires": "1.0.2" } - }, - { - "group": "com.google.guava", - "module": "listenablefuture", - "version": { - "requires": "9999.0-empty-to-avoid-conflict-with-guava" - } - }, - { - "group": "com.google.code.findbugs", - "module": "jsr305", - "version": { - "requires": "${jsr305.version}" - } - }, - { - "group": "org.checkerframework", - "module": "checker-qual", - "version": { - "requires": "${checker.version}" - } - }, - { - "group": "com.google.errorprone", - "module": "error_prone_annotations", - "version": { - "requires": "${errorprone.version}" - } } ], "files": [ @@ -290,6 +235,11 @@ "group": "com.google.collections", "name": "google-collections", "version": "${pom.version}" + }, + { + "group": "com.google.guava", + "name": "listenablefuture", + "version": "1.0" } ] } diff --git a/integration-tests/gradle/build.gradle.kts b/integration-tests/gradle/build.gradle.kts index 963b7187329f..018acb686e98 100644 --- a/integration-tests/gradle/build.gradle.kts +++ b/integration-tests/gradle/build.gradle.kts @@ -7,27 +7,30 @@ val guavaVersionJre = val expectedReducedRuntimeClasspathAndroidVersion = setOf( "guava-${guavaVersionJre.replace("jre", "android")}.jar", - "failureaccess-1.0.2.jar", - "jsr305-3.0.2.jar", - "checker-qual-3.41.0.jar", - "error_prone_annotations-2.23.0.jar", - "listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" + "failureaccess-1.0.2.jar" ) val expectedReducedRuntimeClasspathJreVersion = setOf( "guava-$guavaVersionJre.jar", - "failureaccess-1.0.2.jar", + "failureaccess-1.0.2.jar" + ) +val compileOnlyDependencies = + setOf( + "j2objc-annotations-2.8.jar", "jsr305-3.0.2.jar", "checker-qual-3.41.0.jar", - "error_prone_annotations-2.23.0.jar", - "listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" + "error_prone_annotations-2.23.0.jar" ) val expectedCompileClasspathAndroidVersion = - expectedReducedRuntimeClasspathAndroidVersion + setOf("j2objc-annotations-2.8.jar") + expectedReducedRuntimeClasspathAndroidVersion + compileOnlyDependencies val expectedCompileClasspathJreVersion = - expectedReducedRuntimeClasspathJreVersion + setOf("j2objc-annotations-2.8.jar") + expectedReducedRuntimeClasspathJreVersion + compileOnlyDependencies -val extraLegacyDependencies = setOf("google-collections-1.0.jar") +val extraLegacyDependencies = + setOf( + "google-collections-1.0.jar", + "listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" + ) buildscript { val agpVersion = if (gradle.gradleVersion.startsWith("5.")) "3.6.4" else "7.0.4" @@ -58,7 +61,7 @@ subprojects { // - variant decision is made based on version suffix (android/jre) and not on the actual // environment // - runtime classpath equals the compile classpath - // - dependency conflict with Google Collections is not detected + // - dependency conflict with Google Collections is not detected and '9999.0' hack is present if (name.startsWith("android")) { expectedCompileClasspathAndroidVersion + extraLegacyDependencies } else { @@ -68,7 +71,7 @@ subprojects { // with Gradle Module Metadata // - variant is chosen based on the actual environment, independent of version suffix // - reduced runtime classpath is used (w/o annotation libraries) - // - capability conflicts are detected with Google Collections + // - capability conflicts are detected between Google Collections and listenablefuture if (name.contains("Android") && !name.contains("JreConstraint")) { when { name.contains("RuntimeClasspath") -> { @@ -125,6 +128,17 @@ subprojects { } ?.apply { select(this) } } + withCapability("com.google.guava:listenablefuture") { + candidates + .find { + val idField = + it.javaClass.getDeclaredMethod( + "getId" + ) // reflective access to make this compile with Gradle 5 + (idField.invoke(it) as ModuleComponentIdentifier).module == "guava" + } + ?.apply { select(this) } + } } }