From e899ebcaa51e9334413e61145d26ff8432be14af Mon Sep 17 00:00:00 2001 From: Jinwoo Hwang Date: Sun, 14 Sep 2025 18:54:45 -0400 Subject: [PATCH 1/2] Cross-project runtimeClasspath resolution --- .../scripts/src/main/groovy/geode-java.gradle | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/build-tools/scripts/src/main/groovy/geode-java.gradle b/build-tools/scripts/src/main/groovy/geode-java.gradle index 8f04b1e4982..b27dc6a7805 100644 --- a/build-tools/scripts/src/main/groovy/geode-java.gradle +++ b/build-tools/scripts/src/main/groovy/geode-java.gradle @@ -118,13 +118,23 @@ gradle.taskGraph.whenReady({ graph -> }.findAll { !(it.value?.hasProperty('optional') && it.value.optional)}) } - def incoming = geodeProject.configurations.runtimeClasspath.getIncoming() - def resolutionResult = incoming.getResolutionResult() - def components = resolutionResult.allComponents - - upstreamDeps.addAll(components.findAll {componentResult -> - depMap.containsKey(componentResult.moduleVersion.id.name) - }.collect {it.moduleVersion.id.name + '-' + it.moduleVersion.version + '.jar'}) + // NOTE: Previously this logic resolved the upstream project's runtimeClasspath via + // geodeProject.configurations.runtimeClasspath.getIncoming().getResolutionResult(). + // That constitutes cross-project configuration resolution (executed while configuring + // the current project's Jar task) and triggers Gradle's deprecation warning: + // "Resolution of the configuration :otherProject:runtimeClasspath was attempted from a context different than the project context" + // To avoid that, we derive the first-level runtime dependency jar names directly from + // the dependency metadata (depMap) we already collected, without forcing resolution of + // the upstream configuration here. This yields the same set that was formerly filtered + // against the resolved components because depMap only contains declared (first-level) + // non-optional dependencies of the upstream project. + depMap.values() + .findAll { dep -> !(dep instanceof ProjectDependency) } + .each { dep -> + if (dep.hasProperty('version') && dep.version) { + upstreamDeps.add("${dep.name}-${dep.version}.jar") + } + } } // TODO: can we put our projects on the ClassPath line still? runtimeSet.removeAll(upstreamDeps) From 650d125212148e0e2193b98195e9d49fc9e6b454 Mon Sep 17 00:00:00 2001 From: Jinwoo Hwang Date: Fri, 26 Sep 2025 14:08:29 -0400 Subject: [PATCH 2/2] Add logging for dependencies without version information in the JAR manifest generation process --- build-tools/scripts/src/main/groovy/geode-java.gradle | 3 +++ 1 file changed, 3 insertions(+) diff --git a/build-tools/scripts/src/main/groovy/geode-java.gradle b/build-tools/scripts/src/main/groovy/geode-java.gradle index b27dc6a7805..7c12b710dfc 100644 --- a/build-tools/scripts/src/main/groovy/geode-java.gradle +++ b/build-tools/scripts/src/main/groovy/geode-java.gradle @@ -133,6 +133,9 @@ gradle.taskGraph.whenReady({ graph -> .each { dep -> if (dep.hasProperty('version') && dep.version) { upstreamDeps.add("${dep.name}-${dep.version}.jar") + } else { + // Log warning about missing version but don't add to upstreamDeps (preserves original behavior) + logger.warn("Dependency '${dep.name}' has no version information in project '${geodeProject.name}' and will be skipped from upstream exclusion") } } }