From 5de4fb5f01f4545139d9bcd52b77fe7f33aefad3 Mon Sep 17 00:00:00 2001 From: Jinwoo Hwang Date: Fri, 12 Sep 2025 14:01:20 -0400 Subject: [PATCH 1/9] Execution optimizations --- build.gradle | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 3f74f7a75f3..a0f1c51e883 100755 --- a/build.gradle +++ b/build.gradle @@ -70,6 +70,17 @@ allprojects { task combineReports(type: TestReport) { description 'Combines the test reports.' destinationDir = file "${rootProject.buildDir}/reports/combined" + // Collect all Test tasks in subprojects + def allTests = subprojects.collect { it.tasks.withType(Test) }.flatten() + + // Explicitly add geode-old-versions:test if it’s being missed + allTests += tasks.getByPath(":geode-old-versions:test") + + // Tell TestReport to use their results + reportOn allTests + + // Explicitly depend on them so results exist before combining + dependsOn allTests doLast { println "All test reports at ${rootProject.buildDir}/reports/combined" @@ -206,8 +217,7 @@ if (project.hasProperty('askpass')) { } gradle.taskGraph.whenReady({ graph -> - def allTestTasks = rootProject.subprojects.collect { it.tasks.withType(Test) }.flatten() - def cr = tasks.getByName('combineReports') as TestReport - cr.reportOn allTestTasks - cr.dependsOn allTestTasks + tasks.getByName('combineReports').reportOn rootProject.subprojects.collect { + it.tasks.withType(Test) + }.flatten() }) From e899ebcaa51e9334413e61145d26ff8432be14af Mon Sep 17 00:00:00 2001 From: Jinwoo Hwang Date: Sun, 14 Sep 2025 18:54:45 -0400 Subject: [PATCH 2/9] 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 4e30f32698c9fdcadac762b0cd24fa7b45f5b685 Mon Sep 17 00:00:00 2001 From: Jinwoo Hwang Date: Mon, 15 Sep 2025 18:42:23 -0400 Subject: [PATCH 3/9] geode-assembly-docs --- geode-assembly/build.gradle | 92 +++++++++++++++++-- .../apache/catalina/LifecycleListener.java | 21 +++++ .../java/org/apache/catalina/Realm.java | 24 +++++ .../ha/session/SerializablePrincipal.java | 61 ++++++++++++ .../catalina/realm/GenericPrincipal.java | 38 ++++++++ .../catalina/util/LifecycleSupport.java | 54 +++++++++++ 6 files changed, 282 insertions(+), 8 deletions(-) create mode 100644 geode-assembly/src/javadocStubs/java/org/apache/catalina/LifecycleListener.java create mode 100644 geode-assembly/src/javadocStubs/java/org/apache/catalina/Realm.java create mode 100644 geode-assembly/src/javadocStubs/java/org/apache/catalina/ha/session/SerializablePrincipal.java create mode 100644 geode-assembly/src/javadocStubs/java/org/apache/catalina/realm/GenericPrincipal.java create mode 100644 geode-assembly/src/javadocStubs/java/org/apache/catalina/util/LifecycleSupport.java diff --git a/geode-assembly/build.gradle b/geode-assembly/build.gradle index c4f8d7fe6d3..bd3461c376b 100755 --- a/geode-assembly/build.gradle +++ b/geode-assembly/build.gradle @@ -120,6 +120,11 @@ sourceSets { } output.dir(webServersDir, builtBy: 'downloadWebServers') } + // Javadoc-only stubs (Tomcat legacy classes) compiled separately so we can exclude their + // packages from published Javadoc output while still resolving symbols. + javadocStubs { + java.srcDir 'src/javadocStubs/java' + } } task downloadWebServers(type:Copy) { @@ -168,6 +173,16 @@ dependencies { javadocOnly(project(':extensions:geode-modules-tomcat9')) javadocOnly(project(':extensions:geode-modules-tomcat8')) + // Add common external dependencies needed for Javadoc generation + javadocOnly(platform(project(':boms:geode-all-bom'))) + + // Add FindBugs annotations for javadoc compilation + javadocOnly('com.github.stephenc.findbugs:findbugs-annotations') + + // Add Tomcat dependencies for modules javadoc compilation - use newer version for compatibility + javadocOnly('org.apache.tomcat:tomcat-catalina:' + DependencyConstraints.get('tomcat9.version')) + javadocOnly('org.apache.tomcat:tomcat-servlet-api:' + DependencyConstraints.get('tomcat9.version')) + testImplementation(project(':geode-core')) testImplementation(project(':geode-gfsh')) testImplementation(project(':geode-junit')) { @@ -342,15 +357,21 @@ tasks.register('defaultCacheConfig', JavaExec) { } def getDependencyProjectsFor(String configurationName) { - List rval = configurations[configurationName].allDependencies.collect { + List rval = configurations[configurationName].allDependencies.findAll { + it.hasProperty('dependencyProject') && it.dependencyProject != null + }.collect { it.dependencyProject }.collect { def projs = [it] if ((it as Project).pluginManager.hasPlugin('java-library')) { - (it as Project).configurations.api.dependencies.collect { + (it as Project).configurations.api.dependencies.findAll { + it.hasProperty('dependencyProject') && it.dependencyProject != null + }.collect { projs += it.dependencyProject } - (it as Project).configurations.runtimeOnly.dependencies.collect { + (it as Project).configurations.runtimeOnly.dependencies.findAll { + it.hasProperty('dependencyProject') && it.dependencyProject != null + }.collect { projs += it.dependencyProject } } @@ -387,24 +408,79 @@ tasks.register('gfshDepsJar', Jar) { } } +// Extract legacy Tomcat 6 jars needed only to satisfy Javadoc for old session manager classes +// (LifecycleSupport, SerializablePrincipal) without altering runtime dependencies. +def legacyTomcatDir = "$buildDir/legacyTomcat" +tasks.register('extractLegacyTomcatForJavadoc') { + description = 'Extracts legacy Tomcat catalina jars for Javadoc symbol resolution.' + outputs.dir(legacyTomcatDir) + dependsOn configurations.webServerTomcat6 + doLast { + delete legacyTomcatDir + copy { + from { zipTree(configurations.webServerTomcat6.singleFile) } + // Include the full Tomcat 6 lib set so packages like org.apache.catalina.ha.session + // (SerializablePrincipal) and util.LifecycleSupport are present. We keep it scoped + // to Javadoc only via this extracted directory rather than adding runtime deps. + include '**/lib/*.jar' + into legacyTomcatDir + } + } +} + tasks.register('docs', Javadoc) { def docsDir = file("$buildDir/javadocs") - options.addStringOption('Xwerror', '-quiet') options.links("https://docs.oracle.com/javase/8/docs/api/") options.encoding = 'UTF-8' title = "${productName} ${project.version}" destinationDir = docsDir - getDependencyProjectsFor('javadocOnly').forEach() { Project proj -> + // Do NOT add the javadocStubs sources directly; we only want them on the classpath, not in output. + + def docProjects = getDependencyProjectsFor('javadocOnly').findAll { proj -> + proj.hasProperty('sourceSets') + } + + // Ensure compilation is done before aggregating docs + dependsOn(docProjects.collect { it.tasks.named('classes') }) + dependsOn(tasks.named('javadocStubsClasses')) + + // Collect source, includes, and excludes from project javadoc tasks + docProjects.forEach { proj -> + source proj.sourceSets.main.allJava + + // Collect includes and excludes from individual project javadoc tasks when available proj.tasks.withType(Javadoc).findAll { it.enabled }.each { javadocTask -> - source += javadocTask.source - classpath += javadocTask.classpath - excludes += javadocTask.excludes includes += javadocTask.includes + excludes += javadocTask.excludes } } + // Common exclude patterns retained (may overlap with per-project excludes) + exclude '**/internal/**' + exclude '**/impl/**' + exclude '**/test/**' + exclude '**/examples/security/**' + + // Use javadocOnly configuration with transitive dependencies to get external libraries + // This avoids cross-project configuration resolution while including necessary dependencies + // Include legacy Tomcat jars for symbol resolution of older session manager classes + dependsOn(tasks.named('extractLegacyTomcatForJavadoc')) + // Use a lazy FileCollection for legacy Tomcat jars so extraction runs before it is resolved + // Broaden legacy Tomcat inclusion (Option 2) to all jars in Tomcat6 lib so that + // org.apache.catalina.util.LifecycleSupport and org.apache.catalina.ha.session.SerializablePrincipal + // (present in clustering/ha related jars) are available to Javadoc without excluding sources. + def legacyCatalinaJars = files { fileTree(legacyTomcatDir).matching { include '*.jar' } } + classpath = configurations.javadocOnly + + files(docProjects.collect { proj -> proj.sourceSets.main.output }) + + legacyCatalinaJars + + sourceSets.javadocStubs.output + + options.addStringOption('Xwerror','-quiet') + include 'org/apache/geode/**/' + // Exclude all catalina packages (real or stub) from published Javadoc output + exclude 'org/apache/catalina/**' doLast { rootProject.subprojects.each { project -> diff --git a/geode-assembly/src/javadocStubs/java/org/apache/catalina/LifecycleListener.java b/geode-assembly/src/javadocStubs/java/org/apache/catalina/LifecycleListener.java new file mode 100644 index 00000000000..f7393ad8b14 --- /dev/null +++ b/geode-assembly/src/javadocStubs/java/org/apache/catalina/LifecycleListener.java @@ -0,0 +1,21 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.catalina; + +/** Minimal placeholder for legacy Tomcat LifecycleListener. */ +public interface LifecycleListener { +} diff --git a/geode-assembly/src/javadocStubs/java/org/apache/catalina/Realm.java b/geode-assembly/src/javadocStubs/java/org/apache/catalina/Realm.java new file mode 100644 index 00000000000..bdce395248f --- /dev/null +++ b/geode-assembly/src/javadocStubs/java/org/apache/catalina/Realm.java @@ -0,0 +1,24 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.catalina; + +import java.security.Principal; + +/** Minimal placeholder for legacy Tomcat Realm. */ +public interface Realm { + Principal authenticate(String username, String credentials); +} diff --git a/geode-assembly/src/javadocStubs/java/org/apache/catalina/ha/session/SerializablePrincipal.java b/geode-assembly/src/javadocStubs/java/org/apache/catalina/ha/session/SerializablePrincipal.java new file mode 100644 index 00000000000..baeaa80f600 --- /dev/null +++ b/geode-assembly/src/javadocStubs/java/org/apache/catalina/ha/session/SerializablePrincipal.java @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Javadoc stub for legacy Tomcat class org.apache.catalina.ha.session.SerializablePrincipal. + * Only the minimal surface required by DeltaSession is implemented. This stub exists + * exclusively for aggregate Javadoc generation and MUST NOT be on any runtime classpath. + */ +package org.apache.catalina.ha.session; + +import java.io.Serializable; +import java.security.Principal; + +import org.apache.catalina.Realm; +import org.apache.catalina.realm.GenericPrincipal; + +@SuppressWarnings({"unused"}) +public class SerializablePrincipal implements Serializable { + private static final long serialVersionUID = 1L; + private final String name; + + public SerializablePrincipal(String name) { + this.name = name; + } + + public static SerializablePrincipal createPrincipal(GenericPrincipal gp) { + return new SerializablePrincipal(gp == null ? null : gp.getName()); + } + + public Principal getPrincipal(Realm realm) { + // Provide a minimal Principal; GenericPrincipal construction not reproduced. + return new Principal() { + @Override + public String getName() { + return name; + } + + @Override + public String toString() { + return name; + } + }; + } + + @Override + public String toString() { + return name; + } +} diff --git a/geode-assembly/src/javadocStubs/java/org/apache/catalina/realm/GenericPrincipal.java b/geode-assembly/src/javadocStubs/java/org/apache/catalina/realm/GenericPrincipal.java new file mode 100644 index 00000000000..46ee0149cba --- /dev/null +++ b/geode-assembly/src/javadocStubs/java/org/apache/catalina/realm/GenericPrincipal.java @@ -0,0 +1,38 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.catalina.realm; + +import java.security.Principal; + +/** Minimal placeholder for legacy Tomcat GenericPrincipal used only for name access. */ +public class GenericPrincipal implements Principal { + private final String name; + + public GenericPrincipal(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } + + @Override + public String toString() { + return name; + } +} diff --git a/geode-assembly/src/javadocStubs/java/org/apache/catalina/util/LifecycleSupport.java b/geode-assembly/src/javadocStubs/java/org/apache/catalina/util/LifecycleSupport.java new file mode 100644 index 00000000000..d11bb311b6a --- /dev/null +++ b/geode-assembly/src/javadocStubs/java/org/apache/catalina/util/LifecycleSupport.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Javadoc stub for legacy Tomcat 6 class org.apache.catalina.util.LifecycleSupport. + * This is provided solely to satisfy aggregate Javadoc generation for deprecated + * session manager implementations that still reference the Tomcat 6 API. It is NOT + * a functional replacement and MUST NOT be placed on any runtime classpath. + */ +package org.apache.catalina.util; + +import org.apache.catalina.LifecycleListener; + +/** + * Minimal no-op implementation exposing only the methods invoked by Geode's + * deprecated Tomcat6/7 session manager code during Javadoc compilation. + * All operations are no-ops. + */ +@SuppressWarnings({"unused", "deprecation"}) +public class LifecycleSupport { + private final Object source; + + public LifecycleSupport(Object source) { + this.source = source; + } + + public void addLifecycleListener(LifecycleListener listener) { + // no-op + } + + public LifecycleListener[] findLifecycleListeners() { + return new LifecycleListener[0]; + } + + public void fireLifecycleEvent(String type, Object data) { + // no-op + } + + public void removeLifecycleListener(LifecycleListener listener) { + // no-op + } +} From 8b8b2340abd0f4ed31b4361101bf2e42cb28e916 Mon Sep 17 00:00:00 2001 From: Jinwoo Hwang Date: Mon, 15 Sep 2025 18:52:16 -0400 Subject: [PATCH 4/9] geode-assembly-docs --- geode-assembly/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geode-assembly/build.gradle b/geode-assembly/build.gradle index bd3461c376b..5d40a0a81c3 100755 --- a/geode-assembly/build.gradle +++ b/geode-assembly/build.gradle @@ -461,7 +461,7 @@ tasks.register('docs', Javadoc) { exclude '**/impl/**' exclude '**/test/**' exclude '**/examples/security/**' - + // Use javadocOnly configuration with transitive dependencies to get external libraries // This avoids cross-project configuration resolution while including necessary dependencies // Include legacy Tomcat jars for symbol resolution of older session manager classes From 40bd7c4b2027a699a30d8e9a8e1a8d16483c04dc Mon Sep 17 00:00:00 2001 From: Jinwoo Hwang Date: Mon, 15 Sep 2025 19:01:31 -0400 Subject: [PATCH 5/9] Revert "Execution optimizations" This reverts commit 5de4fb5f01f4545139d9bcd52b77fe7f33aefad3. --- build.gradle | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/build.gradle b/build.gradle index a0f1c51e883..3f74f7a75f3 100755 --- a/build.gradle +++ b/build.gradle @@ -70,17 +70,6 @@ allprojects { task combineReports(type: TestReport) { description 'Combines the test reports.' destinationDir = file "${rootProject.buildDir}/reports/combined" - // Collect all Test tasks in subprojects - def allTests = subprojects.collect { it.tasks.withType(Test) }.flatten() - - // Explicitly add geode-old-versions:test if it’s being missed - allTests += tasks.getByPath(":geode-old-versions:test") - - // Tell TestReport to use their results - reportOn allTests - - // Explicitly depend on them so results exist before combining - dependsOn allTests doLast { println "All test reports at ${rootProject.buildDir}/reports/combined" @@ -217,7 +206,8 @@ if (project.hasProperty('askpass')) { } gradle.taskGraph.whenReady({ graph -> - tasks.getByName('combineReports').reportOn rootProject.subprojects.collect { - it.tasks.withType(Test) - }.flatten() + def allTestTasks = rootProject.subprojects.collect { it.tasks.withType(Test) }.flatten() + def cr = tasks.getByName('combineReports') as TestReport + cr.reportOn allTestTasks + cr.dependsOn allTestTasks }) From 832b69ca657bd69e11a7c20ca499e5fcddc3dd75 Mon Sep 17 00:00:00 2001 From: Jinwoo Hwang Date: Mon, 15 Sep 2025 19:01:49 -0400 Subject: [PATCH 6/9] Revert "Cross-project runtimeClasspath resolution" This reverts commit e899ebcaa51e9334413e61145d26ff8432be14af. --- .../scripts/src/main/groovy/geode-java.gradle | 24 ++++++------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/build-tools/scripts/src/main/groovy/geode-java.gradle b/build-tools/scripts/src/main/groovy/geode-java.gradle index b27dc6a7805..8f04b1e4982 100644 --- a/build-tools/scripts/src/main/groovy/geode-java.gradle +++ b/build-tools/scripts/src/main/groovy/geode-java.gradle @@ -118,23 +118,13 @@ gradle.taskGraph.whenReady({ graph -> }.findAll { !(it.value?.hasProperty('optional') && it.value.optional)}) } - // 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") - } - } + 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'}) } // TODO: can we put our projects on the ClassPath line still? runtimeSet.removeAll(upstreamDeps) From f676842edfa05aea61778eb2c04f90e4b7604b4a Mon Sep 17 00:00:00 2001 From: Jinwoo Hwang Date: Tue, 16 Sep 2025 06:12:56 -0400 Subject: [PATCH 7/9] remove exclude examples/security --- geode-assembly/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geode-assembly/build.gradle b/geode-assembly/build.gradle index 5d40a0a81c3..eec42f77349 100755 --- a/geode-assembly/build.gradle +++ b/geode-assembly/build.gradle @@ -460,7 +460,7 @@ tasks.register('docs', Javadoc) { exclude '**/internal/**' exclude '**/impl/**' exclude '**/test/**' - exclude '**/examples/security/**' + // Use javadocOnly configuration with transitive dependencies to get external libraries // This avoids cross-project configuration resolution while including necessary dependencies From 4d87ebadc9f77302ab68ef888799773a62b82403 Mon Sep 17 00:00:00 2001 From: Jinwoo Hwang Date: Tue, 16 Sep 2025 06:26:58 -0400 Subject: [PATCH 8/9] addressed format --- geode-assembly/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geode-assembly/build.gradle b/geode-assembly/build.gradle index eec42f77349..e49cbe32a9f 100755 --- a/geode-assembly/build.gradle +++ b/geode-assembly/build.gradle @@ -460,7 +460,7 @@ tasks.register('docs', Javadoc) { exclude '**/internal/**' exclude '**/impl/**' exclude '**/test/**' - + // Use javadocOnly configuration with transitive dependencies to get external libraries // This avoids cross-project configuration resolution while including necessary dependencies From 43c72e57f9d9d80c9ebdd3a2a85a8a7c906c94d9 Mon Sep 17 00:00:00 2001 From: Jinwoo Hwang Date: Tue, 16 Sep 2025 09:13:04 -0400 Subject: [PATCH 9/9] added impl --- geode-assembly/build.gradle | 1 - 1 file changed, 1 deletion(-) diff --git a/geode-assembly/build.gradle b/geode-assembly/build.gradle index e49cbe32a9f..20198f0d8dd 100755 --- a/geode-assembly/build.gradle +++ b/geode-assembly/build.gradle @@ -458,7 +458,6 @@ tasks.register('docs', Javadoc) { // Common exclude patterns retained (may overlap with per-project excludes) exclude '**/internal/**' - exclude '**/impl/**' exclude '**/test/**'