This is an automated email from the ASF dual-hosted git repository.

janhoy pushed a commit to branch branch_10_0
in repository https://gitbox.apache.org/repos/asf/solr.git

commit 84fa14fc22e7a7bf33211d4292c7eae569823bda
Author: Jan Høydahl <[email protected]>
AuthorDate: Mon Jan 12 21:19:09 2026 +0100

    SOLR-17161 Create the solrj-jetty module (#4038)
    
    Co-authored-by: Kevin Risden <[email protected]>
    Co-authored-by: David Smiley <[email protected]>
    
    (cherry picked from commit 38c56e77d153b8df684d4065f597f38a8f26ee56)
---
 .../v10.0.0/SOLR-17161-separate-jetty-solrj.yml    |   9 +
 gradle/maven/defaults-maven.gradle                 |   1 +
 settings.gradle                                    |   1 +
 solr/benchmark/build.gradle                        |   1 +
 solr/core/build.gradle                             |   1 +
 .../apache/solr/update/StreamingSolrClients.java   |   5 +-
 solr/cross-dc-manager/build.gradle                 |   1 +
 solr/cross-dc-manager/gradle.lockfile              |   8 +-
 solr/licenses/osgi.annotation-LICENSE-ASL.txt      | 201 ---------------------
 solr/licenses/osgi.annotation-NOTICE.txt           |  47 -----
 solr/modules/analysis-extras/build.gradle          |   2 +-
 solr/modules/analysis-extras/gradle.lockfile       |  14 +-
 solr/modules/clustering/gradle.lockfile            |  14 +-
 solr/modules/cross-dc/build.gradle                 |   1 +
 solr/modules/cuvs/gradle.lockfile                  |  14 +-
 solr/modules/extraction/gradle.lockfile            |   6 +-
 solr/modules/gcs-repository/gradle.lockfile        |  14 +-
 solr/modules/jwt-auth/build.gradle                 |  13 +-
 solr/modules/langid/gradle.lockfile                |  14 +-
 solr/modules/language-models/gradle.lockfile       |  14 +-
 solr/modules/ltr/gradle.lockfile                   |  14 +-
 solr/modules/opentelemetry/gradle.lockfile         |  14 +-
 solr/modules/s3-repository/gradle.lockfile         |  14 +-
 solr/modules/scripting/gradle.lockfile             |  14 +-
 solr/modules/sql/gradle.lockfile                   |  14 +-
 solr/solr-ref-guide/build.gradle                   |   2 +
 solr/solr-ref-guide/gradle.lockfile                |  17 +-
 .../pages/basic-authentication-plugin.adoc         |   2 +
 .../modules/deployment-guide/pages/solrj.adoc      |  30 ++-
 .../pages/major-changes-in-solr-10.adoc            |   2 +-
 solr/solrj-jetty/build.gradle                      |  67 +++++++
 solr/{solrj => solrj-jetty}/gradle.lockfile        |  50 ++---
 .../solrj/jetty/AuthenticationStoreHolder.java     |   0
 .../client/solrj/jetty/CloudJettySolrClient.java   |   0
 .../jetty/ConcurrentUpdateJettySolrClient.java     |  46 ++++-
 .../client/solrj/jetty/HttpJettySolrClient.java    |   0
 .../client/solrj/jetty/HttpListenerFactory.java    |   0
 .../solr/client/solrj/jetty/LBJettySolrClient.java |   0
 .../jetty/PreemptiveBasicAuthClientCustomizer.java |   0
 .../apache/solr/client/solrj/jetty/SSLConfig.java  |   0
 .../solrj/jetty/SolrBasicAuthentication.java       |   0
 .../solr/client/solrj/jetty/package-info.java      |   0
 ...oncurrentUpdateJettySolrClientBadInputTest.java |   0
 ...ntUpdateJettySolrClientMultiCollectionTest.java |   0
 .../jetty/ConcurrentUpdateJettySolrClientTest.java |   3 +-
 .../HttpJettySolrClientCompatibilityTest.java      |   0
 .../solrj/jetty/HttpJettySolrClientProxyTest.java  |   0
 .../solrj/jetty/HttpJettySolrClientTest.java       |   0
 solr/solrj-streaming/build.gradle                  |   1 +
 solr/solrj-zookeeper/build.gradle                  |   1 +
 solr/solrj/build.gradle                            |  43 ++++-
 solr/solrj/gradle.lockfile                         |  39 ++--
 .../solrj/impl/ConcurrentUpdateBaseSolrClient.java |  67 ++++++-
 .../client/solrj/impl/SolrClientCustomizer.java    |   3 +-
 solr/test-framework/build.gradle                   |   1 +
 55 files changed, 400 insertions(+), 425 deletions(-)

diff --git a/changelog/v10.0.0/SOLR-17161-separate-jetty-solrj.yml 
b/changelog/v10.0.0/SOLR-17161-separate-jetty-solrj.yml
new file mode 100644
index 00000000000..219a0ba6871
--- /dev/null
+++ b/changelog/v10.0.0/SOLR-17161-separate-jetty-solrj.yml
@@ -0,0 +1,9 @@
+title: Separate out a new solrj-jetty module, meaning users can opt in to the 
jetty http client only if they need it. Also makes 
ConcurrentUpdateBaseSolrClient client independent.
+type: changed
+authors:
+  - name: Jan Høydahl
+  - name: David Smiley
+  - name: Kevin Risden
+links:
+  - name: SOLR-17161
+    url: https://issues.apache.org/jira/browse/SOLR-17161
diff --git a/gradle/maven/defaults-maven.gradle 
b/gradle/maven/defaults-maven.gradle
index fa47290feef..2b2da08d198 100644
--- a/gradle/maven/defaults-maven.gradle
+++ b/gradle/maven/defaults-maven.gradle
@@ -28,6 +28,7 @@ configure(rootProject) {
         ":solr:cross-dc-manager",
         ":solr:core",
         ":solr:solrj",
+        ":solr:solrj-jetty",
         ":solr:solrj-streaming",
         ":solr:solrj-zookeeper",
         ":solr:test-framework",
diff --git a/settings.gradle b/settings.gradle
index 08cee48a39a..dfbc62b5654 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -38,6 +38,7 @@ includeBuild("build-tools/missing-doclet")
 include ":platform"
 include "solr:api"
 include "solr:solrj"
+include "solr:solrj-jetty"
 include "solr:solrj-zookeeper"
 include "solr:solrj-streaming"
 include "solr:core"
diff --git a/solr/benchmark/build.gradle b/solr/benchmark/build.gradle
index 48c97747f04..eeb67b7dbf7 100644
--- a/solr/benchmark/build.gradle
+++ b/solr/benchmark/build.gradle
@@ -44,6 +44,7 @@ dependencies {
   implementation project(':solr:test-framework')
   implementation project(':solr:core')
   implementation project(':solr:solrj')
+  implementation project(':solr:solrj-jetty')
   implementation project(':solr:solrj-streaming')
 
   implementation libs.apache.lucene.core
diff --git a/solr/core/build.gradle b/solr/core/build.gradle
index 7662b8af3b6..ea97b09eba6 100644
--- a/solr/core/build.gradle
+++ b/solr/core/build.gradle
@@ -48,6 +48,7 @@ dependencies {
 
   api project(':solr:api')
   api project(':solr:solrj')
+  implementation project(':solr:solrj-jetty')
   api project(':solr:solrj-zookeeper')
   api project(':solr:solrj-streaming')
 
diff --git 
a/solr/core/src/java/org/apache/solr/update/StreamingSolrClients.java 
b/solr/core/src/java/org/apache/solr/update/StreamingSolrClients.java
index 1b281abf802..dc0b5d77556 100644
--- a/solr/core/src/java/org/apache/solr/update/StreamingSolrClients.java
+++ b/solr/core/src/java/org/apache/solr/update/StreamingSolrClients.java
@@ -151,8 +151,9 @@ class ErrorReportingConcurrentUpdateSolrClient extends 
ConcurrentUpdateJettySolr
   }
 
   @Override
-  public void onSuccess(Response resp, InputStream respBody) {
-    req.trackRequestResult(resp, respBody, true);
+  public void onSuccess(Object responseMetadata, InputStream respBody) {
+    Response jettyResponse = (Response) responseMetadata;
+    req.trackRequestResult(jettyResponse, respBody, true);
   }
 
   static class Builder extends ConcurrentUpdateJettySolrClient.Builder {
diff --git a/solr/cross-dc-manager/build.gradle 
b/solr/cross-dc-manager/build.gradle
index f037f8b85f9..e6b120190f2 100644
--- a/solr/cross-dc-manager/build.gradle
+++ b/solr/cross-dc-manager/build.gradle
@@ -46,6 +46,7 @@ dependencies {
   runtimeOnly libs.lmax.disruptor
 
   testImplementation project(':solr:test-framework')
+  testImplementation project(':solr:solrj-jetty')
   testImplementation libs.apache.lucene.testframework
   testImplementation libs.carrotsearch.randomizedtesting.runner
   testImplementation libs.junit.junit
diff --git a/solr/cross-dc-manager/gradle.lockfile 
b/solr/cross-dc-manager/gradle.lockfile
index 790f37b28dd..a6ae16d5167 100644
--- a/solr/cross-dc-manager/gradle.lockfile
+++ b/solr/cross-dc-manager/gradle.lockfile
@@ -157,11 +157,11 @@ 
org.eclipse.jetty.ee10:jetty-ee10-servlet:12.0.27=compileClasspath,jarValidation
 org.eclipse.jetty.ee10:jetty-ee10-servlets:12.0.27=solrPlatformLibs
 org.eclipse.jetty.ee10:jetty-ee10-webapp:12.0.27=solrPlatformLibs
 
org.eclipse.jetty.http2:jetty-http2-client-transport:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-client:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-common:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-hpack:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-common:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-hpack:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.http2:jetty-http2-server:12.0.27=jarValidation,solrPlatformLibs,testRuntimeClasspath
-org.eclipse.jetty:jetty-alpn-client:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-alpn-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-alpn-java-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.eclipse.jetty:jetty-alpn-java-server:12.0.27=jarValidation,solrPlatformLibs,testRuntimeClasspath
 
org.eclipse.jetty:jetty-alpn-server:12.0.27=jarValidation,solrPlatformLibs,testRuntimeClasspath
diff --git a/solr/licenses/osgi.annotation-LICENSE-ASL.txt 
b/solr/licenses/osgi.annotation-LICENSE-ASL.txt
deleted file mode 100644
index 8dada3edaf5..00000000000
--- a/solr/licenses/osgi.annotation-LICENSE-ASL.txt
+++ /dev/null
@@ -1,201 +0,0 @@
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "{}"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright {yyyy} {name of copyright owner}
-
-   Licensed 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.
diff --git a/solr/licenses/osgi.annotation-NOTICE.txt 
b/solr/licenses/osgi.annotation-NOTICE.txt
deleted file mode 100644
index 93d1bc067f0..00000000000
--- a/solr/licenses/osgi.annotation-NOTICE.txt
+++ /dev/null
@@ -1,47 +0,0 @@
-# Notices for osgi
-
-This content is produced and maintained by the OSGi Specification Project.
-
- * Project home: https://projects.eclipse.org/projects/technology.osgi
-
-## Trademarks
-
-OSGi and the OSGi Logo are trademarks of the Eclipse Foundation. Eclipse and
-the Eclipse Logo are registered trademarks of the Eclipse Foundation.
-
-## Copyright
-
-All content is the property of the respective authors or their employers.
-For more information regarding authorship of content, please consult the
-listed source code repository logs.
-
-## Declared Project Licenses
-
-This program and the accompanying materials are made available under the terms
-of the Apache License, Version 2.0 which is available at
-http://www.apache.org/licenses/LICENSE-2.0
-
-SPDX-License-Identifier: Apache-2.0
-
-## Source Code
-
-The project maintains the following source code repositories:
-
- * https://github.com/osgi/osgi.git
-
-## Third-party Content
-
-The Content may include items that have been sourced from third parties as 
follows:</p>
-
-JUnit
-
- * License: CPL-1.0 (JUnit 3), EPL-1.0 (JUnit 4), EPL-2.0 (JUnit 5)
- * Project: https://junit.org/
- * Source: https://github.com/junit-team
-
-Apache Software Foundation
-
- * License: Apache-2.0
- * Project: https://apache.org/
- * Source: https://github.com/apache/
- 
diff --git a/solr/modules/analysis-extras/build.gradle 
b/solr/modules/analysis-extras/build.gradle
index f7fa13c8f76..5b4d13a038f 100644
--- a/solr/modules/analysis-extras/build.gradle
+++ b/solr/modules/analysis-extras/build.gradle
@@ -28,7 +28,7 @@ dependencies {
   implementation libs.apache.lucene.analysis.icu
   runtimeOnly libs.apache.lucene.analysis.morfologik
   implementation libs.apache.lucene.analysis.opennlp
-  
+
   implementation libs.onnxruntime
   runtimeOnly libs.apache.lucene.analysis.smartcn
   runtimeOnly libs.apache.lucene.analysis.stempel
diff --git a/solr/modules/analysis-extras/gradle.lockfile 
b/solr/modules/analysis-extras/gradle.lockfile
index 9cc21db3732..8b8513a2470 100644
--- a/solr/modules/analysis-extras/gradle.lockfile
+++ b/solr/modules/analysis-extras/gradle.lockfile
@@ -132,22 +132,22 @@ 
org.carrot2:morfologik-stemming:2.1.9=jarValidation,runtimeClasspath,runtimeLibs
 
org.codehaus.woodstox:stax2-api:4.2.2=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.eclipse.jetty.ee10:jetty-ee10-servlet:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.http2:jetty-http2-client-transport:12.0.27=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-client:12.0.27=apiHelper,compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-common:12.0.27=apiHelper,compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-hpack:12.0.27=apiHelper,compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-client:12.0.27=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-common:12.0.27=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-hpack:12.0.27=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.http2:jetty-http2-server:12.0.27=jarValidation,testRuntimeClasspath
-org.eclipse.jetty:jetty-alpn-client:12.0.27=apiHelper,compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-alpn-client:12.0.27=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-alpn-java-client:12.0.27=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.eclipse.jetty:jetty-alpn-java-server:12.0.27=jarValidation,testRuntimeClasspath
 org.eclipse.jetty:jetty-alpn-server:12.0.27=jarValidation,testRuntimeClasspath
 
org.eclipse.jetty:jetty-client:12.0.27=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
-org.eclipse.jetty:jetty-http:12.0.27=apiHelper,compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty:jetty-io:12.0.27=apiHelper,compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-http:12.0.27=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-io:12.0.27=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 org.eclipse.jetty:jetty-rewrite:12.0.27=jarValidation,testRuntimeClasspath
 
org.eclipse.jetty:jetty-security:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-server:12.0.27=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-session:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty:jetty-util:12.0.27=apiHelper,compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-util:12.0.27=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.glassfish.hk2.external:aopalliance-repackaged:3.1.1=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.glassfish.hk2:hk2-api:3.1.1=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.glassfish.hk2:hk2-locator:3.1.1=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
diff --git a/solr/modules/clustering/gradle.lockfile 
b/solr/modules/clustering/gradle.lockfile
index 6717787ed26..61badb20d76 100644
--- a/solr/modules/clustering/gradle.lockfile
+++ b/solr/modules/clustering/gradle.lockfile
@@ -120,22 +120,22 @@ 
org.carrot2:carrot2-core:4.8.1=compileClasspath,jarValidation,runtimeClasspath,r
 
org.codehaus.woodstox:stax2-api:4.2.2=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.eclipse.jetty.ee10:jetty-ee10-servlet:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.http2:jetty-http2-client-transport:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-client:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-common:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-hpack:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-common:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-hpack:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.http2:jetty-http2-server:12.0.27=jarValidation,testRuntimeClasspath
-org.eclipse.jetty:jetty-alpn-client:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-alpn-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-alpn-java-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.eclipse.jetty:jetty-alpn-java-server:12.0.27=jarValidation,testRuntimeClasspath
 org.eclipse.jetty:jetty-alpn-server:12.0.27=jarValidation,testRuntimeClasspath
 
org.eclipse.jetty:jetty-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
-org.eclipse.jetty:jetty-http:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty:jetty-io:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-http:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-io:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 org.eclipse.jetty:jetty-rewrite:12.0.27=jarValidation,testRuntimeClasspath
 
org.eclipse.jetty:jetty-security:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-server:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-session:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty:jetty-util:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-util:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.glassfish.hk2.external:aopalliance-repackaged:3.1.1=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.glassfish.hk2:hk2-api:3.1.1=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.glassfish.hk2:hk2-locator:3.1.1=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
diff --git a/solr/modules/cross-dc/build.gradle 
b/solr/modules/cross-dc/build.gradle
index bfcb128ce59..4d90227db79 100644
--- a/solr/modules/cross-dc/build.gradle
+++ b/solr/modules/cross-dc/build.gradle
@@ -32,6 +32,7 @@ dependencies {
   api project(':solr:core')
   implementation project(':solr:solrj')
   implementation project(':solr:solrj-zookeeper')
+  implementation project(':solr:solrj-jetty')
 
   implementation libs.slf4j.api
   implementation libs.apache.kafka.clients
diff --git a/solr/modules/cuvs/gradle.lockfile 
b/solr/modules/cuvs/gradle.lockfile
index a51cccb3c97..d363f50bcbf 100644
--- a/solr/modules/cuvs/gradle.lockfile
+++ b/solr/modules/cuvs/gradle.lockfile
@@ -121,22 +121,22 @@ 
org.apiguardian:apiguardian-api:1.1.2=jarValidation,testRuntimeClasspath
 
org.codehaus.woodstox:stax2-api:4.2.2=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.eclipse.jetty.ee10:jetty-ee10-servlet:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.http2:jetty-http2-client-transport:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-client:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-common:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-hpack:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-common:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-hpack:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.http2:jetty-http2-server:12.0.27=jarValidation,testRuntimeClasspath
-org.eclipse.jetty:jetty-alpn-client:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-alpn-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-alpn-java-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.eclipse.jetty:jetty-alpn-java-server:12.0.27=jarValidation,testRuntimeClasspath
 org.eclipse.jetty:jetty-alpn-server:12.0.27=jarValidation,testRuntimeClasspath
 
org.eclipse.jetty:jetty-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
-org.eclipse.jetty:jetty-http:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty:jetty-io:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-http:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-io:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 org.eclipse.jetty:jetty-rewrite:12.0.27=jarValidation,testRuntimeClasspath
 
org.eclipse.jetty:jetty-security:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-server:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-session:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty:jetty-util:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-util:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.glassfish.hk2.external:aopalliance-repackaged:3.1.1=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.glassfish.hk2:hk2-api:3.1.1=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.glassfish.hk2:hk2-locator:3.1.1=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
diff --git a/solr/modules/extraction/gradle.lockfile 
b/solr/modules/extraction/gradle.lockfile
index 7923817ab01..65622e16e6b 100644
--- a/solr/modules/extraction/gradle.lockfile
+++ b/solr/modules/extraction/gradle.lockfile
@@ -125,9 +125,9 @@ 
org.apiguardian:apiguardian-api:1.1.2=jarValidation,testRuntimeClasspath
 
org.codehaus.woodstox:stax2-api:4.2.2=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.eclipse.jetty.ee10:jetty-ee10-servlet:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.http2:jetty-http2-client-transport:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-client:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-common:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-hpack:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-common:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-hpack:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.http2:jetty-http2-server:12.0.27=jarValidation,testRuntimeClasspath
 
org.eclipse.jetty:jetty-alpn-client:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-alpn-java-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
diff --git a/solr/modules/gcs-repository/gradle.lockfile 
b/solr/modules/gcs-repository/gradle.lockfile
index 78f51b0f33b..28f0cf1a411 100644
--- a/solr/modules/gcs-repository/gradle.lockfile
+++ b/solr/modules/gcs-repository/gradle.lockfile
@@ -172,22 +172,22 @@ 
org.codehaus.woodstox:stax2-api:4.2.2=apiHelper,jarValidation,runtimeClasspath,r
 
org.conscrypt:conscrypt-openjdk-uber:2.5.2=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.ee10:jetty-ee10-servlet:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.http2:jetty-http2-client-transport:12.0.27=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-client:12.0.27=apiHelper,compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-common:12.0.27=apiHelper,compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-hpack:12.0.27=apiHelper,compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-client:12.0.27=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-common:12.0.27=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-hpack:12.0.27=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.http2:jetty-http2-server:12.0.27=jarValidation,testRuntimeClasspath
-org.eclipse.jetty:jetty-alpn-client:12.0.27=apiHelper,compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-alpn-client:12.0.27=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-alpn-java-client:12.0.27=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.eclipse.jetty:jetty-alpn-java-server:12.0.27=jarValidation,testRuntimeClasspath
 org.eclipse.jetty:jetty-alpn-server:12.0.27=jarValidation,testRuntimeClasspath
 
org.eclipse.jetty:jetty-client:12.0.27=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
-org.eclipse.jetty:jetty-http:12.0.27=apiHelper,compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty:jetty-io:12.0.27=apiHelper,compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-http:12.0.27=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-io:12.0.27=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 org.eclipse.jetty:jetty-rewrite:12.0.27=jarValidation,testRuntimeClasspath
 
org.eclipse.jetty:jetty-security:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-server:12.0.27=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-session:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty:jetty-util:12.0.27=apiHelper,compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-util:12.0.27=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.glassfish.hk2.external:aopalliance-repackaged:3.1.1=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.glassfish.hk2:hk2-api:3.1.1=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.glassfish.hk2:hk2-locator:3.1.1=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
diff --git a/solr/modules/jwt-auth/build.gradle 
b/solr/modules/jwt-auth/build.gradle
index 7cf05aa2cef..80cb694fb3a 100644
--- a/solr/modules/jwt-auth/build.gradle
+++ b/solr/modules/jwt-auth/build.gradle
@@ -19,12 +19,21 @@ apply plugin: 'java-library'
 
 description = 'JWT / OpenID Connect / OAuth2 authentication plugin'
 
+// This is a hacky way to use permitTestUnusedDeclared with bom declared 
dependencies.
+// See 
https://github.com/gradle-dependency-analyze/gradle-dependency-analyze/issues/108
+configurations {
+  constraintsOnly
+  permitTestUnusedDeclared.extendsFrom constraintsOnly
+  implementation.extendsFrom constraintsOnly
+}
+
 dependencies {
-  implementation platform(project(':platform'))
-  implementation platform(libs.fasterxml.jackson.bom)
+  constraintsOnly platform(project(':platform'))
+  constraintsOnly platform(libs.fasterxml.jackson.bom)
 
   implementation project(':solr:core')
   implementation project(':solr:solrj')
+  implementation project(':solr:solrj-jetty')
 
   implementation libs.bc.jose4j
 
diff --git a/solr/modules/langid/gradle.lockfile 
b/solr/modules/langid/gradle.lockfile
index d8a1650fe87..8393ff25e2c 100644
--- a/solr/modules/langid/gradle.lockfile
+++ b/solr/modules/langid/gradle.lockfile
@@ -122,22 +122,22 @@ 
org.apiguardian:apiguardian-api:1.1.2=jarValidation,testRuntimeClasspath
 
org.codehaus.woodstox:stax2-api:4.2.2=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.eclipse.jetty.ee10:jetty-ee10-servlet:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.http2:jetty-http2-client-transport:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-client:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-common:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-hpack:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-common:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-hpack:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.http2:jetty-http2-server:12.0.27=jarValidation,testRuntimeClasspath
-org.eclipse.jetty:jetty-alpn-client:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-alpn-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-alpn-java-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.eclipse.jetty:jetty-alpn-java-server:12.0.27=jarValidation,testRuntimeClasspath
 org.eclipse.jetty:jetty-alpn-server:12.0.27=jarValidation,testRuntimeClasspath
 
org.eclipse.jetty:jetty-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
-org.eclipse.jetty:jetty-http:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty:jetty-io:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-http:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-io:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 org.eclipse.jetty:jetty-rewrite:12.0.27=jarValidation,testRuntimeClasspath
 
org.eclipse.jetty:jetty-security:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-server:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-session:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty:jetty-util:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-util:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.glassfish.hk2.external:aopalliance-repackaged:3.1.1=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.glassfish.hk2:hk2-api:3.1.1=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.glassfish.hk2:hk2-locator:3.1.1=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
diff --git a/solr/modules/language-models/gradle.lockfile 
b/solr/modules/language-models/gradle.lockfile
index 7bef6e93664..98c0b88f6ea 100644
--- a/solr/modules/language-models/gradle.lockfile
+++ b/solr/modules/language-models/gradle.lockfile
@@ -134,22 +134,22 @@ 
org.apiguardian:apiguardian-api:1.1.2=jarValidation,testRuntimeClasspath
 
org.codehaus.woodstox:stax2-api:4.2.2=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.eclipse.jetty.ee10:jetty-ee10-servlet:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.http2:jetty-http2-client-transport:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-client:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-common:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-hpack:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-common:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-hpack:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.http2:jetty-http2-server:12.0.27=jarValidation,testRuntimeClasspath
-org.eclipse.jetty:jetty-alpn-client:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-alpn-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-alpn-java-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.eclipse.jetty:jetty-alpn-java-server:12.0.27=jarValidation,testRuntimeClasspath
 org.eclipse.jetty:jetty-alpn-server:12.0.27=jarValidation,testRuntimeClasspath
 
org.eclipse.jetty:jetty-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
-org.eclipse.jetty:jetty-http:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty:jetty-io:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-http:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-io:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 org.eclipse.jetty:jetty-rewrite:12.0.27=jarValidation,testRuntimeClasspath
 
org.eclipse.jetty:jetty-security:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-server:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-session:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty:jetty-util:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-util:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.glassfish.hk2.external:aopalliance-repackaged:3.1.1=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.glassfish.hk2:hk2-api:3.1.1=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.glassfish.hk2:hk2-locator:3.1.1=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
diff --git a/solr/modules/ltr/gradle.lockfile b/solr/modules/ltr/gradle.lockfile
index e36ee0d7703..9e7b9f8326b 100644
--- a/solr/modules/ltr/gradle.lockfile
+++ b/solr/modules/ltr/gradle.lockfile
@@ -120,22 +120,22 @@ 
org.apiguardian:apiguardian-api:1.1.2=jarValidation,testRuntimeClasspath
 
org.codehaus.woodstox:stax2-api:4.2.2=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.eclipse.jetty.ee10:jetty-ee10-servlet:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.http2:jetty-http2-client-transport:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-client:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-common:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-hpack:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-common:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-hpack:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.http2:jetty-http2-server:12.0.27=jarValidation,testRuntimeClasspath
-org.eclipse.jetty:jetty-alpn-client:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-alpn-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-alpn-java-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.eclipse.jetty:jetty-alpn-java-server:12.0.27=jarValidation,testRuntimeClasspath
 org.eclipse.jetty:jetty-alpn-server:12.0.27=jarValidation,testRuntimeClasspath
 
org.eclipse.jetty:jetty-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
-org.eclipse.jetty:jetty-http:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty:jetty-io:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-http:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-io:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 org.eclipse.jetty:jetty-rewrite:12.0.27=jarValidation,testRuntimeClasspath
 
org.eclipse.jetty:jetty-security:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-server:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-session:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty:jetty-util:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-util:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.glassfish.hk2.external:aopalliance-repackaged:3.1.1=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.glassfish.hk2:hk2-api:3.1.1=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.glassfish.hk2:hk2-locator:3.1.1=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
diff --git a/solr/modules/opentelemetry/gradle.lockfile 
b/solr/modules/opentelemetry/gradle.lockfile
index effb95844ad..df9a3cb4d3d 100644
--- a/solr/modules/opentelemetry/gradle.lockfile
+++ b/solr/modules/opentelemetry/gradle.lockfile
@@ -153,22 +153,22 @@ 
org.apiguardian:apiguardian-api:1.1.2=jarValidation,testRuntimeClasspath
 
org.codehaus.woodstox:stax2-api:4.2.2=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.eclipse.jetty.ee10:jetty-ee10-servlet:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.http2:jetty-http2-client-transport:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-client:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-common:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-hpack:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-common:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-hpack:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.http2:jetty-http2-server:12.0.27=jarValidation,testRuntimeClasspath
-org.eclipse.jetty:jetty-alpn-client:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-alpn-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-alpn-java-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.eclipse.jetty:jetty-alpn-java-server:12.0.27=jarValidation,testRuntimeClasspath
 org.eclipse.jetty:jetty-alpn-server:12.0.27=jarValidation,testRuntimeClasspath
 
org.eclipse.jetty:jetty-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
-org.eclipse.jetty:jetty-http:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty:jetty-io:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-http:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-io:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 org.eclipse.jetty:jetty-rewrite:12.0.27=jarValidation,testRuntimeClasspath
 
org.eclipse.jetty:jetty-security:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-server:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-session:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty:jetty-util:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-util:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.glassfish.hk2.external:aopalliance-repackaged:3.1.1=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.glassfish.hk2:hk2-api:3.1.1=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.glassfish.hk2:hk2-locator:3.1.1=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
diff --git a/solr/modules/s3-repository/gradle.lockfile 
b/solr/modules/s3-repository/gradle.lockfile
index 432de9d59b3..1caa7e1700a 100644
--- a/solr/modules/s3-repository/gradle.lockfile
+++ b/solr/modules/s3-repository/gradle.lockfile
@@ -157,28 +157,28 @@ 
org.eclipse.jetty.ee10:jetty-ee10-servlet:12.0.27=jarValidation,testCompileClass
 
org.eclipse.jetty.ee10:jetty-ee10-servlets:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.ee10:jetty-ee10-webapp:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.http2:jetty-http2-client-transport:12.0.27=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-client:12.0.27=apiHelper,compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-common:12.0.27=apiHelper,compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-hpack:12.0.27=apiHelper,compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-client:12.0.27=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-common:12.0.27=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-hpack:12.0.27=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.http2:jetty-http2-server:12.0.27=jarValidation,testRuntimeClasspath
 
org.eclipse.jetty.websocket:jetty-websocket-core-client:12.0.12=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.websocket:jetty-websocket-core-common:12.0.12=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.websocket:jetty-websocket-core-server:12.0.12=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.websocket:jetty-websocket-jetty-api:12.0.12=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.websocket:jetty-websocket-jetty-common:12.0.12=jarValidation,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty:jetty-alpn-client:12.0.27=apiHelper,compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-alpn-client:12.0.27=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-alpn-java-client:12.0.27=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.eclipse.jetty:jetty-alpn-java-server:12.0.27=jarValidation,testRuntimeClasspath
 org.eclipse.jetty:jetty-alpn-server:12.0.27=jarValidation,testRuntimeClasspath
 
org.eclipse.jetty:jetty-client:12.0.27=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 org.eclipse.jetty:jetty-ee:12.0.27=jarValidation,testRuntimeClasspath
-org.eclipse.jetty:jetty-http:12.0.27=apiHelper,compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty:jetty-io:12.0.27=apiHelper,compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-http:12.0.27=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-io:12.0.27=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 org.eclipse.jetty:jetty-rewrite:12.0.27=jarValidation,testRuntimeClasspath
 
org.eclipse.jetty:jetty-security:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-server:12.0.27=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-session:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty:jetty-util:12.0.27=apiHelper,compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-util:12.0.27=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 org.eclipse.jetty:jetty-xml:12.0.27=jarValidation,testRuntimeClasspath
 
org.glassfish.hk2.external:aopalliance-repackaged:3.1.1=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.glassfish.hk2:hk2-api:3.1.1=apiHelper,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
diff --git a/solr/modules/scripting/gradle.lockfile 
b/solr/modules/scripting/gradle.lockfile
index c0f90253c17..c138d280a53 100644
--- a/solr/modules/scripting/gradle.lockfile
+++ b/solr/modules/scripting/gradle.lockfile
@@ -119,22 +119,22 @@ 
org.apiguardian:apiguardian-api:1.1.2=jarValidation,testRuntimeClasspath
 
org.codehaus.woodstox:stax2-api:4.2.2=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.eclipse.jetty.ee10:jetty-ee10-servlet:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.http2:jetty-http2-client-transport:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-client:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-common:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-hpack:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-common:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-hpack:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.http2:jetty-http2-server:12.0.27=jarValidation,testRuntimeClasspath
-org.eclipse.jetty:jetty-alpn-client:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-alpn-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-alpn-java-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.eclipse.jetty:jetty-alpn-java-server:12.0.27=jarValidation,testRuntimeClasspath
 org.eclipse.jetty:jetty-alpn-server:12.0.27=jarValidation,testRuntimeClasspath
 
org.eclipse.jetty:jetty-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
-org.eclipse.jetty:jetty-http:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty:jetty-io:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-http:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-io:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 org.eclipse.jetty:jetty-rewrite:12.0.27=jarValidation,testRuntimeClasspath
 
org.eclipse.jetty:jetty-security:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-server:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-session:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty:jetty-util:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-util:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.glassfish.hk2.external:aopalliance-repackaged:3.1.1=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.glassfish.hk2:hk2-api:3.1.1=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.glassfish.hk2:hk2-locator:3.1.1=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
diff --git a/solr/modules/sql/gradle.lockfile b/solr/modules/sql/gradle.lockfile
index a86f12333ed..e5a340571d3 100644
--- a/solr/modules/sql/gradle.lockfile
+++ b/solr/modules/sql/gradle.lockfile
@@ -143,22 +143,22 @@ 
org.codehaus.janino:janino:3.1.11=jarValidation,runtimeClasspath,runtimeLibs,tes
 
org.codehaus.woodstox:stax2-api:4.2.2=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.eclipse.jetty.ee10:jetty-ee10-servlet:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.http2:jetty-http2-client-transport:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-client:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-common:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-hpack:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-common:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-hpack:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.http2:jetty-http2-server:12.0.27=jarValidation,testRuntimeClasspath
-org.eclipse.jetty:jetty-alpn-client:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-alpn-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-alpn-java-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.eclipse.jetty:jetty-alpn-java-server:12.0.27=jarValidation,testRuntimeClasspath
 org.eclipse.jetty:jetty-alpn-server:12.0.27=jarValidation,testRuntimeClasspath
 
org.eclipse.jetty:jetty-client:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
-org.eclipse.jetty:jetty-http:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty:jetty-io:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-http:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-io:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 org.eclipse.jetty:jetty-rewrite:12.0.27=jarValidation,testRuntimeClasspath
 
org.eclipse.jetty:jetty-security:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-server:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-session:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty:jetty-util:12.0.27=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-util:12.0.27=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.glassfish.hk2.external:aopalliance-repackaged:3.1.1=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.glassfish.hk2:hk2-api:3.1.1=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.glassfish.hk2:hk2-locator:3.1.1=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
diff --git a/solr/solr-ref-guide/build.gradle b/solr/solr-ref-guide/build.gradle
index 4dced1fdacc..8be570b41b8 100644
--- a/solr/solr-ref-guide/build.gradle
+++ b/solr/solr-ref-guide/build.gradle
@@ -546,6 +546,8 @@ dependencies {
     // For the SolrJ examples
     testImplementation project(":solr:core")
     testImplementation project(":solr:solrj")
+    testImplementation project(":solr:solrj-jetty")
+    testRuntimeOnly project(":solr:modules:sql")
     testImplementation project(":solr:test-framework")
     testImplementation libs.junit.junit
 }
diff --git a/solr/solr-ref-guide/gradle.lockfile 
b/solr/solr-ref-guide/gradle.lockfile
index dd92b13ba95..b4fc8293e4f 100644
--- a/solr/solr-ref-guide/gradle.lockfile
+++ b/solr/solr-ref-guide/gradle.lockfile
@@ -25,7 +25,8 @@ 
com.google.guava:failureaccess:1.0.3=annotationProcessor,errorprone,testAnnotati
 
com.google.guava:guava:33.4.8-jre=annotationProcessor,errorprone,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath
 
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=annotationProcessor,errorprone,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath
 
com.google.j2objc:j2objc-annotations:3.1=annotationProcessor,errorprone,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath
-com.google.protobuf:protobuf-java:3.25.8=annotationProcessor,errorprone,testAnnotationProcessor
+com.google.protobuf:protobuf-java:3.25.8=annotationProcessor,errorprone,testAnnotationProcessor,testRuntimeClasspath
+com.googlecode.json-simple:json-simple:1.1.1=testRuntimeClasspath
 com.j256.simplemagic:simplemagic:1.17=testRuntimeClasspath
 com.jayway.jsonpath:json-path:2.9.0=testRuntimeClasspath
 com.tdunning:t-digest:3.3=testRuntimeClasspath
@@ -75,12 +76,20 @@ jakarta.ws.rs:jakarta.ws.rs-api:3.1.0=testRuntimeClasspath
 
javax.inject:javax.inject:1=annotationProcessor,errorprone,testAnnotationProcessor
 junit:junit:4.13.2=testCompileClasspath,testRuntimeClasspath
 org.antlr:antlr4-runtime:4.13.2=testRuntimeClasspath
+org.apache.calcite.avatica:avatica-core:1.25.0=testRuntimeClasspath
+org.apache.calcite.avatica:avatica-metrics:1.25.0=testRuntimeClasspath
+org.apache.calcite:calcite-core:1.37.0=testRuntimeClasspath
+org.apache.calcite:calcite-linq4j:1.37.0=testRuntimeClasspath
 org.apache.commons:commons-exec:1.5.0=testRuntimeClasspath
 org.apache.commons:commons-lang3:3.20.0=testRuntimeClasspath
 org.apache.commons:commons-math3:3.6.1=testRuntimeClasspath
+org.apache.commons:commons-text:1.15.0=testRuntimeClasspath
 
org.apache.curator:curator-client:5.9.0=testCompileClasspath,testRuntimeClasspath
 
org.apache.curator:curator-framework:5.9.0=testCompileClasspath,testRuntimeClasspath
 org.apache.curator:curator-test:5.9.0=testRuntimeClasspath
+org.apache.httpcomponents.client5:httpclient5:5.2.1=testRuntimeClasspath
+org.apache.httpcomponents.core5:httpcore5-h2:5.2=testRuntimeClasspath
+org.apache.httpcomponents.core5:httpcore5:5.2.3=testRuntimeClasspath
 org.apache.httpcomponents:httpclient:4.5.14=testRuntimeClasspath
 org.apache.httpcomponents:httpcore:4.4.16=testRuntimeClasspath
 org.apache.httpcomponents:httpmime:4.5.14=testRuntimeClasspath
@@ -113,6 +122,9 @@ 
org.apache.lucene:lucene-test-framework:10.3.2=testCompileClasspath,testRuntimeC
 
org.apache.zookeeper:zookeeper-jute:3.9.4=testCompileClasspath,testRuntimeClasspath
 org.apache.zookeeper:zookeeper:3.9.4=testCompileClasspath,testRuntimeClasspath
 org.apiguardian:apiguardian-api:1.1.2=testRuntimeClasspath
+org.checkerframework:checker-qual:3.44.0=testRuntimeClasspath
+org.codehaus.janino:commons-compiler:3.1.11=testRuntimeClasspath
+org.codehaus.janino:janino:3.1.11=testRuntimeClasspath
 org.codehaus.woodstox:stax2-api:4.2.2=testRuntimeClasspath
 
org.eclipse.jetty.ee10:jetty-ee10-servlet:12.0.27=testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.http2:jetty-http2-client-transport:12.0.27=testRuntimeClasspath
@@ -150,6 +162,9 @@ 
org.jspecify:jspecify:1.0.0=annotationProcessor,errorprone,testAnnotationProcess
 org.junit.jupiter:junit-jupiter-api:5.6.2=testRuntimeClasspath
 org.junit.platform:junit-platform-commons:1.6.2=testRuntimeClasspath
 org.junit:junit-bom:5.6.2=testRuntimeClasspath
+org.locationtech.jts.io:jts-io-common:1.19.0=testRuntimeClasspath
+org.locationtech.jts:jts-core:1.19.0=testRuntimeClasspath
+org.locationtech.proj4j:proj4j:1.2.2=testRuntimeClasspath
 org.locationtech.spatial4j:spatial4j:0.8=testRuntimeClasspath
 org.opentest4j:opentest4j:1.2.0=testRuntimeClasspath
 org.ow2.asm:asm-commons:9.8=testRuntimeClasspath
diff --git 
a/solr/solr-ref-guide/modules/deployment-guide/pages/basic-authentication-plugin.adoc
 
b/solr/solr-ref-guide/modules/deployment-guide/pages/basic-authentication-plugin.adoc
index 9121f0046fd..f84361e0e94 100644
--- 
a/solr/solr-ref-guide/modules/deployment-guide/pages/basic-authentication-plugin.adoc
+++ 
b/solr/solr-ref-guide/modules/deployment-guide/pages/basic-authentication-plugin.adoc
@@ -339,6 +339,8 @@ It also doesn't work with the many `SolrClient` methods 
which don't consume `Sol
 HttpJettySolrClient & HttpJdkSolrClient support setting the credentials at the 
client level when building it.
 This will ensure all requests issued with this particular client get the Basic 
Authentication headers set.
 
+NOTE: The examples below use `HttpJettySolrClient`, which requires the 
`solr-solrj-jetty` maven dependency.
+
 [source,java]
 ----
 var client = new HttpJettySolrClient.Builder(solrUrl)
diff --git a/solr/solr-ref-guide/modules/deployment-guide/pages/solrj.adoc 
b/solr/solr-ref-guide/modules/deployment-guide/pages/solrj.adoc
index c96421826cc..40f2dea68d9 100644
--- a/solr/solr-ref-guide/modules/deployment-guide/pages/solrj.adoc
+++ b/solr/solr-ref-guide/modules/deployment-guide/pages/solrj.adoc
@@ -54,6 +54,32 @@ For projects built with Gradle, place the following in your 
`build.gradle`:
 compile group: 'org.apache.solr', name: 'solr-solrj', version: 
'{solr-full-version}'
 ----
 
+==== Optional Jetty Module
+
+If you want to use Jetty-based HTTP clients (`HttpJettySolrClient`, 
`ConcurrentUpdateJettySolrClient`,
+`LBJettySolrClient`, or `CloudJettySolrClient`), you need to add the maven 
dependency `solr-solrj-jetty`:
+
+[source,xml,subs="verbatim,attributes"]
+----
+<dependency>
+  <groupId>org.apache.solr</groupId>
+  <artifactId>solr-solrj-jetty</artifactId>
+  <version>{solr-full-version}</version>
+</dependency>
+----
+
+For Gradle:
+
+[source,groovy,subs="attributes"]
+----
+compile group: 'org.apache.solr', name: 'solrj-solrj-jetty', version: 
'{solr-full-version}'
+----
+
+Alternatively, you can use `HttpJdkSolrClient` from the base `solr-solrj` 
artifact,
+which uses Java's built-in HTTP client and has no additional dependencies.
+
+==== Other Optional Modules
+
 If you want to use `CloudSolrClient` _and_ have it talk directly to ZooKeeper, 
you will need to add a dependency on the `solr-solrj-zookeeper` artifact.
 
 If you want to build and use 
xref:query-guide:streaming-expressions.adoc[Streaming Expressions] classes in 
your Java code, you will need to add a dependency on the `solr-solrj-streaming` 
artifact.
@@ -95,11 +121,11 @@ Requests are sent in the form of 
{solr-javadocs}/solrj/org/apache/solr/client/so
 
 `SolrClient` has a few concrete implementations, each geared towards a 
different usage-pattern or resiliency model:
 
-- 
{solr-javadocs}/solrj/org/apache/solr/client/solrj/jetty/HttpJettySolrClient.html[`HttpJettySolrClient`]
 - a general purpose client based on Jetty HttpClient.  Supports HTTP/2 and 
HTTP/1.1, async, non-blocking.  Most used & tested.
+- 
{solr-javadocs}/solrj-jetty/org/apache/solr/client/solrj/jetty/HttpJettySolrClient.html[`HttpJettySolrClient`]
 - a general purpose client based on Jetty HttpClient.  Supports HTTP/2 and 
HTTP/1.1, async, non-blocking.  Most used & tested.
 - 
{solr-javadocs}/solrj/org/apache/solr/client/solrj/impl/HttpJdkSolrClient.html[`HttpJdkSolrClient`]
 - a general purpose client based on JDK HttpClient.  Supports HTTP/2 and 
HTTP/1.1, async, non-blocking.  Has no dependencies.
 - 
{solr-javadocs}/solrj/org/apache/solr/client/solrj/impl/LBSolrClient.html[`LBSolrClient`]
 - an internal client that delegates to other clients pointed at different URLs 
for fail-over/availability.  Adjusts the list of "in-service" nodes based on 
node health.
 - 
{solr-javadocs}/solrj/org/apache/solr/client/solrj/impl/CloudSolrClient.html[`CloudSolrClient`]
 - the ideal client for SolrCloud.  Using the "cluster state", it routes 
requests to the optimal nodes, including splitting out the documents in an 
UpdateRequest to different nodes.
-- 
{solr-javadocs}/solrj/org/apache/solr/client/solrj/jetty/ConcurrentUpdateJettySolrClient.html[`ConcurrentUpdateJettySolrClient`]
 - geared towards indexing-centric workloads.
+- 
{solr-javadocs}/solrj-jetty/org/apache/solr/client/solrj/jetty/ConcurrentUpdateJettySolrClient.html[`ConcurrentUpdateJettySolrClient`]
 - geared towards indexing-centric workloads.
 Buffers documents internally before sending larger batches to Solr.
 
 === Common Configuration Options
diff --git 
a/solr/solr-ref-guide/modules/upgrade-notes/pages/major-changes-in-solr-10.adoc 
b/solr/solr-ref-guide/modules/upgrade-notes/pages/major-changes-in-solr-10.adoc
index c058e7e47c2..5ae6b996e25 100644
--- 
a/solr/solr-ref-guide/modules/upgrade-notes/pages/major-changes-in-solr-10.adoc
+++ 
b/solr/solr-ref-guide/modules/upgrade-notes/pages/major-changes-in-solr-10.adoc
@@ -73,7 +73,7 @@ That no longer happens in Solr 10.  It is only used to load a 
configuration as a
 
 * Starting in 10, the Maven POM for SolrJ does not refer to SolrJ modules like 
ZooKeeper.  If you require such functionality, you need to add additional 
dependencies.
 
-* Classes using Jetty HttpClient have been moved to a new package 
`org.apache.solr.solrj.jetty`.
+* Classes using Jetty HttpClient have been moved to a new package 
`org.apache.solr.solrj.jetty`. To use them from your application, you need to 
include the new `solr-solrj-jetty` artifact.
 The following classes were renamed with some refactorings: `Http2SolrClient` 
to `HttpJettySolrClient`, `ConcurrentUpdateHttp2SolrClient` to 
`ConcurrentUpdateJettySolrClient`, `LBHttp2SolrClient` to `LBJettySolrClient`.
 `CloudHttp2SolrClient.Builder` has moved to `CloudSolrClient`; users should 
generally have no need to refer to `CloudHttp2SolrClient` or any class/member 
with "http2" in it.
 The builder will check if Jetty `HttpClient` is available and use that, 
otherwise fallback on a JDK based `HttpClient`.
diff --git a/solr/solrj-jetty/build.gradle b/solr/solrj-jetty/build.gradle
new file mode 100644
index 00000000000..6f3f6eda4e2
--- /dev/null
+++ b/solr/solrj-jetty/build.gradle
@@ -0,0 +1,67 @@
+/*
+ * 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.
+ */
+
+plugins {
+  id 'java-library'
+}
+
+description = 'Solrj-Jetty - Jetty-based HTTP clients for SolrJ'
+
+dependencies {
+  // Core dependencies on solr-solrj (without Jetty)
+  api project(':solr:solrj')
+
+  // Jetty dependencies - moved from solr-solrj
+  api libs.eclipse.jetty.http2.client
+  implementation libs.eclipse.jetty.http2.httpclienttransport
+  implementation libs.eclipse.jetty.http
+  implementation libs.eclipse.jetty.client
+  implementation libs.eclipse.jetty.util
+  implementation libs.eclipse.jetty.io
+  runtimeOnly libs.eclipse.jetty.alpnjavaclient
+
+  // Inherited from solr-solrj
+  implementation libs.slf4j.api
+
+  compileOnly libs.stephenc.jcip.annotations
+
+  // Test dependencies
+
+  testImplementation project(':solr:test-framework')
+  testImplementation project(':solr:core')
+  testImplementation project(':solr:solrj')
+  // Access to solrj test classes (e.g., HttpSolrClientTestBase)
+  testImplementation project(path: ':solr:solrj', configuration: 
'testArtifacts')
+  // Test classes use main classes from this module
+  testImplementation project(':solr:solrj-jetty')
+
+  testImplementation libs.apache.lucene.testframework
+
+  testImplementation libs.carrotsearch.randomizedtesting.runner
+  testImplementation libs.junit.junit
+  testImplementation libs.hamcrest.hamcrest
+
+  testImplementation libs.jakarta.servlet.api
+
+  testImplementation libs.eclipse.jetty.ee10.servlet
+  testRuntimeOnly(libs.eclipse.jetty.alpnjavaserver, {
+    exclude group: "org.eclipse.jetty.alpn", module: "alpn-api"
+  })
+  testRuntimeOnly(libs.apache.log4j.slf4j2impl, {
+    exclude group: "org.apache.logging.log4j", module: "log4j-api"
+  })
+}
diff --git a/solr/solrj/gradle.lockfile b/solr/solrj-jetty/gradle.lockfile
similarity index 82%
copy from solr/solrj/gradle.lockfile
copy to solr/solrj-jetty/gradle.lockfile
index 9d7118f7943..abc6efacb67 100644
--- a/solr/solrj/gradle.lockfile
+++ b/solr/solrj-jetty/gradle.lockfile
@@ -4,9 +4,9 @@
 
com.carrotsearch.randomizedtesting:randomizedtesting-runner:2.8.3=jarValidation,testCompileClasspath,testRuntimeClasspath
 com.carrotsearch:hppc:0.10.0=jarValidation,testRuntimeClasspath
 
com.fasterxml.jackson.core:jackson-annotations:2.20=apiHelper,compileClasspath,jarValidation,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
-com.fasterxml.jackson.core:jackson-core:2.20.0=compileClasspath,jarValidation,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
-com.fasterxml.jackson.core:jackson-databind:2.20.0=compileClasspath,jarValidation,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
-com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:2.20.0=jarValidation,testCompileClasspath,testRuntimeClasspath
+com.fasterxml.jackson.core:jackson-core:2.20.0=apiHelper,jarValidation,runtimeClasspath,testRuntimeClasspath
+com.fasterxml.jackson.core:jackson-databind:2.20.0=apiHelper,jarValidation,runtimeClasspath,testRuntimeClasspath
+com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:2.20.0=jarValidation,testRuntimeClasspath
 
com.fasterxml.jackson.dataformat:jackson-dataformat-smile:2.20.0=jarValidation,testRuntimeClasspath
 
com.fasterxml.jackson.module:jackson-module-jakarta-xmlbind-annotations:2.20.0=jarValidation,testRuntimeClasspath
 
com.fasterxml.jackson:jackson-bom:2.20.0=apiHelper,compileClasspath,jarValidation,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
@@ -17,18 +17,12 @@ 
com.github.stephenc.jcip:jcip-annotations:1.0-1=compileClasspath,compileOnlyHelp
 
com.google.auto.service:auto-service-annotations:1.0.1=annotationProcessor,errorprone,testAnnotationProcessor
 
com.google.auto.value:auto-value-annotations:1.11.0=annotationProcessor,errorprone,testAnnotationProcessor
 
com.google.auto:auto-common:1.2.2=annotationProcessor,errorprone,testAnnotationProcessor
-com.google.code.findbugs:jsr305:3.0.2=spotless865458226
 
com.google.errorprone:error_prone_annotation:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor
-com.google.errorprone:error_prone_annotations:2.18.0=spotless865458226
 
com.google.errorprone:error_prone_annotations:2.41.0=annotationProcessor,errorprone,jarValidation,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath
 
com.google.errorprone:error_prone_check_api:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor
 
com.google.errorprone:error_prone_core:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor
-com.google.googlejavaformat:google-java-format:1.18.1=spotless865458226
 
com.google.googlejavaformat:google-java-format:1.27.0=annotationProcessor,errorprone,testAnnotationProcessor
-com.google.guava:failureaccess:1.0.1=spotless865458226
 
com.google.guava:failureaccess:1.0.3=annotationProcessor,errorprone,jarValidation,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath
-com.google.guava:guava-parent:32.1.1-jre=spotless865458226
-com.google.guava:guava:32.1.1-jre=spotless865458226
 
com.google.guava:guava:33.4.8-jre=annotationProcessor,errorprone,jarValidation,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath
 
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=annotationProcessor,errorprone,jarValidation,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath
 
com.google.j2objc:j2objc-annotations:3.1=annotationProcessor,errorprone,jarValidation,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath
@@ -37,8 +31,7 @@ 
com.j256.simplemagic:simplemagic:1.17=jarValidation,testRuntimeClasspath
 com.jayway.jsonpath:json-path:2.9.0=jarValidation,testRuntimeClasspath
 com.tdunning:t-digest:3.3=jarValidation,testRuntimeClasspath
 commons-cli:commons-cli:1.10.0=jarValidation,testRuntimeClasspath
-commons-codec:commons-codec:1.19.0=jarValidation,testCompileClasspath,testRuntimeClasspath
-commons-io:commons-io:2.17.0=permitTestUnusedDeclared
+commons-codec:commons-codec:1.19.0=jarValidation,testRuntimeClasspath
 
commons-io:commons-io:2.20.0=jarValidation,testCompileClasspath,testRuntimeClasspath
 
io.dropwizard.metrics:metrics-annotation:4.2.26=jarValidation,testRuntimeClasspath
 io.dropwizard.metrics:metrics-core:4.2.26=jarValidation,testRuntimeClasspath
@@ -46,25 +39,16 @@ 
io.dropwizard.metrics:metrics-jetty12-ee10:4.2.26=jarValidation,testRuntimeClass
 io.dropwizard.metrics:metrics-jetty12:4.2.26=jarValidation,testRuntimeClasspath
 
io.github.eisop:dataflow-errorprone:3.41.0-eisop1=annotationProcessor,errorprone,testAnnotationProcessor
 
io.github.java-diff-utils:java-diff-utils:4.12=annotationProcessor,errorprone,testAnnotationProcessor
-io.netty:netty-buffer:4.1.119.Final=permitTestUnusedDeclared
 
io.netty:netty-buffer:4.2.6.Final=jarValidation,testCompileClasspath,testRuntimeClasspath
 
io.netty:netty-codec-base:4.2.6.Final=jarValidation,testCompileClasspath,testRuntimeClasspath
-io.netty:netty-codec:4.1.119.Final=permitTestUnusedDeclared
-io.netty:netty-common:4.1.119.Final=permitTestUnusedDeclared
 
io.netty:netty-common:4.2.6.Final=jarValidation,testCompileClasspath,testRuntimeClasspath
-io.netty:netty-handler:4.1.119.Final=permitTestUnusedDeclared
 
io.netty:netty-handler:4.2.6.Final=jarValidation,testCompileClasspath,testRuntimeClasspath
-io.netty:netty-resolver:4.1.119.Final=permitTestUnusedDeclared
 
io.netty:netty-resolver:4.2.6.Final=jarValidation,testCompileClasspath,testRuntimeClasspath
-io.netty:netty-tcnative-boringssl-static:2.0.70.Final=jarValidation,permitTestUnusedDeclared,testCompileClasspath,testRuntimeClasspath
-io.netty:netty-tcnative-classes:2.0.70.Final=jarValidation,permitTestUnusedDeclared,testCompileClasspath,testRuntimeClasspath
-io.netty:netty-transport-classes-epoll:4.1.119.Final=permitTestUnusedDeclared
+io.netty:netty-tcnative-boringssl-static:2.0.70.Final=jarValidation,testCompileClasspath,testRuntimeClasspath
+io.netty:netty-tcnative-classes:2.0.70.Final=jarValidation,testCompileClasspath,testRuntimeClasspath
 
io.netty:netty-transport-classes-epoll:4.2.6.Final=jarValidation,testCompileClasspath,testRuntimeClasspath
-io.netty:netty-transport-native-epoll:4.1.119.Final=permitTestUnusedDeclared
 
io.netty:netty-transport-native-epoll:4.2.6.Final=jarValidation,testCompileClasspath,testRuntimeClasspath
-io.netty:netty-transport-native-unix-common:4.1.119.Final=permitTestUnusedDeclared
 
io.netty:netty-transport-native-unix-common:4.2.6.Final=jarValidation,testCompileClasspath,testRuntimeClasspath
-io.netty:netty-transport:4.1.119.Final=permitTestUnusedDeclared
 
io.netty:netty-transport:4.2.6.Final=jarValidation,testCompileClasspath,testRuntimeClasspath
 
io.opentelemetry.instrumentation:opentelemetry-instrumentation-api-incubator:2.22.0-alpha=jarValidation,testRuntimeClasspath
 
io.opentelemetry.instrumentation:opentelemetry-instrumentation-api:2.22.0=jarValidation,testRuntimeClasspath
@@ -91,7 +75,6 @@ 
jakarta.validation:jakarta.validation-api:3.0.2=jarValidation,testRuntimeClasspa
 
jakarta.ws.rs:jakarta.ws.rs-api:3.1.0=apiHelper,jarValidation,runtimeClasspath,testRuntimeClasspath
 
javax.inject:javax.inject:1=annotationProcessor,errorprone,testAnnotationProcessor
 junit:junit:4.13.2=jarValidation,testCompileClasspath,testRuntimeClasspath
-net.bytebuddy:byte-buddy:1.17.7=jarValidation,testCompileClasspath,testRuntimeClasspath
 org.antlr:antlr4-runtime:4.13.2=jarValidation,testRuntimeClasspath
 org.apache.commons:commons-exec:1.5.0=jarValidation,testRuntimeClasspath
 org.apache.commons:commons-lang3:3.20.0=jarValidation,testRuntimeClasspath
@@ -99,8 +82,8 @@ 
org.apache.commons:commons-math3:3.6.1=jarValidation,testRuntimeClasspath
 
org.apache.curator:curator-client:5.9.0=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.apache.curator:curator-framework:5.9.0=jarValidation,testCompileClasspath,testRuntimeClasspath
 org.apache.curator:curator-test:5.9.0=jarValidation,testRuntimeClasspath
-org.apache.httpcomponents:httpclient:4.5.14=jarValidation,testCompileClasspath,testRuntimeClasspath
-org.apache.httpcomponents:httpcore:4.4.16=jarValidation,testCompileClasspath,testRuntimeClasspath
+org.apache.httpcomponents:httpclient:4.5.14=jarValidation,testRuntimeClasspath
+org.apache.httpcomponents:httpcore:4.4.16=jarValidation,testRuntimeClasspath
 org.apache.httpcomponents:httpmime:4.5.14=jarValidation,testRuntimeClasspath
 org.apache.logging.log4j:log4j-api:2.25.3=jarValidation,testRuntimeClasspath
 org.apache.logging.log4j:log4j-core:2.25.3=jarValidation,testRuntimeClasspath
@@ -127,14 +110,11 @@ 
org.apache.lucene:lucene-spatial-extras:10.3.2=jarValidation,testRuntimeClasspat
 org.apache.lucene:lucene-spatial3d:10.3.2=jarValidation,testRuntimeClasspath
 org.apache.lucene:lucene-suggest:10.3.2=jarValidation,testRuntimeClasspath
 
org.apache.lucene:lucene-test-framework:10.3.2=jarValidation,testCompileClasspath,testRuntimeClasspath
-org.apache.yetus:audience-annotations:0.12.0=permitTestUnusedDeclared
-org.apache.zookeeper:zookeeper-jute:3.9.4=jarValidation,permitTestUnusedDeclared,testCompileClasspath,testRuntimeClasspath
-org.apache.zookeeper:zookeeper:3.9.4=jarValidation,permitTestUnusedDeclared,testCompileClasspath,testRuntimeClasspath
+org.apache.zookeeper:zookeeper-jute:3.9.4=jarValidation,testCompileClasspath,testRuntimeClasspath
+org.apache.zookeeper:zookeeper:3.9.4=jarValidation,testCompileClasspath,testRuntimeClasspath
 org.apiguardian:apiguardian-api:1.1.2=jarValidation,testRuntimeClasspath
-org.checkerframework:checker-qual:3.33.0=spotless865458226
 org.codehaus.woodstox:stax2-api:4.2.2=jarValidation,testRuntimeClasspath
 
org.eclipse.jetty.ee10:jetty-ee10-servlet:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty.ee10:jetty-ee10-webapp:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.http2:jetty-http2-client-transport:12.0.27=compileClasspath,jarValidation,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.http2:jetty-http2-client:12.0.27=apiHelper,compileClasspath,jarValidation,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.http2:jetty-http2-common:12.0.27=apiHelper,compileClasspath,jarValidation,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
@@ -145,7 +125,6 @@ 
org.eclipse.jetty:jetty-alpn-java-client:12.0.27=compileClasspath,jarValidation,
 
org.eclipse.jetty:jetty-alpn-java-server:12.0.27=jarValidation,testRuntimeClasspath
 org.eclipse.jetty:jetty-alpn-server:12.0.27=jarValidation,testRuntimeClasspath
 
org.eclipse.jetty:jetty-client:12.0.27=compileClasspath,jarValidation,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty:jetty-ee:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-http:12.0.27=apiHelper,compileClasspath,jarValidation,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-io:12.0.27=apiHelper,compileClasspath,jarValidation,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
 org.eclipse.jetty:jetty-rewrite:12.0.27=jarValidation,testRuntimeClasspath
@@ -153,7 +132,6 @@ 
org.eclipse.jetty:jetty-security:12.0.27=jarValidation,testCompileClasspath,test
 
org.eclipse.jetty:jetty-server:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-session:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty:jetty-util:12.0.27=apiHelper,compileClasspath,jarValidation,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty:jetty-xml:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.glassfish.hk2.external:aopalliance-repackaged:3.1.1=jarValidation,testRuntimeClasspath
 org.glassfish.hk2:hk2-api:3.1.1=jarValidation,testRuntimeClasspath
 org.glassfish.hk2:hk2-locator:3.1.1=jarValidation,testRuntimeClasspath
@@ -173,17 +151,13 @@ 
org.junit.jupiter:junit-jupiter-api:5.6.2=jarValidation,testRuntimeClasspath
 
org.junit.platform:junit-platform-commons:1.6.2=jarValidation,testRuntimeClasspath
 org.junit:junit-bom:5.6.2=jarValidation,testRuntimeClasspath
 org.locationtech.spatial4j:spatial4j:0.8=jarValidation,testRuntimeClasspath
-org.mockito:mockito-core:5.19.0=jarValidation,testCompileClasspath,testRuntimeClasspath
-org.mockito:mockito-subclass:5.19.0=jarValidation,testRuntimeClasspath
-org.objenesis:objenesis:3.3=jarValidation,testRuntimeClasspath
 org.opentest4j:opentest4j:1.2.0=jarValidation,testRuntimeClasspath
 org.ow2.asm:asm-commons:9.8=jarValidation,testRuntimeClasspath
 org.ow2.asm:asm-tree:9.8=jarValidation,testRuntimeClasspath
 org.ow2.asm:asm:9.8=jarValidation,testRuntimeClasspath
 
org.pcollections:pcollections:4.0.1=annotationProcessor,errorprone,testAnnotationProcessor
 
org.semver4j:semver4j:6.0.0=apiHelper,jarValidation,runtimeClasspath,testRuntimeClasspath
-org.slf4j:jcl-over-slf4j:2.0.17=jarValidation,runtimeClasspath,testRuntimeClasspath
-org.slf4j:slf4j-api:2.0.13=permitTestUnusedDeclared
+org.slf4j:jcl-over-slf4j:2.0.17=apiHelper,jarValidation,runtimeClasspath,testRuntimeClasspath
 
org.slf4j:slf4j-api:2.0.17=apiHelper,compileClasspath,jarValidation,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
 org.xerial.snappy:snappy-java:1.1.10.8=jarValidation,testRuntimeClasspath
-empty=apiHelperTest,compileOnlyHelperTest,missingdoclet,openApiSpecFile,permitAggregatorUse,permitTestAggregatorUse,permitTestUsedUndeclared,permitUnusedDeclared,permitUsedUndeclared,signatures
+empty=apiHelperTest,compileOnlyHelperTest,missingdoclet,permitAggregatorUse,permitTestAggregatorUse,permitTestUnusedDeclared,permitTestUsedUndeclared,permitUnusedDeclared,permitUsedUndeclared,signatures
diff --git 
a/solr/solrj/src/java/org/apache/solr/client/solrj/jetty/AuthenticationStoreHolder.java
 
b/solr/solrj-jetty/src/java/org/apache/solr/client/solrj/jetty/AuthenticationStoreHolder.java
similarity index 100%
rename from 
solr/solrj/src/java/org/apache/solr/client/solrj/jetty/AuthenticationStoreHolder.java
rename to 
solr/solrj-jetty/src/java/org/apache/solr/client/solrj/jetty/AuthenticationStoreHolder.java
diff --git 
a/solr/solrj/src/java/org/apache/solr/client/solrj/jetty/CloudJettySolrClient.java
 
b/solr/solrj-jetty/src/java/org/apache/solr/client/solrj/jetty/CloudJettySolrClient.java
similarity index 100%
rename from 
solr/solrj/src/java/org/apache/solr/client/solrj/jetty/CloudJettySolrClient.java
rename to 
solr/solrj-jetty/src/java/org/apache/solr/client/solrj/jetty/CloudJettySolrClient.java
diff --git 
a/solr/solrj/src/java/org/apache/solr/client/solrj/jetty/ConcurrentUpdateJettySolrClient.java
 
b/solr/solrj-jetty/src/java/org/apache/solr/client/solrj/jetty/ConcurrentUpdateJettySolrClient.java
similarity index 85%
rename from 
solr/solrj/src/java/org/apache/solr/client/solrj/jetty/ConcurrentUpdateJettySolrClient.java
rename to 
solr/solrj-jetty/src/java/org/apache/solr/client/solrj/jetty/ConcurrentUpdateJettySolrClient.java
index 2ac6577d8b2..2275976eefc 100644
--- 
a/solr/solrj/src/java/org/apache/solr/client/solrj/jetty/ConcurrentUpdateJettySolrClient.java
+++ 
b/solr/solrj-jetty/src/java/org/apache/solr/client/solrj/jetty/ConcurrentUpdateJettySolrClient.java
@@ -19,6 +19,7 @@ package org.apache.solr.client.solrj.jetty;
 
 import java.io.Closeable;
 import java.io.IOException;
+import java.io.InputStream;
 import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 import java.util.Locale;
@@ -35,6 +36,7 @@ import org.apache.solr.common.params.UpdateParams;
 import org.eclipse.jetty.client.InputStreamResponseListener;
 import org.eclipse.jetty.client.OutputStreamRequestContent;
 import org.eclipse.jetty.client.Request;
+import org.eclipse.jetty.client.Response;
 import org.eclipse.jetty.http.HttpMethod;
 
 /** A ConcurrentUpdate SolrClient using {@link HttpJettySolrClient}. */
@@ -73,9 +75,9 @@ public class ConcurrentUpdateJettySolrClient extends 
ConcurrentUpdateBaseSolrCli
   }
 
   @Override
-  protected InputStreamResponseListener doSendUpdateStream(
-      ConcurrentUpdateBaseSolrClient.Update update) throws IOException, 
InterruptedException {
-    InputStreamResponseListener responseListener;
+  protected StreamingResponse 
doSendUpdateStream(ConcurrentUpdateBaseSolrClient.Update update)
+      throws IOException, InterruptedException {
+    InputStreamResponseListener jettyListener;
     try (OutStream out = initOutStream(basePath, update.request(), 
update.collection())) {
       ConcurrentUpdateBaseSolrClient.Update upd = update;
       while (upd != null) {
@@ -91,9 +93,9 @@ public class ConcurrentUpdateJettySolrClient extends 
ConcurrentUpdateBaseSolrCli
         notifyQueueAndRunnersIfEmptyQueue();
         upd = queue.poll(pollQueueTimeMillis, TimeUnit.MILLISECONDS);
       }
-      responseListener = out.getResponseListener();
+      jettyListener = out.getResponseListener();
     }
-    return responseListener;
+    return new JettyStreamingResponse(jettyListener);
   }
 
   private static class OutStream implements Closeable {
@@ -143,6 +145,40 @@ public class ConcurrentUpdateJettySolrClient extends 
ConcurrentUpdateBaseSolrCli
     }
   }
 
+  /**
+   * Jetty-specific implementation of StreamingResponse that wraps Jetty's
+   * InputStreamResponseListener.
+   */
+  private static class JettyStreamingResponse implements StreamingResponse {
+    private final InputStreamResponseListener listener;
+    private Response response;
+
+    JettyStreamingResponse(InputStreamResponseListener listener) {
+      this.listener = listener;
+    }
+
+    @Override
+    public int awaitResponse(long timeoutMillis) throws Exception {
+      response = listener.get(timeoutMillis, TimeUnit.MILLISECONDS);
+      return response.getStatus();
+    }
+
+    @Override
+    public InputStream getInputStream() {
+      return listener.getInputStream();
+    }
+
+    @Override
+    public Object getUnderlyingResponse() {
+      return response;
+    }
+
+    @Override
+    public void close() throws IOException {
+      // Jetty handles cleanup automatically
+    }
+  }
+
   private OutStream initOutStream(String baseUrl, UpdateRequest updateRequest, 
String collection)
       throws IOException {
     String contentType = client.getRequestWriter().getUpdateContentType();
diff --git 
a/solr/solrj/src/java/org/apache/solr/client/solrj/jetty/HttpJettySolrClient.java
 
b/solr/solrj-jetty/src/java/org/apache/solr/client/solrj/jetty/HttpJettySolrClient.java
similarity index 100%
rename from 
solr/solrj/src/java/org/apache/solr/client/solrj/jetty/HttpJettySolrClient.java
rename to 
solr/solrj-jetty/src/java/org/apache/solr/client/solrj/jetty/HttpJettySolrClient.java
diff --git 
a/solr/solrj/src/java/org/apache/solr/client/solrj/jetty/HttpListenerFactory.java
 
b/solr/solrj-jetty/src/java/org/apache/solr/client/solrj/jetty/HttpListenerFactory.java
similarity index 100%
rename from 
solr/solrj/src/java/org/apache/solr/client/solrj/jetty/HttpListenerFactory.java
rename to 
solr/solrj-jetty/src/java/org/apache/solr/client/solrj/jetty/HttpListenerFactory.java
diff --git 
a/solr/solrj/src/java/org/apache/solr/client/solrj/jetty/LBJettySolrClient.java 
b/solr/solrj-jetty/src/java/org/apache/solr/client/solrj/jetty/LBJettySolrClient.java
similarity index 100%
rename from 
solr/solrj/src/java/org/apache/solr/client/solrj/jetty/LBJettySolrClient.java
rename to 
solr/solrj-jetty/src/java/org/apache/solr/client/solrj/jetty/LBJettySolrClient.java
diff --git 
a/solr/solrj/src/java/org/apache/solr/client/solrj/jetty/PreemptiveBasicAuthClientCustomizer.java
 
b/solr/solrj-jetty/src/java/org/apache/solr/client/solrj/jetty/PreemptiveBasicAuthClientCustomizer.java
similarity index 100%
rename from 
solr/solrj/src/java/org/apache/solr/client/solrj/jetty/PreemptiveBasicAuthClientCustomizer.java
rename to 
solr/solrj-jetty/src/java/org/apache/solr/client/solrj/jetty/PreemptiveBasicAuthClientCustomizer.java
diff --git 
a/solr/solrj/src/java/org/apache/solr/client/solrj/jetty/SSLConfig.java 
b/solr/solrj-jetty/src/java/org/apache/solr/client/solrj/jetty/SSLConfig.java
similarity index 100%
rename from 
solr/solrj/src/java/org/apache/solr/client/solrj/jetty/SSLConfig.java
rename to 
solr/solrj-jetty/src/java/org/apache/solr/client/solrj/jetty/SSLConfig.java
diff --git 
a/solr/solrj/src/java/org/apache/solr/client/solrj/jetty/SolrBasicAuthentication.java
 
b/solr/solrj-jetty/src/java/org/apache/solr/client/solrj/jetty/SolrBasicAuthentication.java
similarity index 100%
rename from 
solr/solrj/src/java/org/apache/solr/client/solrj/jetty/SolrBasicAuthentication.java
rename to 
solr/solrj-jetty/src/java/org/apache/solr/client/solrj/jetty/SolrBasicAuthentication.java
diff --git 
a/solr/solrj/src/java/org/apache/solr/client/solrj/jetty/package-info.java 
b/solr/solrj-jetty/src/java/org/apache/solr/client/solrj/jetty/package-info.java
similarity index 100%
rename from 
solr/solrj/src/java/org/apache/solr/client/solrj/jetty/package-info.java
rename to 
solr/solrj-jetty/src/java/org/apache/solr/client/solrj/jetty/package-info.java
diff --git 
a/solr/solrj/src/test/org/apache/solr/client/solrj/jetty/ConcurrentUpdateJettySolrClientBadInputTest.java
 
b/solr/solrj-jetty/src/test/org/apache/solr/client/solrj/jetty/ConcurrentUpdateJettySolrClientBadInputTest.java
similarity index 100%
rename from 
solr/solrj/src/test/org/apache/solr/client/solrj/jetty/ConcurrentUpdateJettySolrClientBadInputTest.java
rename to 
solr/solrj-jetty/src/test/org/apache/solr/client/solrj/jetty/ConcurrentUpdateJettySolrClientBadInputTest.java
diff --git 
a/solr/solrj/src/test/org/apache/solr/client/solrj/jetty/ConcurrentUpdateJettySolrClientMultiCollectionTest.java
 
b/solr/solrj-jetty/src/test/org/apache/solr/client/solrj/jetty/ConcurrentUpdateJettySolrClientMultiCollectionTest.java
similarity index 100%
rename from 
solr/solrj/src/test/org/apache/solr/client/solrj/jetty/ConcurrentUpdateJettySolrClientMultiCollectionTest.java
rename to 
solr/solrj-jetty/src/test/org/apache/solr/client/solrj/jetty/ConcurrentUpdateJettySolrClientMultiCollectionTest.java
diff --git 
a/solr/solrj/src/test/org/apache/solr/client/solrj/jetty/ConcurrentUpdateJettySolrClientTest.java
 
b/solr/solrj-jetty/src/test/org/apache/solr/client/solrj/jetty/ConcurrentUpdateJettySolrClientTest.java
similarity index 99%
rename from 
solr/solrj/src/test/org/apache/solr/client/solrj/jetty/ConcurrentUpdateJettySolrClientTest.java
rename to 
solr/solrj-jetty/src/test/org/apache/solr/client/solrj/jetty/ConcurrentUpdateJettySolrClientTest.java
index e0c078f1eec..e6efa9a6f99 100644
--- 
a/solr/solrj/src/test/org/apache/solr/client/solrj/jetty/ConcurrentUpdateJettySolrClientTest.java
+++ 
b/solr/solrj-jetty/src/test/org/apache/solr/client/solrj/jetty/ConcurrentUpdateJettySolrClientTest.java
@@ -45,7 +45,6 @@ import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.common.util.ExecutorUtil;
 import org.apache.solr.common.util.SolrNamedThreadFactory;
 import org.apache.solr.embedded.JettyConfig;
-import org.eclipse.jetty.client.Response;
 import org.eclipse.jetty.ee10.servlet.ServletHolder;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -358,7 +357,7 @@ public class ConcurrentUpdateJettySolrClientTest extends 
SolrJettyTestBase {
     }
 
     @Override
-    public void onSuccess(Response resp, InputStream respBody) {
+    public void onSuccess(Object responseMetadata, InputStream respBody) {
       successCounter.incrementAndGet();
     }
 
diff --git 
a/solr/solrj/src/test/org/apache/solr/client/solrj/jetty/HttpJettySolrClientCompatibilityTest.java
 
b/solr/solrj-jetty/src/test/org/apache/solr/client/solrj/jetty/HttpJettySolrClientCompatibilityTest.java
similarity index 100%
rename from 
solr/solrj/src/test/org/apache/solr/client/solrj/jetty/HttpJettySolrClientCompatibilityTest.java
rename to 
solr/solrj-jetty/src/test/org/apache/solr/client/solrj/jetty/HttpJettySolrClientCompatibilityTest.java
diff --git 
a/solr/solrj/src/test/org/apache/solr/client/solrj/jetty/HttpJettySolrClientProxyTest.java
 
b/solr/solrj-jetty/src/test/org/apache/solr/client/solrj/jetty/HttpJettySolrClientProxyTest.java
similarity index 100%
rename from 
solr/solrj/src/test/org/apache/solr/client/solrj/jetty/HttpJettySolrClientProxyTest.java
rename to 
solr/solrj-jetty/src/test/org/apache/solr/client/solrj/jetty/HttpJettySolrClientProxyTest.java
diff --git 
a/solr/solrj/src/test/org/apache/solr/client/solrj/jetty/HttpJettySolrClientTest.java
 
b/solr/solrj-jetty/src/test/org/apache/solr/client/solrj/jetty/HttpJettySolrClientTest.java
similarity index 100%
rename from 
solr/solrj/src/test/org/apache/solr/client/solrj/jetty/HttpJettySolrClientTest.java
rename to 
solr/solrj-jetty/src/test/org/apache/solr/client/solrj/jetty/HttpJettySolrClientTest.java
diff --git a/solr/solrj-streaming/build.gradle 
b/solr/solrj-streaming/build.gradle
index 4ea3110e203..ee33ad8041a 100644
--- a/solr/solrj-streaming/build.gradle
+++ b/solr/solrj-streaming/build.gradle
@@ -21,6 +21,7 @@ description = 'Solrj-Streaming - SolrJ requiring Streaming 
Expressions'
 
 dependencies {
   implementation project(':solr:solrj')
+  implementation project(':solr:solrj-jetty')
 
   // declare dependencies we use even though already declared by solrj-core
   implementation libs.slf4j.api
diff --git a/solr/solrj-zookeeper/build.gradle 
b/solr/solrj-zookeeper/build.gradle
index c4c776095d1..e04f230b30e 100644
--- a/solr/solrj-zookeeper/build.gradle
+++ b/solr/solrj-zookeeper/build.gradle
@@ -31,6 +31,7 @@ dependencies {
     }
 
     implementation project(':solr:solrj')
+    implementation project(':solr:solrj-jetty')
     implementation project(':solr:api')
 
     implementation libs.slf4j.api
diff --git a/solr/solrj/build.gradle b/solr/solrj/build.gradle
index 70106db2a80..f2a9e8b0445 100644
--- a/solr/solrj/build.gradle
+++ b/solr/solrj/build.gradle
@@ -36,14 +36,6 @@ dependencies {
   implementation libs.slf4j.api
   runtimeOnly libs.slf4j.jcloverslf4j
 
-  api libs.eclipse.jetty.http2.client
-  implementation libs.eclipse.jetty.http2.httpclienttransport
-  implementation libs.eclipse.jetty.http
-  implementation libs.eclipse.jetty.client
-  implementation libs.eclipse.jetty.util
-  implementation libs.eclipse.jetty.io
-  runtimeOnly libs.eclipse.jetty.alpnjavaclient
-
   compileOnly libs.stephenc.jcip.annotations
 
   testImplementation libs.apache.httpcomponents.httpclient
@@ -52,6 +44,7 @@ dependencies {
   testImplementation project(':solr:test-framework')
   testImplementation project(':solr:core')
   testImplementation project(':solr:solrj')
+  testImplementation project(':solr:solrj-jetty')
 
   // ideally ZK centric tests move to solrj-zookeeper but sometimes we depend 
on ZK here anyway
   testImplementation project(':solr:solrj-zookeeper')
@@ -73,13 +66,28 @@ dependencies {
 
   testImplementation libs.jakarta.servlet.api
 
+  // Jetty test dependencies - needed for solrj's own tests
+  // Client libraries
+  testImplementation libs.eclipse.jetty.http2.client
+  permitTestUnusedDeclared libs.eclipse.jetty.http2.client
+  testImplementation libs.eclipse.jetty.client
+  permitTestUnusedDeclared libs.eclipse.jetty.client
+  testImplementation libs.eclipse.jetty.http
+  permitTestUnusedDeclared libs.eclipse.jetty.http
+  // Server libraries
   testImplementation libs.eclipse.jetty.server
+  permitTestUnusedDeclared libs.eclipse.jetty.server
   testImplementation libs.eclipse.jetty.ee10.servlet
+  permitTestUnusedDeclared libs.eclipse.jetty.ee10.servlet
   testImplementation libs.eclipse.jetty.ee10.webapp
+  permitTestUnusedDeclared libs.eclipse.jetty.ee10.webapp
   testRuntimeOnly(libs.eclipse.jetty.alpnjavaserver, {
     exclude group: "org.eclipse.jetty.alpn", module: "alpn-api"
   })
   testImplementation libs.eclipse.jetty.session
+  permitTestUnusedDeclared libs.eclipse.jetty.session
+  permitTestUnusedDeclared libs.jakarta.servlet.api
+
   testImplementation(libs.mockito.core, {
     exclude group: "net.bytebuddy", module: "byte-buddy-agent"
   })
@@ -162,3 +170,22 @@ sourceSets {
     }
   }
 }
+
+// Configuration to share test classes with other modules (solrj-jetty)
+configurations {
+  testArtifacts {
+    canBeConsumed = true
+    canBeResolved = false
+  }
+}
+
+// Create a JAR of test classes
+task testJar(type: Jar) {
+  archiveClassifier = 'tests'
+  from sourceSets.test.output
+}
+
+// Make test classes available as an artifact
+artifacts {
+  testArtifacts testJar
+}
diff --git a/solr/solrj/gradle.lockfile b/solr/solrj/gradle.lockfile
index 9d7118f7943..c52b31fc851 100644
--- a/solr/solrj/gradle.lockfile
+++ b/solr/solrj/gradle.lockfile
@@ -86,7 +86,7 @@ 
io.sgr:s2-geometry-library-java:1.0.0=jarValidation,testRuntimeClasspath
 
io.swagger.core.v3:swagger-annotations-jakarta:2.2.22=apiHelper,compileClasspath,jarValidation,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
 
jakarta.annotation:jakarta.annotation-api:2.1.1=jarValidation,testRuntimeClasspath
 jakarta.inject:jakarta.inject-api:2.0.1=jarValidation,testRuntimeClasspath
-jakarta.servlet:jakarta.servlet-api:6.0.0=jarValidation,testCompileClasspath,testRuntimeClasspath
+jakarta.servlet:jakarta.servlet-api:6.0.0=jarValidation,permitTestUnusedDeclared,testCompileClasspath,testRuntimeClasspath
 
jakarta.validation:jakarta.validation-api:3.0.2=jarValidation,testRuntimeClasspath
 
jakarta.ws.rs:jakarta.ws.rs-api:3.1.0=apiHelper,jarValidation,runtimeClasspath,testRuntimeClasspath
 
javax.inject:javax.inject:1=annotationProcessor,errorprone,testAnnotationProcessor
@@ -133,27 +133,27 @@ 
org.apache.zookeeper:zookeeper:3.9.4=jarValidation,permitTestUnusedDeclared,test
 org.apiguardian:apiguardian-api:1.1.2=jarValidation,testRuntimeClasspath
 org.checkerframework:checker-qual:3.33.0=spotless865458226
 org.codehaus.woodstox:stax2-api:4.2.2=jarValidation,testRuntimeClasspath
-org.eclipse.jetty.ee10:jetty-ee10-servlet:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty.ee10:jetty-ee10-webapp:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-client-transport:12.0.27=compileClasspath,jarValidation,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-client:12.0.27=apiHelper,compileClasspath,jarValidation,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-common:12.0.27=apiHelper,compileClasspath,jarValidation,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty.http2:jetty-http2-hpack:12.0.27=apiHelper,compileClasspath,jarValidation,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.ee10:jetty-ee10-servlet:12.0.27=jarValidation,permitTestUnusedDeclared,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.ee10:jetty-ee10-webapp:12.0.27=jarValidation,permitTestUnusedDeclared,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-client-transport:12.0.27=jarValidation,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-client:12.0.27=jarValidation,permitTestUnusedDeclared,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-common:12.0.27=jarValidation,permitTestUnusedDeclared,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty.http2:jetty-http2-hpack:12.0.27=jarValidation,permitTestUnusedDeclared,testCompileClasspath,testRuntimeClasspath
 
org.eclipse.jetty.http2:jetty-http2-server:12.0.27=jarValidation,testRuntimeClasspath
-org.eclipse.jetty:jetty-alpn-client:12.0.27=apiHelper,compileClasspath,jarValidation,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty:jetty-alpn-java-client:12.0.27=compileClasspath,jarValidation,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-alpn-client:12.0.27=jarValidation,permitTestUnusedDeclared,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-alpn-java-client:12.0.27=jarValidation,testRuntimeClasspath
 
org.eclipse.jetty:jetty-alpn-java-server:12.0.27=jarValidation,testRuntimeClasspath
 org.eclipse.jetty:jetty-alpn-server:12.0.27=jarValidation,testRuntimeClasspath
-org.eclipse.jetty:jetty-client:12.0.27=compileClasspath,jarValidation,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty:jetty-ee:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty:jetty-http:12.0.27=apiHelper,compileClasspath,jarValidation,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty:jetty-io:12.0.27=apiHelper,compileClasspath,jarValidation,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-client:12.0.27=jarValidation,permitTestUnusedDeclared,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-ee:12.0.27=jarValidation,permitTestUnusedDeclared,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-http:12.0.27=jarValidation,permitTestUnusedDeclared,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-io:12.0.27=jarValidation,permitTestUnusedDeclared,testCompileClasspath,testRuntimeClasspath
 org.eclipse.jetty:jetty-rewrite:12.0.27=jarValidation,testRuntimeClasspath
-org.eclipse.jetty:jetty-security:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty:jetty-server:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty:jetty-session:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty:jetty-util:12.0.27=apiHelper,compileClasspath,jarValidation,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
-org.eclipse.jetty:jetty-xml:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-security:12.0.27=jarValidation,permitTestUnusedDeclared,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-server:12.0.27=jarValidation,permitTestUnusedDeclared,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-session:12.0.27=jarValidation,permitTestUnusedDeclared,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-util:12.0.27=jarValidation,permitTestUnusedDeclared,testCompileClasspath,testRuntimeClasspath
+org.eclipse.jetty:jetty-xml:12.0.27=jarValidation,permitTestUnusedDeclared,testCompileClasspath,testRuntimeClasspath
 
org.glassfish.hk2.external:aopalliance-repackaged:3.1.1=jarValidation,testRuntimeClasspath
 org.glassfish.hk2:hk2-api:3.1.1=jarValidation,testRuntimeClasspath
 org.glassfish.hk2:hk2-locator:3.1.1=jarValidation,testRuntimeClasspath
@@ -183,7 +183,6 @@ org.ow2.asm:asm:9.8=jarValidation,testRuntimeClasspath
 
org.pcollections:pcollections:4.0.1=annotationProcessor,errorprone,testAnnotationProcessor
 
org.semver4j:semver4j:6.0.0=apiHelper,jarValidation,runtimeClasspath,testRuntimeClasspath
 
org.slf4j:jcl-over-slf4j:2.0.17=jarValidation,runtimeClasspath,testRuntimeClasspath
-org.slf4j:slf4j-api:2.0.13=permitTestUnusedDeclared
-org.slf4j:slf4j-api:2.0.17=apiHelper,compileClasspath,jarValidation,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
+org.slf4j:slf4j-api:2.0.17=apiHelper,compileClasspath,jarValidation,permitTestUnusedDeclared,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
 org.xerial.snappy:snappy-java:1.1.10.8=jarValidation,testRuntimeClasspath
 
empty=apiHelperTest,compileOnlyHelperTest,missingdoclet,openApiSpecFile,permitAggregatorUse,permitTestAggregatorUse,permitTestUsedUndeclared,permitUnusedDeclared,permitUsedUndeclared,signatures
diff --git 
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ConcurrentUpdateBaseSolrClient.java
 
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ConcurrentUpdateBaseSolrClient.java
index 16bac664891..25f24de0ed8 100644
--- 
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ConcurrentUpdateBaseSolrClient.java
+++ 
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ConcurrentUpdateBaseSolrClient.java
@@ -20,6 +20,7 @@ package org.apache.solr.client.solrj.impl;
 import java.io.IOException;
 import java.io.InputStream;
 import java.lang.invoke.MethodHandles;
+import java.net.HttpURLConnection;
 import java.util.ArrayDeque;
 import java.util.Iterator;
 import java.util.Queue;
@@ -42,9 +43,6 @@ import org.apache.solr.common.util.ExecutorUtil;
 import org.apache.solr.common.util.IOUtils;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.SolrNamedThreadFactory;
-import org.eclipse.jetty.client.InputStreamResponseListener;
-import org.eclipse.jetty.client.Response;
-import org.eclipse.jetty.http.HttpStatus;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.MDC;
@@ -246,15 +244,14 @@ public abstract class ConcurrentUpdateBaseSolrClient 
extends SolrClient {
               break;
             }
 
-            InputStreamResponseListener responseListener = null;
+            StreamingResponse responseListener = null;
             responseListener = doSendUpdateStream(update);
 
             // just wait for the headers, so the idle timeout is sensible
-            Response response = responseListener.get(idleTimeoutMillis, 
TimeUnit.MILLISECONDS);
+            int statusCode = responseListener.awaitResponse(idleTimeoutMillis);
             rspBody = responseListener.getInputStream();
 
-            int statusCode = response.getStatus();
-            if (statusCode != HttpStatus.OK_200) {
+            if (statusCode != HttpURLConnection.HTTP_OK) {
               SolrException solrExc;
               Object remoteError = null;
               // parse out the metadata from the SolrException
@@ -271,7 +268,7 @@ public abstract class ConcurrentUpdateBaseSolrClient 
extends SolrClient {
 
               handleError(solrExc);
             } else {
-              onSuccess(response, rspBody);
+              onSuccess(responseListener.getUnderlyingResponse(), rspBody);
             }
             stallDetection.incrementProcessedCount();
 
@@ -290,7 +287,7 @@ public abstract class ConcurrentUpdateBaseSolrClient 
extends SolrClient {
     }
   }
 
-  protected abstract InputStreamResponseListener doSendUpdateStream(Update 
update)
+  protected abstract StreamingResponse doSendUpdateStream(Update update)
       throws IOException, InterruptedException;
 
   private void consumeFully(InputStream is) {
@@ -550,9 +547,11 @@ public abstract class ConcurrentUpdateBaseSolrClient 
extends SolrClient {
   /**
    * Intended to be used as an extension point for doing post-processing after 
a request completes.
    *
+   * @param responseMetadata implementation-specific response object (e.g., 
Jetty Response), may be
+   *     null
    * @param respBody the body of the response, subclasses must not close this 
stream.
    */
-  public void onSuccess(Response resp, InputStream respBody) {
+  public void onSuccess(Object responseMetadata, InputStream respBody) {
     // no-op by design, override to add functionality
   }
 
@@ -773,4 +772,52 @@ public abstract class ConcurrentUpdateBaseSolrClient 
extends SolrClient {
       return client;
     }
   }
+
+  /**
+   * Abstraction for streaming HTTP response handling in {@link 
ConcurrentUpdateBaseSolrClient}.
+   * This allows the base class to work with different HTTP client 
implementations without direct
+   * dependencies on specific client libraries (e.g., Jetty, JDK HttpClient).
+   *
+   * <p>Implementations should wrap the underlying HTTP client's response 
mechanism and provide
+   * access to response status and body stream.
+   */
+  public interface StreamingResponse extends AutoCloseable {
+
+    /**
+     * Wait for response headers to arrive and return the HTTP status code.
+     *
+     * @param timeoutMillis maximum time to wait in milliseconds
+     * @return HTTP status code (e.g., 200, 404, 500)
+     * @throws Exception if timeout occurs, connection fails, or other error
+     */
+    int awaitResponse(long timeoutMillis) throws Exception;
+
+    /**
+     * Get the response body as an InputStream for parsing.
+     *
+     * <p>This should be called after {@link #awaitResponse(long)} has 
successfully returned.
+     *
+     * @return response body stream, never null
+     */
+    InputStream getInputStream();
+
+    /**
+     * Get the underlying implementation-specific response object.
+     *
+     * <p>This is used by the {@link 
ConcurrentUpdateBaseSolrClient#onSuccess(Object, InputStream)}
+     * hook method to allow subclasses access to implementation-specific 
metadata. The returned
+     * object type depends on the HTTP client implementation being used.
+     *
+     * @return underlying response object (implementation-specific), may be 
null
+     */
+    Object getUnderlyingResponse();
+
+    /**
+     * Release resources associated with this response.
+     *
+     * @throws IOException if cleanup fails
+     */
+    @Override
+    void close() throws IOException;
+  }
 }
diff --git 
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/SolrClientCustomizer.java
 
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/SolrClientCustomizer.java
index 98dc2d57564..e61213df8c5 100644
--- 
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/SolrClientCustomizer.java
+++ 
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/SolrClientCustomizer.java
@@ -22,8 +22,9 @@ import org.apache.solr.client.solrj.SolrClient;
  * A config hook for post-configuration of a {@linkplain SolrClient} by its 
builder. It is not
  * supported by all builders.
  *
+ * <p>Implementations can be specified via system property in some client 
builders.
+ *
  * @param <T> type of SolrClient this customizer targets
- * @see 
org.apache.solr.client.solrj.jetty.HttpJettySolrClient#CLIENT_CUSTOMIZER_SYSPROP
  * @lucene.experimental
  */
 public interface SolrClientCustomizer<T extends SolrClient> {
diff --git a/solr/test-framework/build.gradle b/solr/test-framework/build.gradle
index dfe4044e476..9a6ca030350 100644
--- a/solr/test-framework/build.gradle
+++ b/solr/test-framework/build.gradle
@@ -32,6 +32,7 @@ dependencies {
 
   api project(':solr:core')
   api project(':solr:solrj')
+  api project(':solr:solrj-jetty')
   api project(':solr:api')
   implementation project(':solr:solrj-zookeeper')
 

Reply via email to