Skip to content

Commit 1f41f73

Browse files
committed
Remove annotation-only Jars from runtime classpath (in Gradle)
Also reverts #9ed0fa
1 parent 1de7270 commit 1f41f73

File tree

2 files changed

+47
-83
lines changed

2 files changed

+47
-83
lines changed

guava/module.json

+20-70
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,6 @@
3333
"requires": "1.0.2"
3434
}
3535
},
36-
{
37-
"group": "com.google.guava",
38-
"module": "listenablefuture",
39-
"version": {
40-
"requires": "9999.0-empty-to-avoid-conflict-with-guava"
41-
}
42-
},
4336
{
4437
"group": "com.google.code.findbugs",
4538
"module": "jsr305",
@@ -85,6 +78,11 @@
8578
"group": "com.google.collections",
8679
"name": "google-collections",
8780
"version": "${pom.version}"
81+
},
82+
{
83+
"group": "com.google.guava",
84+
"name": "listenablefuture",
85+
"version": "1.0"
8886
}
8987
]
9088
},
@@ -105,34 +103,6 @@
105103
"version": {
106104
"requires": "1.0.2"
107105
}
108-
},
109-
{
110-
"group": "com.google.guava",
111-
"module": "listenablefuture",
112-
"version": {
113-
"requires": "9999.0-empty-to-avoid-conflict-with-guava"
114-
}
115-
},
116-
{
117-
"group": "com.google.code.findbugs",
118-
"module": "jsr305",
119-
"version": {
120-
"requires": "${jsr305.version}"
121-
}
122-
},
123-
{
124-
"group": "org.checkerframework",
125-
"module": "checker-qual",
126-
"version": {
127-
"requires": "${checker.version}"
128-
}
129-
},
130-
{
131-
"group": "com.google.errorprone",
132-
"module": "error_prone_annotations",
133-
"version": {
134-
"requires": "${errorprone.version}"
135-
}
136106
}
137107
],
138108
"files": [
@@ -151,6 +121,11 @@
151121
"group": "com.google.collections",
152122
"name": "google-collections",
153123
"version": "${pom.version}"
124+
},
125+
{
126+
"group": "com.google.guava",
127+
"name": "listenablefuture",
128+
"version": "1.0"
154129
}
155130
]
156131
},
@@ -172,13 +147,6 @@
172147
"requires": "1.0.2"
173148
}
174149
},
175-
{
176-
"group": "com.google.guava",
177-
"module": "listenablefuture",
178-
"version": {
179-
"requires": "9999.0-empty-to-avoid-conflict-with-guava"
180-
}
181-
},
182150
{
183151
"group": "com.google.code.findbugs",
184152
"module": "jsr305",
@@ -224,6 +192,11 @@
224192
"group": "com.google.collections",
225193
"name": "google-collections",
226194
"version": "${pom.version}"
195+
},
196+
{
197+
"group": "com.google.guava",
198+
"name": "listenablefuture",
199+
"version": "1.0"
227200
}
228201
]
229202
},
@@ -244,34 +217,6 @@
244217
"version": {
245218
"requires": "1.0.2"
246219
}
247-
},
248-
{
249-
"group": "com.google.guava",
250-
"module": "listenablefuture",
251-
"version": {
252-
"requires": "9999.0-empty-to-avoid-conflict-with-guava"
253-
}
254-
},
255-
{
256-
"group": "com.google.code.findbugs",
257-
"module": "jsr305",
258-
"version": {
259-
"requires": "${jsr305.version}"
260-
}
261-
},
262-
{
263-
"group": "org.checkerframework",
264-
"module": "checker-qual",
265-
"version": {
266-
"requires": "${checker.version}"
267-
}
268-
},
269-
{
270-
"group": "com.google.errorprone",
271-
"module": "error_prone_annotations",
272-
"version": {
273-
"requires": "${errorprone.version}"
274-
}
275220
}
276221
],
277222
"files": [
@@ -290,6 +235,11 @@
290235
"group": "com.google.collections",
291236
"name": "google-collections",
292237
"version": "${pom.version}"
238+
},
239+
{
240+
"group": "com.google.guava",
241+
"name": "listenablefuture",
242+
"version": "1.0"
293243
}
294244
]
295245
}

integration-tests/gradle/build.gradle.kts

+27-13
Original file line numberDiff line numberDiff line change
@@ -7,27 +7,30 @@ val guavaVersionJre =
77
val expectedReducedRuntimeClasspathAndroidVersion =
88
setOf(
99
"guava-${guavaVersionJre.replace("jre", "android")}.jar",
10-
"failureaccess-1.0.2.jar",
11-
"jsr305-3.0.2.jar",
12-
"checker-qual-3.41.0.jar",
13-
"error_prone_annotations-2.23.0.jar",
14-
"listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar"
10+
"failureaccess-1.0.2.jar"
1511
)
1612
val expectedReducedRuntimeClasspathJreVersion =
1713
setOf(
1814
"guava-$guavaVersionJre.jar",
19-
"failureaccess-1.0.2.jar",
15+
"failureaccess-1.0.2.jar"
16+
)
17+
val compileOnlyDependencies =
18+
setOf(
19+
"j2objc-annotations-2.8.jar",
2020
"jsr305-3.0.2.jar",
2121
"checker-qual-3.41.0.jar",
22-
"error_prone_annotations-2.23.0.jar",
23-
"listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar"
22+
"error_prone_annotations-2.23.0.jar"
2423
)
2524
val expectedCompileClasspathAndroidVersion =
26-
expectedReducedRuntimeClasspathAndroidVersion + setOf("j2objc-annotations-2.8.jar")
25+
expectedReducedRuntimeClasspathAndroidVersion + compileOnlyDependencies
2726
val expectedCompileClasspathJreVersion =
28-
expectedReducedRuntimeClasspathJreVersion + setOf("j2objc-annotations-2.8.jar")
27+
expectedReducedRuntimeClasspathJreVersion + compileOnlyDependencies
2928

30-
val extraLegacyDependencies = setOf("google-collections-1.0.jar")
29+
val extraLegacyDependencies =
30+
setOf(
31+
"google-collections-1.0.jar",
32+
"listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar"
33+
)
3134

3235
buildscript {
3336
val agpVersion = if (gradle.gradleVersion.startsWith("5.")) "3.6.4" else "7.0.4"
@@ -58,7 +61,7 @@ subprojects {
5861
// - variant decision is made based on version suffix (android/jre) and not on the actual
5962
// environment
6063
// - runtime classpath equals the compile classpath
61-
// - dependency conflict with Google Collections is not detected
64+
// - dependency conflict with Google Collections is not detected and '9999.0' hack is present
6265
if (name.startsWith("android")) {
6366
expectedCompileClasspathAndroidVersion + extraLegacyDependencies
6467
} else {
@@ -68,7 +71,7 @@ subprojects {
6871
// with Gradle Module Metadata
6972
// - variant is chosen based on the actual environment, independent of version suffix
7073
// - reduced runtime classpath is used (w/o annotation libraries)
71-
// - capability conflicts are detected with Google Collections
74+
// - capability conflicts are detected between Google Collections and listenablefuture
7275
if (name.contains("Android") && !name.contains("JreConstraint")) {
7376
when {
7477
name.contains("RuntimeClasspath") -> {
@@ -125,6 +128,17 @@ subprojects {
125128
}
126129
?.apply { select(this) }
127130
}
131+
withCapability("com.google.guava:listenablefuture") {
132+
candidates
133+
.find {
134+
val idField =
135+
it.javaClass.getDeclaredMethod(
136+
"getId"
137+
) // reflective access to make this compile with Gradle 5
138+
(idField.invoke(it) as ModuleComponentIdentifier).module == "guava"
139+
}
140+
?.apply { select(this) }
141+
}
128142
}
129143
}
130144

0 commit comments

Comments
 (0)