JPMS in e2e-server

Signed-off-by: jansupol <jan.supol@oracle.com>
diff --git a/connectors/helidon-connector/pom.xml b/connectors/helidon-connector/pom.xml
index 9d66f54..23ee4da 100644
--- a/connectors/helidon-connector/pom.xml
+++ b/connectors/helidon-connector/pom.xml
@@ -178,6 +178,7 @@
                         <configuration>
                             <instructions>
                                 <Multi-Release>true</Multi-Release>
+                                <Automatic-Module-Name>org.glassfish.jersey.helidon.connector</Automatic-Module-Name>
                             </instructions>
                         </configuration>
                     </plugin>
diff --git a/connectors/jdk-connector/src/main/java/module-info.java b/connectors/jdk-connector/src/main/java/module-info.java
index 7147232..753dffd 100644
--- a/connectors/jdk-connector/src/main/java/module-info.java
+++ b/connectors/jdk-connector/src/main/java/module-info.java
@@ -27,10 +27,18 @@
 
     exports org.glassfish.jersey.jdk.connector;
     exports org.glassfish.jersey.jdk.connector.internal to
+            org.glassfish.jersey.core.client,
             org.glassfish.hk2.locator,
-            org.glassfish.hk2.utilities;
+            org.glassfish.hk2.utilities,
+            weld.core.impl;
     exports org.glassfish.jersey.jdk.connector.internal.l10n;
 
     opens org.glassfish.jersey.jdk.connector;
+    opens org.glassfish.jersey.jdk.connector.internal to
+            org.glassfish.jersey.core.client,
+            org.glassfish.hk2.locator,
+            org.glassfish.hk2.utilities,
+            weld.core.impl;
+
     opens org.glassfish.jersey.jdk.connector.internal.l10n;
 }
\ No newline at end of file
diff --git a/connectors/jetty-http2-connector/src/test/java/module-info.java b/connectors/jetty-http2-connector/src/test/java/module-info.java
index 5453358..ab3f5a5 100644
--- a/connectors/jetty-http2-connector/src/test/java/module-info.java
+++ b/connectors/jetty-http2-connector/src/test/java/module-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2023 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2023, 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -30,6 +30,7 @@
     requires org.glassfish.jersey.core.client;
     requires org.glassfish.jersey.core.server;
     requires org.glassfish.jersey.jetty.connector;
+    requires org.glassfish.jersey.media.json.jackson;
 
     requires org.junit.jupiter.api;
     requires org.hamcrest;
diff --git a/connectors/jnh-connector/src/test/java/module-info.java b/connectors/jnh-connector/src/test/java/module-info.java
index f5731a7..e1b8bce 100644
--- a/connectors/jnh-connector/src/test/java/module-info.java
+++ b/connectors/jnh-connector/src/test/java/module-info.java
@@ -41,6 +41,7 @@
     requires org.glassfish.jersey.core.client;
     requires org.glassfish.jersey.core.server;
     requires org.glassfish.jersey.jnh.connector;
+    requires org.glassfish.jersey.media.json.jackson;
 
     exports org.glassfish.jersey.jnh.connector.test;
     opens org.glassfish.jersey.jnh.connector.test;
diff --git a/connectors/jnh-connector/src/test/java/org/glassfish/jersey/jnh/connector/test/AbstractJavaConnectorTest.java b/connectors/jnh-connector/src/test/java/org/glassfish/jersey/jnh/connector/test/AbstractJavaConnectorTest.java
index b5895ac..1202518 100644
--- a/connectors/jnh-connector/src/test/java/org/glassfish/jersey/jnh/connector/test/AbstractJavaConnectorTest.java
+++ b/connectors/jnh-connector/src/test/java/org/glassfish/jersey/jnh/connector/test/AbstractJavaConnectorTest.java
@@ -89,7 +89,7 @@
             asyncResponse.setTimeout(timeoutSeconds, TimeUnit.SECONDS);
             CompletableFuture.runAsync(() -> {
                         try {
-                            Thread.sleep(3000);
+                            Thread.sleep(2000);
                         } catch (InterruptedException e) {
                             Thread.currentThread().interrupt();
                             throw new RuntimeException(e);
diff --git a/containers/grizzly2-http/src/main/java/org/glassfish/jersey/grizzly2/httpserver/GrizzlyHttpContainer.java b/containers/grizzly2-http/src/main/java/org/glassfish/jersey/grizzly2/httpserver/GrizzlyHttpContainer.java
index f86e909..438c5c5 100644
--- a/containers/grizzly2-http/src/main/java/org/glassfish/jersey/grizzly2/httpserver/GrizzlyHttpContainer.java
+++ b/containers/grizzly2-http/src/main/java/org/glassfish/jersey/grizzly2/httpserver/GrizzlyHttpContainer.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2024 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -118,9 +118,11 @@
      * Note that since Grizzly {@code Request} class is not proxiable as it does not expose an empty constructor,
      * the injection of Grizzly request instance into singleton JAX-RS and Jersey providers is only supported via
      * {@link jakarta.inject.Provider injection provider}.
+     * <p/>
+     * Note that since Jersey 4, Grizzly {@code Response} is also supported via
+     * {@link jakarta.inject.Provider injection provider} only for the java module reasons.
      */
     static class GrizzlyBinder extends InternalBinder {
-
         @Override
         protected void configure() {
             bindFactory(GrizzlyRequestReferencingFactory.class).to(Request.class)
@@ -131,7 +133,7 @@
                     .id(InjectionIds.GRIZZLY_REQUEST.id());
 
             bindFactory(GrizzlyResponseReferencingFactory.class).to(Response.class)
-                    .proxy(true).proxyForSameScope(false).in(RequestScoped.class)
+                    .proxy(false).in(RequestScoped.class)
                     .id(InjectionIds.GRIZZLY_RESPONSE_REFERENCING_FACTORY.id());
             bindFactory(ReferencingFactory.<Response>referenceFactory()).to(new GenericType<Ref<Response>>() {})
                     .in(RequestScoped.class)
diff --git a/containers/helidon/pom.xml b/containers/helidon/pom.xml
index 4d27311..31d389c 100644
--- a/containers/helidon/pom.xml
+++ b/containers/helidon/pom.xml
@@ -91,6 +91,16 @@
                 <artifactId>build-helper-maven-plugin</artifactId>
                 <inherited>true</inherited>
             </plugin>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <inherited>true</inherited>
+                <configuration>
+                    <instructions>
+                        <Automatic-Module-Name>org.glassfish.jersey.container.helidon</Automatic-Module-Name>
+                    </instructions>
+                </configuration>
+            </plugin>
         </plugins>
 
         <resources>
diff --git a/containers/jersey-servlet/src/main/java/module-info.java b/containers/jersey-servlet/src/main/java/module-info.java
index 61a23c7..4e03f6b 100644
--- a/containers/jersey-servlet/src/main/java/module-info.java
+++ b/containers/jersey-servlet/src/main/java/module-info.java
@@ -34,7 +34,11 @@
     exports org.glassfish.jersey.servlet;
 
     opens org.glassfish.jersey.servlet;
+    opens org.glassfish.jersey.servlet.async;
+    opens org.glassfish.jersey.servlet.init;
+    opens org.glassfish.jersey.servlet.internal.spi;
     opens org.glassfish.jersey.servlet.internal.l10n;
+    opens org.glassfish.jersey.servlet.spi;
 
     uses org.glassfish.jersey.servlet.spi.AsyncContextDelegate;
     uses org.glassfish.jersey.servlet.spi.AsyncContextDelegateProvider;
diff --git a/containers/jersey-servlet/src/main/java/org/glassfish/jersey/servlet/WebComponent.java b/containers/jersey-servlet/src/main/java/org/glassfish/jersey/servlet/WebComponent.java
index f6b284e..f6d66b7 100644
--- a/containers/jersey-servlet/src/main/java/org/glassfish/jersey/servlet/WebComponent.java
+++ b/containers/jersey-servlet/src/main/java/org/glassfish/jersey/servlet/WebComponent.java
@@ -35,7 +35,7 @@
 import jakarta.ws.rs.core.SecurityContext;
 import org.glassfish.jersey.innate.inject.InjectionIds;
 import org.glassfish.jersey.innate.inject.InternalBinder;
-import org.glassfish.jersey.innate.inject.ServiceFinderBinder;
+import org.glassfish.jersey.internal.ServiceFinderBinder;
 import org.glassfish.jersey.innate.io.InputStreamWrapper;
 import org.glassfish.jersey.internal.inject.InjectionManager;
 import org.glassfish.jersey.internal.inject.Providers;
diff --git a/core-client/pom.xml b/core-client/pom.xml
index 247356c..93e6514 100644
--- a/core-client/pom.xml
+++ b/core-client/pom.xml
@@ -39,7 +39,6 @@
             --add-exports org.glassfish.jersey.core.common/org.glassfish.jersey.innate.virtual=ALL-UNNAMED
             --add-exports org.glassfish.jersey.core.common/org.glassfish.jersey.innate.io=ALL-UNNAMED
             --add-exports org.glassfish.jersey.core.common/org.glassfish.jersey.innate.inject=ALL-UNNAMED
-            --add-modules=ALL-MODULE-PATH
         </surefire.coverage.argline>
     </properties>
 
diff --git a/core-client/src/main/java/module-info.java b/core-client/src/main/java/module-info.java
index ee94e3a..5a2241d 100644
--- a/core-client/src/main/java/module-info.java
+++ b/core-client/src/main/java/module-info.java
@@ -51,18 +51,17 @@
             org.glassfish.jersey.incubator.injectless.client;
 
     opens org.glassfish.jersey.client;
-    opens org.glassfish.jersey.client.spi;
+    opens org.glassfish.jersey.client.authentication;
     opens org.glassfish.jersey.client.filter;
+    opens org.glassfish.jersey.client.http;
+    opens org.glassfish.jersey.client.inject;
+    opens org.glassfish.jersey.client.spi;
 
     // for Localization messages
     opens org.glassfish.jersey.client.internal;
 
-    uses org.glassfish.jersey.client.spi.AsyncConnectorCallback;
     uses org.glassfish.jersey.client.spi.ConnectorProvider;
     uses org.glassfish.jersey.client.spi.DefaultSslContextProvider;
-    uses org.glassfish.jersey.client.spi.InvocationBuilderListener;
-    uses org.glassfish.jersey.client.spi.PostInvocationInterceptor;
-    uses org.glassfish.jersey.client.spi.PreInvocationInterceptor;
 
     provides jakarta.ws.rs.client.ClientBuilder with
             org.glassfish.jersey.client.JerseyClientBuilder;
diff --git a/core-common/pom.xml b/core-common/pom.xml
index b4e0ca8..e2c8444 100644
--- a/core-common/pom.xml
+++ b/core-common/pom.xml
@@ -79,22 +79,6 @@
 
         <plugins>
             <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <version>${compiler.common.mvn.plugin.version}</version>
-                <inherited>false</inherited>
-                <configuration>
-                    <source>${java.version}</source>
-                    <target>${java.version}</target>
-                    <compilerArguments>
-                        <!-- Do not warn about using sun.misc.Unsafe -->
-                        <XDignore.symbol.file />
-                    </compilerArguments>
-                    <showWarnings>false</showWarnings>
-                    <fork>false</fork>
-                </configuration>
-            </plugin>
-            <plugin>
                 <groupId>com.sun.istack</groupId>
                 <artifactId>istack-commons-maven-plugin</artifactId>
                 <inherited>true</inherited>
@@ -301,7 +285,7 @@
                         <artifactId>build-helper-maven-plugin</artifactId>
                         <executions>
                             <execution>
-                                <id>add.java20-</id>
+                                <id>add.java20+</id>
                                 <phase>generate-sources</phase>
                                 <goals>
                                     <goal>add-source</goal>
@@ -474,10 +458,6 @@
         <surefire.security.argline>-Djava.security.manager -Djava.security.policy=${project.build.directory}/test-classes/surefire.policy</surefire.security.argline>
         <java21.build.outputDirectory>${project.build.directory}/classes-java21</java21.build.outputDirectory>
         <java21.sourceDirectory>${project.basedir}/src/main/java21</java21.sourceDirectory>
-        <surefire.coverage.argline>
-            --add-reads org.glassfish.jersey.core.common=ALL-UNNAMED
-            --add-modules=ALL-MODULE-PATH
-        </surefire.coverage.argline>
     </properties>
 
 </project>
diff --git a/core-common/src/main/java/module-info.java b/core-common/src/main/java/module-info.java
index 5020acd..0ed83e4 100644
--- a/core-common/src/main/java/module-info.java
+++ b/core-common/src/main/java/module-info.java
@@ -42,6 +42,7 @@
     exports org.glassfish.jersey.internal.routing; //
     exports org.glassfish.jersey.internal.util;
     exports org.glassfish.jersey.internal.util.collection;
+    exports org.glassfish.jersey.io.spi;
     exports org.glassfish.jersey.logging;
     exports org.glassfish.jersey.message;
     exports org.glassfish.jersey.message.internal; // Providers
@@ -62,28 +63,32 @@
                                            org.glassfish.jersey.container.jetty.http,
                                            org.glassfish.jersey.netty.connector,
                                            org.glassfish.jersey.ext.mp.rest.client,
+                                           org.glassfish.jersey.inject.cdi2.se,
                                            org.glassfish.jersey.incubator.cdi.inject.weld;
 
-    exports org.glassfish.jersey.innate.inject to org.glassfish.jersey.inject.hk2,
-                                                  org.glassfish.jersey.inject.cdi2.se,
-                                                  org.glassfish.jersey.core.client,
-                                                  org.glassfish.jersey.core.server,
-                                                  org.glassfish.jersey.container.grizzly2.http,
-                                                  org.glassfish.jersey.container.servlet,
-                                                  org.glassfish.jersey.container.jetty.http,
-                                                  org.glassfish.jersey.media.sse,
-                                                  org.glassfish.jersey.media.jaxb,
-                                                  org.glassfish.jersey.media.moxy,
-                                                  org.glassfish.jersey.media.multipart,
-                                                  org.glassfish.jersey.ext.bean.validation,
-                                                  org.glassfish.jersey.ext.cdi1x,
-                                                  org.glassfish.jersey.ext.cdi1x.transaction,
-                                                  org.glassfish.jersey.ext.entity.filtering,
-                                                  org.glassfish.jersey.ext.metainf.services,
-                                                  org.glassfish.jersey.ext.mvc,
-                                                  org.glassfish.jersey.incubator.cdi.inject.weld,
-                                                  org.glassfish.jersey.gf.ejb,
-                                                  org.glassfish.jersey.security.oauth1.signature;
+    exports org.glassfish.jersey.innate.inject to
+            org.glassfish.jersey.inject.hk2,
+            org.glassfish.jersey.core.client,
+            org.glassfish.jersey.core.server,
+            org.glassfish.jersey.container.grizzly2.http,
+            org.glassfish.jersey.container.servlet,
+            org.glassfish.jersey.container.jetty.http,
+            org.glassfish.jersey.media.sse,
+            org.glassfish.jersey.media.jaxb,
+            org.glassfish.jersey.media.json.jackson,
+            org.glassfish.jersey.media.moxy,
+            org.glassfish.jersey.media.multipart,
+            org.glassfish.jersey.ext.bean.validation,
+            org.glassfish.jersey.ext.cdi1x,
+            org.glassfish.jersey.ext.cdi1x.transaction,
+            org.glassfish.jersey.ext.entity.filtering,
+            org.glassfish.jersey.ext.metainf.services,
+            org.glassfish.jersey.ext.mvc,
+            org.glassfish.jersey.incubator.cdi.inject.weld,
+            org.glassfish.jersey.incubator.declarative.linking,
+            org.glassfish.jersey.inject.cdi2.se,
+            org.glassfish.jersey.gf.ejb,
+            org.glassfish.jersey.security.oauth1.signature;
     exports org.glassfish.jersey.innate.virtual to org.glassfish.jersey.container.grizzly2.http,
                                                    org.glassfish.jersey.container.jetty.http,
                                                    org.glassfish.jersey.netty.connector,
@@ -100,22 +105,38 @@
     exports org.glassfish.jersey.innate.spi to org.glassfish.jersey.core.client,
                                                org.glassfish.jersey.core.server,
                                                org.glassfish.jersey.media.multipart;
-    exports org.glassfish.jersey.io.spi to org.glassfish.jersey.core.server,
-                                               org.glassfish.jersey.media.multipart;
     exports org.glassfish.jersey.innate.inject.spi to org.glassfish.jersey.inject.hk2;
 
+    opens org.glassfish.jersey;
+    opens org.glassfish.jersey.http;
     opens org.glassfish.jersey.innate.spi to org.glassfish.jersey.media.multipart;
     opens org.glassfish.jersey.internal;
+    opens org.glassfish.jersey.internal.guava;
+    opens org.glassfish.jersey.internal.inject;
+    opens org.glassfish.jersey.internal.l10n;
+    opens org.glassfish.jersey.internal.sonar;
+    opens org.glassfish.jersey.internal.spi;
+    opens org.glassfish.jersey.internal.routing;
+    opens org.glassfish.jersey.internal.util;
     opens org.glassfish.jersey.internal.util.collection;
+    opens org.glassfish.jersey.io.spi;
+    opens org.glassfish.jersey.logging;
+    opens org.glassfish.jersey.message;
     opens org.glassfish.jersey.message.internal;
+    opens org.glassfish.jersey.model;
+    opens org.glassfish.jersey.model.internal;
+    opens org.glassfish.jersey.model.internal.spi;
+    opens org.glassfish.jersey.process;
+    opens org.glassfish.jersey.process.internal;
     opens org.glassfish.jersey.spi;
+    opens org.glassfish.jersey.uri;
+    opens org.glassfish.jersey.uri.internal;
 
     uses jakarta.ws.rs.core.Feature;
     uses jakarta.ws.rs.container.DynamicFeature;
     uses jakarta.ws.rs.ext.RuntimeDelegate;
 
     uses org.glassfish.jersey.innate.spi.EntityPartBuilderProvider;
-    uses org.glassfish.jersey.internal.ServiceFinder;
     uses org.glassfish.jersey.internal.inject.InjectionManagerFactory;
     uses org.glassfish.jersey.internal.spi.AutoDiscoverable;
     uses org.glassfish.jersey.internal.spi.ForcedAutoDiscoverable;
diff --git a/core-common/src/main/java/org/glassfish/jersey/innate/inject/BlindBinder.java b/core-common/src/main/java/org/glassfish/jersey/innate/inject/BlindBinder.java
index 12efd1b..d343bdf 100644
--- a/core-common/src/main/java/org/glassfish/jersey/innate/inject/BlindBinder.java
+++ b/core-common/src/main/java/org/glassfish/jersey/innate/inject/BlindBinder.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2024 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -77,7 +77,7 @@
      * @param <T>   type of the managed instance returned using provider.
      * @return provider with instance of managed instance.
      */
-    protected final <T> Provider<T> createManagedInstanceProvider(Class<T> clazz) {
+    protected <T> Provider<T> createManagedInstanceProvider(Class<T> clazz) {
         return () -> {
             if (injectionManager == null) {
                 throw new IllegalStateException(LocalizationMessages.INJECTION_MANAGER_NOT_PROVIDED());
diff --git a/core-common/src/main/java/org/glassfish/jersey/innate/inject/ServiceFinderBinder.java b/core-common/src/main/java/org/glassfish/jersey/internal/ServiceFinderBinder.java
similarity index 93%
rename from core-common/src/main/java/org/glassfish/jersey/innate/inject/ServiceFinderBinder.java
rename to core-common/src/main/java/org/glassfish/jersey/internal/ServiceFinderBinder.java
index fe0e8a0..798b18f 100644
--- a/core-common/src/main/java/org/glassfish/jersey/innate/inject/ServiceFinderBinder.java
+++ b/core-common/src/main/java/org/glassfish/jersey/internal/ServiceFinderBinder.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2024 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -14,14 +14,13 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.innate.inject;
+package org.glassfish.jersey.internal;
 
 import java.util.Map;
 
 import jakarta.ws.rs.RuntimeType;
 
 import org.glassfish.jersey.innate.inject.InternalBinder;
-import org.glassfish.jersey.internal.ServiceFinder;
 import org.glassfish.jersey.internal.inject.InjectionManager;
 import org.glassfish.jersey.internal.util.PropertiesHelper;
 
diff --git a/core-common/src/main/java/org/glassfish/jersey/message/internal/MessagingBinders.java b/core-common/src/main/java/org/glassfish/jersey/message/internal/MessagingBinders.java
index d5b0e63..7ec2367 100644
--- a/core-common/src/main/java/org/glassfish/jersey/message/internal/MessagingBinders.java
+++ b/core-common/src/main/java/org/glassfish/jersey/message/internal/MessagingBinders.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2024 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -37,7 +37,7 @@
 import org.glassfish.jersey.innate.inject.InjectionIds;
 import org.glassfish.jersey.innate.inject.InternalBinder;
 import org.glassfish.jersey.internal.LocalizationMessages;
-import org.glassfish.jersey.innate.inject.ServiceFinderBinder;
+import org.glassfish.jersey.internal.ServiceFinderBinder;
 import org.glassfish.jersey.internal.util.ReflectionHelper;
 import org.glassfish.jersey.internal.util.Tokenizer;
 import org.glassfish.jersey.spi.HeaderDelegateProvider;
diff --git a/core-server/pom.xml b/core-server/pom.xml
index 2b24237..285f3d0 100644
--- a/core-server/pom.xml
+++ b/core-server/pom.xml
@@ -316,7 +316,7 @@
 
     <properties>
         <surefire.security.argline>-Djava.security.manager -Djava.security.policy=${project.build.directory}/test-classes/server.policy</surefire.security.argline>
-        <surefire.coverage.argline>--add-modules=ALL-MODULE-PATH</surefire.coverage.argline>
+        <surefire.coverage.argline>--add-opens org.glassfish.jersey.core.server/org.glassfish.jersey.server.internal.inject=jakarta.xml.bind</surefire.coverage.argline>
     </properties>
 
 </project>
diff --git a/core-server/src/main/java/module-info.java b/core-server/src/main/java/module-info.java
index de75462..733d774 100644
--- a/core-server/src/main/java/module-info.java
+++ b/core-server/src/main/java/module-info.java
@@ -35,10 +35,30 @@
     requires org.glassfish.jersey.core.client;
 
     exports org.glassfish.jersey.server;
-    exports org.glassfish.jersey.server.spi;
-    exports org.glassfish.jersey.server.spi.internal;
+    exports org.glassfish.jersey.server.filter;
+    exports org.glassfish.jersey.server.filter.internal to
+            org.glassfish.hk2.locator,
+            org.glassfish.hk2.utilities,
+            org.glassfish.jersey.incubator.cdi.inject.weld;
+    exports org.glassfish.jersey.server.internal;
+    exports org.glassfish.jersey.server.internal.inject to
+            org.glassfish.hk2.locator,
+            org.glassfish.jersey.core.common,
+            org.glassfish.jersey.core.client,
+            org.glassfish.jersey.media.sse,
+            org.glassfish.jersey.ext.bean.validation,
+            org.glassfish.jersey.media.multipart,
+            org.glassfish.jersey.ext.mvc;
+    exports org.glassfish.jersey.server.internal.monitoring; // MonitoringFeature
+    exports org.glassfish.jersey.server.internal.process to org.glassfish.hk2.locator;
+    exports org.glassfish.jersey.server.internal.routing;
+    exports org.glassfish.jersey.server.internal.scanning to org.glassfish.jersey.container.servlet;
+    exports org.glassfish.jersey.server.internal.sonar;
     exports org.glassfish.jersey.server.model;
     exports org.glassfish.jersey.server.model.internal to org.glassfish.jersey.ext.mvc, org.glassfish.jersey.media.sse;
+    exports org.glassfish.jersey.server.monitoring;
+    exports org.glassfish.jersey.server.spi;
+    exports org.glassfish.jersey.server.spi.internal;
     exports org.glassfish.jersey.server.wadl;
     exports org.glassfish.jersey.server.wadl.config;
     exports org.glassfish.jersey.server.wadl.processor;
@@ -46,34 +66,8 @@
     exports org.glassfish.jersey.server.wadl.internal.generators;
     exports org.glassfish.jersey.server.wadl.internal.generators.resourcedoc;
     exports org.glassfish.jersey.server.wadl.internal.generators.resourcedoc.model;
-    exports org.glassfish.jersey.server.filter;
-    exports org.glassfish.jersey.server.filter.internal to
-            org.glassfish.hk2.locator,
-            org.glassfish.hk2.utilities,
-            org.glassfish.jersey.incubator.cdi.inject.weld;
-
-    exports org.glassfish.jersey.server.monitoring;
-    exports org.glassfish.jersey.server.internal;
-
-    exports org.glassfish.jersey.server.internal.inject to
-            org.glassfish.hk2.locator,
-            org.glassfish.jersey.core.common,
-            org.glassfish.jersey.media.sse,
-            org.glassfish.jersey.ext.bean.validation,
-            org.glassfish.jersey.media.multipart,
-            org.glassfish.jersey.ext.mvc;
-    exports org.glassfish.jersey.server.internal.monitoring; // MonitoringFeature
-    exports org.glassfish.jersey.server.internal.process to org.glassfish.hk2.locator;
-    exports org.glassfish.jersey.server.internal.routing to org.glassfish.hk2.locator;
-    exports org.glassfish.jersey.server.internal.scanning to org.glassfish.jersey.container.servlet;
-    exports org.glassfish.jersey.server.internal.sonar;
 
     exports com.sun.research.ws.wadl;
-    exports org.glassfish.jersey.server.internal.monitoring.core;
-
-    uses org.glassfish.jersey.server.spi.ComponentProvider;
-    uses org.glassfish.jersey.server.spi.ExternalRequestScope;
-    uses org.glassfish.jersey.server.spi.WebServerProvider;
 
     opens com.sun.research.ws.wadl to jakarta.xml.bind;
 
@@ -82,19 +76,44 @@
     opens org.glassfish.jersey.server.filter.internal to
             org.glassfish.hk2.locator,
             org.glassfish.hk2.utilities,
+            org.glassfish.jersey.inject.cdi2.se,
+            org.glassfish.jersey.incubator.cdi.inject.weld,
+            org.glassfish.jersey.core.client, // NonInjectionManager
             weld.core.impl;
-    opens org.glassfish.jersey.server.internal to org.glassfish.hk2.utilities, weld.core.impl;
-    opens org.glassfish.jersey.server.internal.inject;
-    opens org.glassfish.jersey.server.internal.monitoring to org.glassfish.hk2.utilities;
+    opens org.glassfish.jersey.server.internal;
+    opens org.glassfish.jersey.server.internal.inject to
+            org.glassfish.hk2.locator,
+            org.glassfish.hk2.utilities,
+            org.glassfish.jersey.core.common,
+            org.glassfish.jersey.media.sse,
+            org.glassfish.jersey.ext.bean.validation,
+            org.glassfish.jersey.media.multipart,
+            org.glassfish.jersey.ext.mvc;
+    opens org.glassfish.jersey.server.internal.monitoring;
     opens org.glassfish.jersey.server.internal.monitoring.jmx to org.glassfish.hk2.utilities;
     opens org.glassfish.jersey.server.internal.process to
             org.glassfish.hk2.locator,
             org.glassfish.hk2.utilities,
+            org.glassfish.jersey.inject.cdi2.se,
+            org.glassfish.jersey.incubator.cdi.inject.weld,
             weld.core.impl;
-    opens org.glassfish.jersey.server.internal.routing to org.glassfish.hk2.utilities;
+    opens org.glassfish.jersey.server.internal.routing;
+    opens org.glassfish.jersey.server.internal.sonar;
     opens org.glassfish.jersey.server.model;
+    opens org.glassfish.jersey.server.spi;
+    opens org.glassfish.jersey.server.spi.internal;
+    opens org.glassfish.jersey.server.wadl;
+    opens org.glassfish.jersey.server.wadl.config;
+    opens org.glassfish.jersey.server.wadl.internal;
+    opens org.glassfish.jersey.server.wadl.internal.generators;
+    opens org.glassfish.jersey.server.wadl.internal.generators.resourcedoc;
+    opens org.glassfish.jersey.server.wadl.internal.generators.resourcedoc.model;
     opens org.glassfish.jersey.server.wadl.processor;
 
+    uses org.glassfish.jersey.server.spi.ComponentProvider;
+    uses org.glassfish.jersey.server.spi.ExternalRequestScope;
+    uses org.glassfish.jersey.server.spi.WebServerProvider;
+
     provides jakarta.ws.rs.ext.RuntimeDelegate
             with org.glassfish.jersey.server.internal.RuntimeDelegateImpl;
     provides org.glassfish.jersey.internal.spi.AutoDiscoverable
diff --git a/core-server/src/main/java/org/glassfish/jersey/server/internal/scanning/PackageNamesScanner.java b/core-server/src/main/java/org/glassfish/jersey/server/internal/scanning/PackageNamesScanner.java
index d482dde..9751937 100644
--- a/core-server/src/main/java/org/glassfish/jersey/server/internal/scanning/PackageNamesScanner.java
+++ b/core-server/src/main/java/org/glassfish/jersey/server/internal/scanning/PackageNamesScanner.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2024 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -213,7 +213,12 @@
                             @Override
                             public Enumeration<URL> getResources(final String name, final ClassLoader cl)
                                     throws IOException {
-                                return cl.getResources(name);
+                                Enumeration<URL> ret = cl.getResources(name);
+                                if (!ret.hasMoreElements()) {
+                                    // Module
+                                    ret = cl.getResources(name + "/");
+                                }
+                                return ret;
                             }
                         };
 
diff --git a/etc/jenkins/Jenkinsfile_ci_build b/etc/jenkins/Jenkinsfile_ci_build
index 349f04d..a32966c 100644
--- a/etc/jenkins/Jenkinsfile_ci_build
+++ b/etc/jenkins/Jenkinsfile_ci_build
@@ -24,12 +24,12 @@
 //                            '''
 //                    }
 //                }
-                stage('JDK 21') {
+                stage('JDK 25') {
                     agent {
                         label 'centos-7'
                     }
                     tools {
-                        jdk 'openjdk-jdk21-latest'
+                        jdk 'openjdk-jdk25-latest'
                         maven 'apache-maven-latest'
                     }
                     steps {
diff --git a/ext/bean-validation/src/main/java/module-info.java b/ext/bean-validation/src/main/java/module-info.java
index 017bd1d..4404399 100644
--- a/ext/bean-validation/src/main/java/module-info.java
+++ b/ext/bean-validation/src/main/java/module-info.java
@@ -34,19 +34,23 @@
     exports org.glassfish.jersey.server.validation.internal to
             org.glassfish.hk2.locator,
             org.glassfish.hk2.utilities,
+            org.glassfish.jersey.core.client,
             org.glassfish.jersey.ext.mvc.bean.validation;
     exports org.glassfish.jersey.server.validation.internal.l10n;
     exports org.glassfish.jersey.server.validation.internal.hibernate to
             org.glassfish.hk2.locator,
-            org.glassfish.hk2.utilities;
+            org.glassfish.hk2.utilities,
+            org.glassfish.jersey.core.client;
     opens org.glassfish.jersey.server.validation;
     opens org.glassfish.jersey.server.validation.internal to
             org.glassfish.hk2.locator,
             org.glassfish.hk2.utilities,
+            org.glassfish.jersey.core.client,
             org.glassfish.jersey.ext.mvc.bean.validation;
     opens org.glassfish.jersey.server.validation.internal.hibernate to
             org.glassfish.hk2.locator,
-            org.glassfish.hk2.utilities;
+            org.glassfish.hk2.utilities,
+            org.glassfish.jersey.core.client;
     opens org.glassfish.jersey.server.validation.internal.l10n;
 
     provides org.glassfish.jersey.internal.spi.ForcedAutoDiscoverable with
diff --git a/ext/cdi/jersey-cdi1x/src/main/java/module-info.java b/ext/cdi/jersey-cdi1x/src/main/java/module-info.java
index 2d7b737..5ffdfbe 100644
--- a/ext/cdi/jersey-cdi1x/src/main/java/module-info.java
+++ b/ext/cdi/jersey-cdi1x/src/main/java/module-info.java
@@ -33,7 +33,10 @@
     exports org.glassfish.jersey.ext.cdi1x.internal; // @JerseyVetoed
     exports org.glassfish.jersey.ext.cdi1x.internal.spi;
     exports org.glassfish.jersey.ext.cdi1x.spi;
+
     opens org.glassfish.jersey.ext.cdi1x.internal;
+    opens org.glassfish.jersey.ext.cdi1x.internal.spi;
+    opens org.glassfish.jersey.ext.cdi1x.spi;
 
     uses org.glassfish.jersey.ext.cdi1x.spi.Hk2CustomBoundTypesProvider;
     uses org.glassfish.jersey.ext.cdi1x.internal.spi.BeanManagerProvider;
diff --git a/ext/entity-filtering/src/main/java/module-info.java b/ext/entity-filtering/src/main/java/module-info.java
index 0722c06..9d8853d 100644
--- a/ext/entity-filtering/src/main/java/module-info.java
+++ b/ext/entity-filtering/src/main/java/module-info.java
@@ -29,19 +29,7 @@
     exports org.glassfish.jersey.message.filtering.internal; // localization
     exports org.glassfish.jersey.message.filtering.spi;
 
+    opens org.glassfish.jersey.message.filtering;
     opens org.glassfish.jersey.message.filtering.internal;
-
-    uses org.glassfish.jersey.message.filtering.spi.AbstractEntityProcessor;
-    uses org.glassfish.jersey.message.filtering.spi.AbstractObjectProvider;
-    uses org.glassfish.jersey.message.filtering.spi.EntityGraph;
-    uses org.glassfish.jersey.message.filtering.spi.EntityGraphProvider;
-    uses org.glassfish.jersey.message.filtering.spi.EntityInspector;
-    uses org.glassfish.jersey.message.filtering.spi.EntityProcessor;
-    uses org.glassfish.jersey.message.filtering.spi.EntityProcessorContext;
-    uses org.glassfish.jersey.message.filtering.spi.ObjectGraph;
-    uses org.glassfish.jersey.message.filtering.spi.ObjectGraphTransformer;
-    uses org.glassfish.jersey.message.filtering.spi.ObjectProvider;
-    uses org.glassfish.jersey.message.filtering.spi.ScopeProvider;
-    uses org.glassfish.jersey.message.filtering.spi.ScopeResolver;
-
+    opens org.glassfish.jersey.message.filtering.spi;
 }
\ No newline at end of file
diff --git a/ext/metainf-services/src/main/java/module-info.java b/ext/metainf-services/src/main/java/module-info.java
index 64ab7f0..dfdfa2c 100644
--- a/ext/metainf-services/src/main/java/module-info.java
+++ b/ext/metainf-services/src/main/java/module-info.java
@@ -19,7 +19,9 @@
     requires jakarta.ws.rs;
 
     requires org.glassfish.jersey.core.common;
-    exports org.glassfish.jersey.spidiscovery.internal to org.glassfish.hk2.locator;
+    exports org.glassfish.jersey.spidiscovery.internal to
+            org.glassfish.hk2.locator,
+            weld.core.impl;
 
     provides org.glassfish.jersey.internal.spi.ForcedAutoDiscoverable with
             org.glassfish.jersey.spidiscovery.internal.MetaInfServicesAutoDiscoverable;
diff --git a/ext/metainf-services/src/main/java/org/glassfish/jersey/spidiscovery/internal/MetaInfServicesAutoDiscoverable.java b/ext/metainf-services/src/main/java/org/glassfish/jersey/spidiscovery/internal/MetaInfServicesAutoDiscoverable.java
index 152c7c2..437ebbf 100644
--- a/ext/metainf-services/src/main/java/org/glassfish/jersey/spidiscovery/internal/MetaInfServicesAutoDiscoverable.java
+++ b/ext/metainf-services/src/main/java/org/glassfish/jersey/spidiscovery/internal/MetaInfServicesAutoDiscoverable.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2024 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,7 +27,7 @@
 import jakarta.annotation.Priority;
 
 import org.glassfish.jersey.innate.inject.InternalBinder;
-import org.glassfish.jersey.innate.inject.ServiceFinderBinder;
+import org.glassfish.jersey.internal.ServiceFinderBinder;
 import org.glassfish.jersey.internal.spi.AutoDiscoverable;
 import org.glassfish.jersey.internal.spi.ForcedAutoDiscoverable;
 
diff --git a/ext/micrometer/pom.xml b/ext/micrometer/pom.xml
index 8f1cf82..d7c6f74 100644
--- a/ext/micrometer/pom.xml
+++ b/ext/micrometer/pom.xml
@@ -106,6 +106,14 @@
                     <unpackBundle>true</unpackBundle>
                 </configuration>
             </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <inherited>true</inherited>
+                <configuration>
+                    <useModulePath>false</useModulePath>
+                </configuration>
+            </plugin>
         </plugins>
     </build>
 
diff --git a/incubator/declarative-linking/src/test/java/module-info.txt b/ext/micrometer/src/main/java/module-info.java
similarity index 68%
copy from incubator/declarative-linking/src/test/java/module-info.txt
copy to ext/micrometer/src/main/java/module-info.java
index aee82c7..a0f90cc 100644
--- a/incubator/declarative-linking/src/test/java/module-info.txt
+++ b/ext/micrometer/src/main/java/module-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -14,18 +14,16 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-open module org.glassfish.jersey.incubator.declarative.linking {
-    requires junit;
-
+module org.glassfish.jersey.ext.micrometer {
     requires java.logging;
-    requires java.desktop;
 
-    requires jakarta.xml.bind;
-
-    requires com.fasterxml.jackson.databind;
-
-    requires org.glassfish.jersey.core.client;
+    requires jakarta.ws.rs;
+    requires micrometer.commons;
+    requires micrometer.core;
+    requires micrometer.observation;
     requires org.glassfish.jersey.core.common;
     requires org.glassfish.jersey.core.server;
-    requires jsonassert;
+
+    exports org.glassfish.jersey.micrometer.server;
+    opens org.glassfish.jersey.micrometer.server;
 }
\ No newline at end of file
diff --git a/ext/microprofile/mp-config/src/main/java/module-info.java b/ext/microprofile/mp-config/src/main/java/module-info.java
index cda7d57..7f292cd 100644
--- a/ext/microprofile/mp-config/src/main/java/module-info.java
+++ b/ext/microprofile/mp-config/src/main/java/module-info.java
@@ -22,6 +22,7 @@
     requires static org.glassfish.jersey.core.server;
 
     exports org.glassfish.jersey.microprofile.config;
+    opens org.glassfish.jersey.microprofile.config;
 
     provides org.glassfish.jersey.spi.ExternalConfigurationProvider with
             org.glassfish.jersey.microprofile.config.ConfigurationProvider;
diff --git a/ext/microprofile/mp-rest-client/src/main/java/module-info.java b/ext/microprofile/mp-rest-client/src/main/java/module-info.java
index 6a06610..76d2ddc 100644
--- a/ext/microprofile/mp-rest-client/src/main/java/module-info.java
+++ b/ext/microprofile/mp-rest-client/src/main/java/module-info.java
@@ -38,6 +38,7 @@
     exports org.glassfish.jersey.microprofile.restclient;
     exports org.glassfish.jersey.microprofile.restclient.internal; // localization
 
+    opens org.glassfish.jersey.microprofile.restclient;
     opens org.glassfish.jersey.microprofile.restclient.internal;
 
     provides jakarta.enterprise.inject.spi.Extension with
diff --git a/ext/mvc-bean-validation/src/main/java/module-info.java b/ext/mvc-bean-validation/src/main/java/module-info.java
index f479039..71f6214 100644
--- a/ext/mvc-bean-validation/src/main/java/module-info.java
+++ b/ext/mvc-bean-validation/src/main/java/module-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,4 +23,6 @@
     requires org.glassfish.jersey.ext.bean.validation;
 
     exports org.glassfish.jersey.server.mvc.beanvalidation;
+
+    opens org.glassfish.jersey.server.mvc.beanvalidation;
 }
\ No newline at end of file
diff --git a/ext/mvc-freemarker/src/main/java/module-info.java b/ext/mvc-freemarker/src/main/java/module-info.java
index 2af13d3..0651b1d 100644
--- a/ext/mvc-freemarker/src/main/java/module-info.java
+++ b/ext/mvc-freemarker/src/main/java/module-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,4 +26,6 @@
     requires org.glassfish.jersey.ext.mvc;
 
     exports org.glassfish.jersey.server.mvc.freemarker;
+
+    opens org.glassfish.jersey.server.mvc.freemarker;
 }
\ No newline at end of file
diff --git a/ext/mvc-freemarker/src/main/java/org/glassfish/jersey/server/mvc/freemarker/FreemarkerDefaultConfigurationFactory.java b/ext/mvc-freemarker/src/main/java/org/glassfish/jersey/server/mvc/freemarker/FreemarkerDefaultConfigurationFactory.java
index 75e736a..6d03fd3 100644
--- a/ext/mvc-freemarker/src/main/java/org/glassfish/jersey/server/mvc/freemarker/FreemarkerDefaultConfigurationFactory.java
+++ b/ext/mvc-freemarker/src/main/java/org/glassfish/jersey/server/mvc/freemarker/FreemarkerDefaultConfigurationFactory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -18,6 +18,7 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.net.URL;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -27,7 +28,6 @@
 import freemarker.cache.FileTemplateLoader;
 import freemarker.cache.MultiTemplateLoader;
 import freemarker.cache.TemplateLoader;
-import freemarker.cache.WebappTemplateLoader;
 import freemarker.template.Configuration;
 
 /**
@@ -55,6 +55,13 @@
             //todo fix after jakartification
             //loaders.add(new WebappTemplateLoader(servletContext));
         }
+        // in Module
+        loaders.add(new ClassTemplateLoader(FreemarkerDefaultConfigurationFactory.class, "") {
+            @Override
+            protected URL getURL(String fullPath) {
+                return getResourceLoaderClass().getClassLoader().getResource(fullPath);
+            }
+        });
         loaders.add(new ClassTemplateLoader(FreemarkerDefaultConfigurationFactory.class, "/"));
         try {
             loaders.add(new FileTemplateLoader(new File("/")));
diff --git a/ext/mvc-jsp/src/main/java/module-info.java b/ext/mvc-jsp/src/main/java/module-info.java
index 8afa940..8a0eb4b 100644
--- a/ext/mvc-jsp/src/main/java/module-info.java
+++ b/ext/mvc-jsp/src/main/java/module-info.java
@@ -27,5 +27,6 @@
     exports org.glassfish.jersey.server.mvc.jsp;
     exports org.glassfish.jersey.server.mvc.jsp.internal; // localization
 
+    opens org.glassfish.jersey.server.mvc.jsp;
     opens org.glassfish.jersey.server.mvc.jsp.internal;
 }
\ No newline at end of file
diff --git a/ext/mvc-mustache/src/main/java/module-info.java b/ext/mvc-mustache/src/main/java/module-info.java
index 65360fc..0e5bf96 100644
--- a/ext/mvc-mustache/src/main/java/module-info.java
+++ b/ext/mvc-mustache/src/main/java/module-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022, 2023 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,4 +28,6 @@
     requires org.glassfish.jersey.ext.mvc;
 
     exports org.glassfish.jersey.server.mvc.mustache;
+
+    opens org.glassfish.jersey.server.mvc.mustache;
 }
\ No newline at end of file
diff --git a/incubator/gae-integration/src/main/java/module-info.java b/ext/mvc-thymeleaf/src/main/java/module-info.java
similarity index 65%
copy from incubator/gae-integration/src/main/java/module-info.java
copy to ext/mvc-thymeleaf/src/main/java/module-info.java
index 761af57..ff0bb29 100644
--- a/incubator/gae-integration/src/main/java/module-info.java
+++ b/ext/mvc-thymeleaf/src/main/java/module-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022, 2023 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -14,13 +14,17 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-module org.glassfish.jersey.incubator.gae.integration {
+module org.glassfish.jersey.ext.mvc.jersey.mvc.thymeleaf {
+    requires jakarta.inject;
+    requires jakarta.servlet;
     requires jakarta.ws.rs;
 
-//    requires com.google.appengine.api;
-
     requires org.glassfish.jersey.core.common;
-    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.ext.mvc;
 
-    exports org.glassfish.jersey.server.gae;
+    requires thymeleaf;
+
+    exports org.glassfish.jersey.server.mvc.thymeleaf;
+
+    opens org.glassfish.jersey.server.mvc.thymeleaf;
 }
\ No newline at end of file
diff --git a/ext/mvc/src/main/java/module-info.java b/ext/mvc/src/main/java/module-info.java
index b440986..411575d 100644
--- a/ext/mvc/src/main/java/module-info.java
+++ b/ext/mvc/src/main/java/module-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 202, 2025 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,13 +26,12 @@
     requires org.glassfish.jersey.core.common;
 
     exports org.glassfish.jersey.server.mvc;
-    exports org.glassfish.jersey.server.mvc.internal to org.glassfish.jersey.ext.mvc.jsp;
+    exports org.glassfish.jersey.server.mvc.internal;
     exports org.glassfish.jersey.server.mvc.internal.l10n;
     exports org.glassfish.jersey.server.mvc.spi;
 
+    opens org.glassfish.jersey.server.mvc;
+    opens org.glassfish.jersey.server.mvc.internal;
     opens org.glassfish.jersey.server.mvc.internal.l10n;
-
-    uses org.glassfish.jersey.server.mvc.spi.TemplateProcessor;
-    uses org.glassfish.jersey.server.mvc.spi.ViewableContext;
-    uses org.glassfish.jersey.server.mvc.spi.AbstractTemplateProcessor;
+    opens org.glassfish.jersey.server.mvc.spi;
 }
\ No newline at end of file
diff --git a/ext/mvc/src/main/java/org/glassfish/jersey/server/mvc/spi/AbstractTemplateProcessor.java b/ext/mvc/src/main/java/org/glassfish/jersey/server/mvc/spi/AbstractTemplateProcessor.java
index 7f878cf..c7b53db 100644
--- a/ext/mvc/src/main/java/org/glassfish/jersey/server/mvc/spi/AbstractTemplateProcessor.java
+++ b/ext/mvc/src/main/java/org/glassfish/jersey/server/mvc/spi/AbstractTemplateProcessor.java
@@ -176,6 +176,10 @@
                 if (stream == null) {
                     stream = getClass().getClassLoader().getResourceAsStream(template);
                 }
+                if (stream == null && template.startsWith("/") && template.length() > 1) {
+                    // Module.getResourceAsStream() replaces first "/" with "."
+                    stream = getClass().getClassLoader().getResourceAsStream(template.substring(1));
+                }
                 reader = stream != null ? new InputStreamReader(stream) : null;
             }
 
diff --git a/ext/spring6/pom.xml b/ext/spring6/pom.xml
index 794ecfb..d971f32 100644
--- a/ext/spring6/pom.xml
+++ b/ext/spring6/pom.xml
@@ -220,6 +220,16 @@
                 <artifactId>build-helper-maven-plugin</artifactId>
                 <inherited>true</inherited>
             </plugin>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <inherited>true</inherited>
+                <configuration>
+                    <instructions>
+                        <Automatic-Module-Name>org.glassfish.jersey.ext.spring6</Automatic-Module-Name>
+                    </instructions>
+                </configuration>
+            </plugin>
         </plugins>
     </build>
 
diff --git a/ext/wadl-doclet/src/main/java/module-info.java b/ext/wadl-doclet/src/main/java/module-info.java
index cad70c3..0380148 100644
--- a/ext/wadl-doclet/src/main/java/module-info.java
+++ b/ext/wadl-doclet/src/main/java/module-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,4 +27,5 @@
     requires org.glassfish.jersey.core.server;
 
     exports org.glassfish.jersey.wadl.doclet;
+    opens org.glassfish.jersey.wadl.doclet;
 }
\ No newline at end of file
diff --git a/incubator/cdi-inject-weld/src/main/java/org/glassfish/jersey/inject/weld/internal/injector/JerseyInjectionTarget.java b/incubator/cdi-inject-weld/src/main/java/org/glassfish/jersey/inject/weld/internal/injector/JerseyInjectionTarget.java
index 94fd307..0e791b1 100644
--- a/incubator/cdi-inject-weld/src/main/java/org/glassfish/jersey/inject/weld/internal/injector/JerseyInjectionTarget.java
+++ b/incubator/cdi-inject-weld/src/main/java/org/glassfish/jersey/inject/weld/internal/injector/JerseyInjectionTarget.java
@@ -63,7 +63,7 @@
 
 /**
  * Wrapper for {@link InjectionTarget} that implements the functionality of injecting using JAX-RS annotations into provided
- * instances. {@code Delegate} is a original {@code InjectionTarget} which is able to inject other fields/parameters which
+ * instances. {@code Delegate} is an original {@code InjectionTarget} which is able to inject other fields/parameters which
  * are managed by CDI.
  * <p>
  * Implementation is also able to create with custom {@code jerseyConstructor} if it is provided. This functionality allows override
diff --git a/incubator/declarative-linking/pom.xml b/incubator/declarative-linking/pom.xml
index c6deb93..f740318 100644
--- a/incubator/declarative-linking/pom.xml
+++ b/incubator/declarative-linking/pom.xml
@@ -37,8 +37,8 @@
 
     <properties>
         <surefire.coverage.argline>
-            --add-opens java.base/java.util.zip=ALL-UNNAMED
-            --add-opens java.base/java.util=ALL-UNNAMED
+            --add-opens java.base/java.util=org.glassfish.jersey.incubator.declarative.linking
+            --add-opens java.base/java.util.zip=org.glassfish.jersey.incubator.declarative.linking
         </surefire.coverage.argline>
     </properties>
 
@@ -95,7 +95,7 @@
         <dependency>
             <groupId>org.skyscreamer</groupId>
             <artifactId>jsonassert</artifactId>
-            <version>1.5.1</version>
+            <version>2.0-rc1</version>
             <scope>test</scope>
         </dependency>
     </dependencies>
@@ -132,11 +132,6 @@
         </profile>
     </profiles>
 
-    <!--<properties>
-        <surefire.coverage.argline>&#45;&#45;add-opens java.base/java.util.zip=org.glassfish.jersey.incubator.declarative.linking
-            &#45;&#45;add-opens java.base/java.util=org.glassfish.jersey.incubator.declarative.linking &#45;&#45;illegal-access=permit</surefire.coverage.argline>
-    </properties>-->
-
     <build>
         <resources>
             <resource>
diff --git a/incubator/declarative-linking/src/main/java/module-info.txt b/incubator/declarative-linking/src/main/java/module-info.java
similarity index 86%
rename from incubator/declarative-linking/src/main/java/module-info.txt
rename to incubator/declarative-linking/src/main/java/module-info.java
index 2835731..a362c42 100644
--- a/incubator/declarative-linking/src/main/java/module-info.txt
+++ b/incubator/declarative-linking/src/main/java/module-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -27,9 +27,11 @@
     requires org.glassfish.jersey.core.common;
     requires org.glassfish.jersey.core.server;
 
-    opens org.glassfish.jersey.linking;
     exports org.glassfish.jersey.linking;
-
     exports org.glassfish.jersey.linking.contributing;
     exports org.glassfish.jersey.linking.mapping;
+
+    opens org.glassfish.jersey.linking;
+    opens org.glassfish.jersey.linking.contributing;
+    opens org.glassfish.jersey.linking.mapping;
 }
\ No newline at end of file
diff --git a/incubator/declarative-linking/src/test/java/module-info.txt b/incubator/declarative-linking/src/test/java/module-info.java
similarity index 75%
rename from incubator/declarative-linking/src/test/java/module-info.txt
rename to incubator/declarative-linking/src/test/java/module-info.java
index aee82c7..c3eb32e 100644
--- a/incubator/declarative-linking/src/test/java/module-info.txt
+++ b/incubator/declarative-linking/src/test/java/module-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -15,17 +15,25 @@
  */
 
 open module org.glassfish.jersey.incubator.declarative.linking {
-    requires junit;
+    requires jakarta.el;
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+
+    requires jakarta.xml.bind;
 
     requires java.logging;
     requires java.desktop;
 
-    requires jakarta.xml.bind;
-
-    requires com.fasterxml.jackson.databind;
-
     requires org.glassfish.jersey.core.client;
     requires org.glassfish.jersey.core.common;
     requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.tests.framework.core;
+
+    exports org.glassfish.jersey.linking;
+
+    requires org.json;
+    requires com.fasterxml.jackson.databind;
+    requires org.junit.jupiter.api;
     requires jsonassert;
+
 }
\ No newline at end of file
diff --git a/incubator/gae-integration/pom.xml b/incubator/gae-integration/pom.xml
index da67308..f800ca7 100644
--- a/incubator/gae-integration/pom.xml
+++ b/incubator/gae-integration/pom.xml
@@ -74,6 +74,16 @@
                     </execution>
                 </executions>
             </plugin>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <inherited>true</inherited>
+                <configuration>
+                    <instructions>
+                        <Automatic-Module-Name>org.glassfish.jersey.incubator.gae.integration</Automatic-Module-Name>
+                    </instructions>
+                </configuration>
+            </plugin>
         </plugins>
     </build>
 </project>
diff --git a/incubator/gae-integration/src/main/java/module-info.java b/incubator/gae-integration/src/main/java/module-info.java.txt
similarity index 92%
rename from incubator/gae-integration/src/main/java/module-info.java
rename to incubator/gae-integration/src/main/java/module-info.java.txt
index 761af57..eb398d8 100644
--- a/incubator/gae-integration/src/main/java/module-info.java
+++ b/incubator/gae-integration/src/main/java/module-info.java.txt
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022, 2023 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
diff --git a/incubator/html-json/pom.xml b/incubator/html-json/pom.xml
index 4c0dbe1..6f10e85 100644
--- a/incubator/html-json/pom.xml
+++ b/incubator/html-json/pom.xml
@@ -156,6 +156,16 @@
                     </execution>
                 </executions>
             </plugin>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <inherited>true</inherited>
+                <configuration>
+                    <instructions>
+                        <Automatic-Module-Name>org.glassfish.jersey.incubator.html.json</Automatic-Module-Name>
+                    </instructions>
+                </configuration>
+            </plugin>
         </plugins>
     </build>
 </project>
diff --git a/incubator/injectless-client/src/main/java/module-info.java b/incubator/injectless-client/src/main/java/module-info.java
index aa30805..91e0582 100644
--- a/incubator/injectless-client/src/main/java/module-info.java
+++ b/incubator/injectless-client/src/main/java/module-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2024 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2024, 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,6 +24,7 @@
     requires org.glassfish.jersey.core.client;
 
     exports org.glassfish.jersey.inject.injectless;
+    opens org.glassfish.jersey.inject.injectless;
 
     provides org.glassfish.jersey.internal.inject.InjectionManagerFactory
             with org.glassfish.jersey.inject.injectless.NonInjectionManagerFactory;
diff --git a/incubator/open-tracing/src/main/java/module-info.java b/incubator/open-tracing/src/main/java/module-info.java
index aa82948..98696d7 100644
--- a/incubator/open-tracing/src/main/java/module-info.java
+++ b/incubator/open-tracing/src/main/java/module-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022, 2023 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -26,4 +26,5 @@
     requires org.glassfish.jersey.core.server;
 
     exports org.glassfish.jersey.opentracing;
+    opens org.glassfish.jersey.opentracing;
 }
\ No newline at end of file
diff --git a/inject/cdi2-se/src/main/java/module-info.java b/inject/cdi2-se/src/main/java/module-info.java
index 1352b45..23918e3 100644
--- a/inject/cdi2-se/src/main/java/module-info.java
+++ b/inject/cdi2-se/src/main/java/module-info.java
@@ -36,6 +36,8 @@
     exports org.glassfish.jersey.inject.cdi.se.bean;
 
     opens org.glassfish.jersey.inject.cdi.se;
+    opens org.glassfish.jersey.inject.cdi.se.injector;
+    opens org.glassfish.jersey.inject.cdi.se.bean;
 
     provides org.glassfish.jersey.internal.inject.InjectionManagerFactory with
             org.glassfish.jersey.inject.cdi.se.CdiSeInjectionManagerFactory;
diff --git a/inject/cdi2-se/src/main/java/org/glassfish/jersey/inject/cdi/se/injector/JerseyInjectionTarget.java b/inject/cdi2-se/src/main/java/org/glassfish/jersey/inject/cdi/se/injector/JerseyInjectionTarget.java
index 8073f4c..79d48d2 100644
--- a/inject/cdi2-se/src/main/java/org/glassfish/jersey/inject/cdi/se/injector/JerseyInjectionTarget.java
+++ b/inject/cdi2-se/src/main/java/org/glassfish/jersey/inject/cdi/se/injector/JerseyInjectionTarget.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,7 +19,9 @@
 import java.lang.reflect.Modifier;
 import java.util.Collection;
 import java.util.List;
+import java.util.logging.Logger;
 
+import jakarta.enterprise.inject.spi.DeploymentException;
 import jakarta.ws.rs.WebApplicationException;
 
 import jakarta.enterprise.context.spi.CreationalContext;
@@ -29,6 +31,7 @@
 import jakarta.enterprise.inject.spi.InjectionTarget;
 import jakarta.enterprise.inject.spi.Interceptor;
 
+import org.glassfish.jersey.inject.cdi.se.LocalizationMessages;
 import org.glassfish.jersey.inject.cdi.se.bean.BeanHelper;
 import org.glassfish.jersey.internal.inject.InjectionResolver;
 import org.glassfish.jersey.internal.util.collection.LazyValue;
@@ -51,22 +54,23 @@
 import org.jboss.weld.injection.producer.SubclassDecoratorApplyingInstantiator;
 import org.jboss.weld.injection.producer.SubclassedComponentInstantiator;
 import org.jboss.weld.interceptor.spi.model.InterceptionModel;
-import org.jboss.weld.logging.BeanLogger;
 import org.jboss.weld.resources.ClassTransformer;
 import org.jboss.weld.util.reflection.Formats;
 
 /**
  * Wrapper for {@link InjectionTarget} that implements the functionality of injecting using JAX-RS annotations into provided
- * instances. {@code Delegate} is a original {@code InjectionTarget} which is able to inject other fields/parameters which
+ * instances. {@code Delegate} is an original {@code InjectionTarget} which is able to inject other fields/parameters which
  * are managed by CDI.
  * <p>
- * Implementation is also able create with custom {@code jerseyConstructor} if it is provided. This functionality allows override
+ * Implementation is also able to create with custom {@code jerseyConstructor} if it is provided. This functionality allows override
  * default instantiator and use the Jersey-specific one.
  *
  * @author Petr Bouda
  */
 public class JerseyInjectionTarget<T> extends BasicInjectionTarget<T> {
 
+    private static final Logger LOGGER = Logger.getLogger(JerseyInjectionTarget.class.getName());
+
     private final Bean<T> bean;
     private final Class<T> clazz;
     private final LazyValue<JerseyInstanceInjector<T>> injector;
@@ -220,16 +224,16 @@
         }
         EnhancedAnnotatedConstructor<T> constructor = type.getNoArgsEnhancedConstructor();
         if (constructor == null) {
-            throw BeanLogger.LOG.decoratedHasNoNoargsConstructor(this);
+            throw deploymentException(LocalizationMessages.IT_DECORATED_HAS_NO_NOARGS_CONSTRUCTOR(type));
         } else if (constructor.isPrivate()) {
-            throw BeanLogger.LOG
-                    .decoratedNoargsConstructorIsPrivate(this, Formats.formatAsStackTraceElement(constructor.getJavaMember()));
+            String stackTraceElement = Formats.formatAsStackTraceElement(constructor.getJavaMember());
+            throw deploymentException(LocalizationMessages.IT_DECORATED_NOARGS_CONSTRUCTOR_PRIVATE(type, stackTraceElement));
         }
     }
 
     private void checkDecoratedMethods(EnhancedAnnotatedType<T> type, List<Decorator<?>> decorators) {
         if (type.isFinal()) {
-            throw BeanLogger.LOG.finalBeanClassWithDecoratorsNotAllowed(this);
+            throw deploymentException(LocalizationMessages.IT_FINAL_BEAN_CLASS_WITH_DECORATORS_NOT_ALLOWED(type));
         }
         checkNoArgsConstructor(type);
         for (Decorator<?> decorator : decorators) {
@@ -241,13 +245,13 @@
             } else if (decorator instanceof CustomDecoratorWrapper<?>) {
                 decoratorClass = ((CustomDecoratorWrapper<?>) decorator).getEnhancedAnnotated();
             } else {
-                throw BeanLogger.LOG.nonContainerDecorator(decorator);
+                throw illegalStateException(LocalizationMessages.IT_NON_CONTAINER_DECORATOR(decorator));
             }
 
             for (EnhancedAnnotatedMethod<?, ?> decoratorMethod : decoratorClass.getEnhancedMethods()) {
                 EnhancedAnnotatedMethod<?, ?> method = type.getEnhancedMethod(decoratorMethod.getSignature());
                 if (method != null && !method.isStatic() && !method.isPrivate() && method.isFinal()) {
-                    throw BeanLogger.LOG.finalBeanClassWithInterceptorsNotAllowed(this);
+                    throw deploymentException(LocalizationMessages.IT_FINAL_BEAN_CLASS_WITH_INTERCEPTORS_NOT_ALLOWED(type));
                 }
             }
         }
@@ -280,6 +284,21 @@
         return !isInterceptor() && !isDecorator() && !Modifier.isAbstract(getType().getJavaClass().getModifiers());
     }
 
+    private static IllegalStateException illegalStateException(String message) {
+        LOGGER.warning(message);
+        return new IllegalStateException(message);
+    }
+
+    private static DeploymentException deploymentException(String message) {
+        LOGGER.warning(message);
+        return new DeploymentException(message);
+    }
+
+    private static InjectionException injectionException(String message, Throwable cause) {
+        LOGGER.warning(message);
+        return new InjectionException(message, cause);
+    }
+
     @Override
     public Bean<T> getBean() {
         return this.bean;
diff --git a/inject/cdi2-se/src/main/resources/org/glassfish/jersey/inject/cdi/se/localization.properties b/inject/cdi2-se/src/main/resources/org/glassfish/jersey/inject/cdi/se/localization.properties
index 2422697..5078c31 100644
--- a/inject/cdi2-se/src/main/resources/org/glassfish/jersey/inject/cdi/se/localization.properties
+++ b/inject/cdi2-se/src/main/resources/org/glassfish/jersey/inject/cdi/se/localization.properties
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2017, 2025 Oracle and/or its affiliates. All rights reserved.
 #
 # This program and the accompanying materials are made available under the
 # terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,3 +16,11 @@
 
 # {0} - full classname
 cdi2.provider.not.registrable=Provider registered to CdiInjectionManager cannot be process because of incompatible type: {0}.
+it.processing.annotation.exception=Exception occurred during Jersey/JAX-RS annotations processing in the class: {0}.
+it.unexpected.instantiator=Unexpected instantiator {0}.
+it.decorated.has.no.noargs.constructor=Bean class which has decorators must have a public constructor without parameters: {0}
+it.decorated.noargs.constructor.private=Constructor without parameters cannot be private in bean class which has decorators: {0} at {1} StackTrace.
+it.final.bean.class.with.decorators.not.allowed=Bean class which has decorators cannot be declared final:  {0}.
+it.non.container.decorator=Cannot operate on non container provided decorator {0}.
+it.final.bean.class.with.interceptors.not.allowed=Bean class which has interceptors cannot be declared final:  {0}.
+
diff --git a/inject/hk2/src/main/java/org/glassfish/jersey/inject/hk2/AbstractBinder.java b/inject/hk2/src/main/java/org/glassfish/jersey/inject/hk2/AbstractBinder.java
index ff0fa27..02c2de5 100644
--- a/inject/hk2/src/main/java/org/glassfish/jersey/inject/hk2/AbstractBinder.java
+++ b/inject/hk2/src/main/java/org/glassfish/jersey/inject/hk2/AbstractBinder.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2024 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2024, 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,8 +16,18 @@
 
 package org.glassfish.jersey.inject.hk2;
 
+import jakarta.inject.Provider;
+import jakarta.ws.rs.core.GenericType;
 import org.glassfish.jersey.innate.inject.BlindBinder;
 import org.glassfish.jersey.internal.inject.Binder;
+import org.glassfish.jersey.internal.inject.Binding;
+import org.glassfish.jersey.internal.inject.InjectionManager;
+import org.glassfish.jersey.internal.inject.InjectionResolver;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+import java.util.Collection;
+import java.util.function.Supplier;
 
 /**
  * Implementation of {@link Binder} interface dedicated to keep some level of code compatibility between previous HK2
@@ -25,6 +35,174 @@
  * <p>
  * Currently, there are supported only bind method and more complicated method where HK2 interfaces are required were omitted.
  */
-public abstract class AbstractBinder extends BlindBinder {
+public abstract class AbstractBinder implements Binder {
+    private class XBinder extends BlindBinder {
+        protected <T> Provider<T> createManagedInstanceProvider(Class<T> clazz) {
+            return super.createManagedInstanceProvider(clazz);
+        }
+        protected void configure() {
+            AbstractBinder.this.configure();
+        }
+    }
+    private XBinder binder = new XBinder();
+
+    /**
+     * Implement to provide binding definitions using the exposed binding methods.
+     */
+    protected abstract void configure();
+
+    /**
+     * Creates a new instance of {@link Provider} which is able to retrieve a managed instance registered in
+     * {@link InjectionManager}. If {@code InjectionManager} is {@code null} at the time of calling {@link Provider#get()} then
+     * {@link IllegalStateException} is thrown.
+     *
+     * @param clazz class of managed instance.
+     * @param <T>   type of the managed instance returned using provider.
+     * @return provider with instance of managed instance.
+     */
+    protected final <T> Provider<T> createManagedInstanceProvider(Class<T> clazz) {
+        return binder.createManagedInstanceProvider(clazz);
+    }
+
+    /**
+     * Start building a new class-based service binding.
+     * <p>
+     * Does NOT bind the service type itself as a contract type.
+     *
+     * @param <T>         service type.
+     * @param serviceType service class.
+     * @return initialized binding builder.
+     */
+    public <T> Binding<T, ?> bind(Class<T> serviceType) {
+        return binder.bind(serviceType);
+    }
+
+    /**
+     * Binds the provided binding and return the same instance.
+     *
+     * @param binding binding.
+     * @return the same provided binding.
+     */
+    public Binding bind(Binding binding) {
+        return binder.bind(binding);
+    }
+
+    /**
+     * Start building a new class-based service binding.
+     * <p>
+     * Binds the service type itself as a contract type.
+     *
+     * @param <T>         service type.
+     * @param serviceType service class.
+     * @return initialized binding builder.
+     */
+    public <T> Binding<T, ?> bindAsContract(Class<T> serviceType) {
+        return binder.bindAsContract(serviceType);
+    }
+
+    /**
+     * Start building a new generic type-based service binding.
+     * <p>
+     * Binds the generic service type itself as a contract type.
+     *
+     * @param <T>         service type.
+     * @param serviceType generic service type information.
+     * @return initialized binding builder.
+     */
+    public <T> Binding<T, ?> bindAsContract(GenericType<T> serviceType) {
+        return binder.bindAsContract(serviceType);
+    }
+
+    /**
+     * Start building a new generic type-based service binding.
+     * <p>
+     * Binds the generic service type itself as a contract type.
+     *
+     * @param serviceType generic service type information.
+     * @return initialized binding builder.
+     */
+    public Binding<Object, ?> bindAsContract(Type serviceType) {
+        return binder.bindAsContract(serviceType);
+    }
+
+    /**
+     * Start building a new instance-based service binding. The binding is naturally
+     * considered to be a {@link jakarta.inject.Singleton singleton-scoped}.
+     * <p>
+     * Does NOT bind the service type itself as a contract type.
+     *
+     * @param <T>     service type.
+     * @param service service instance.
+     * @return initialized binding builder.
+     */
+    public <T> Binding<T, ?> bind(T service) {
+        return binder.bind(service);
+    }
+
+    /**
+     * Start building a new supplier class-based service binding.
+     *
+     * @param <T>           service type.
+     * @param supplierType  service supplier class.
+     * @param supplierScope factory scope.
+     * @return initialized binding builder.
+     */
+    public <T> Binding<Supplier<T>, ?> bindFactory(
+            Class<? extends Supplier<T>> supplierType, Class<? extends Annotation> supplierScope) {
+        return binder.bindFactory(supplierType, supplierScope);
+    }
+
+    /**
+     * Start building a new supplier class-based service binding.
+     * <p>
+     * The supplier itself is bound in a per-lookup scope.
+     *
+     * @param <T>          service type.
+     * @param supplierType service supplier class.
+     * @return initialized binding builder.
+     */
+    public <T> Binding<Supplier<T>, ?> bindFactory(Class<? extends Supplier<T>> supplierType) {
+        return binder.bindFactory(supplierType);
+    }
+
+    /**
+     * Start building a new supplier instance-based service binding.
+     *
+     * @param <T>     service type.
+     * @param factory service instance.
+     * @return initialized binding builder.
+     */
+    public <T> Binding<Supplier<T>, ?> bindFactory(Supplier<T> factory) {
+        return binder.bindFactory(factory);
+    }
+
+    /**
+     * Start building a new injection resolver binding. The injection resolver is naturally
+     * considered to be a {@link jakarta.inject.Singleton singleton-scoped}.
+     * <p>
+     * There is no need to provide any additional information. Other method on {@link Binding}
+     * will be ignored.
+     *
+     * @param <T>      type of the injection resolver.
+     * @param resolver injection resolver instance.
+     * @return initialized binding builder.
+     */
+    public <T extends InjectionResolver> Binding<T, ?> bind(T resolver) {
+        return binder.bind(resolver);
+    }
+
+    /**
+     * Adds all binding definitions from the binders to the binding configuration.
+     *
+     * @param binders binders whose binding definitions should be configured.
+     */
+    public final void install(Binder... binders) {
+        binder.install(binders);
+    }
+
+    @Override
+    public Collection<Binding> getBindings() {
+        return binder.getBindings();
+    }
 
 }
diff --git a/media/jaxb/src/main/java/module-info.java b/media/jaxb/src/main/java/module-info.java
index 9589c4c..2f614ad 100644
--- a/media/jaxb/src/main/java/module-info.java
+++ b/media/jaxb/src/main/java/module-info.java
@@ -24,15 +24,11 @@
     requires org.glassfish.jersey.core.common;
 
     exports org.glassfish.jersey.jaxb;
-    exports org.glassfish.jersey.jaxb.internal to
-            org.glassfish.hk2.locator,
-            org.glassfish.hk2.utilities,
-            org.glassfish.jersey.media.json.jettison;
+    exports org.glassfish.jersey.jaxb.internal;
     exports org.glassfish.jersey.jaxb.internal.l10n;
 
-    opens org.glassfish.jersey.jaxb.internal to
-            org.glassfish.hk2.locator,
-            org.glassfish.hk2.utilities;
+    opens org.glassfish.jersey.jaxb;
+    opens org.glassfish.jersey.jaxb.internal;
     opens org.glassfish.jersey.jaxb.internal.l10n;
 
     provides org.glassfish.jersey.internal.spi.ForcedAutoDiscoverable
diff --git a/media/json-binding/src/main/java/module-info.java b/media/json-binding/src/main/java/module-info.java
index 3604b07..ca53be1 100644
--- a/media/json-binding/src/main/java/module-info.java
+++ b/media/json-binding/src/main/java/module-info.java
@@ -27,7 +27,9 @@
     requires org.glassfish.jersey.core.common;
 
     exports org.glassfish.jersey.jsonb;
+    exports org.glassfish.jersey.jsonb.internal;
     opens org.glassfish.jersey.jsonb;
+    opens org.glassfish.jersey.jsonb.internal;
 
     provides org.glassfish.jersey.internal.spi.ForcedAutoDiscoverable with
             org.glassfish.jersey.jsonb.internal.JsonBindingAutoDiscoverable;
diff --git a/media/json-jackson/src/main/java/module-info.txt b/media/json-gson/src/main/java/module-info.java
similarity index 60%
rename from media/json-jackson/src/main/java/module-info.txt
rename to media/json-gson/src/main/java/module-info.java
index bb32929..ac7f400 100644
--- a/media/json-jackson/src/main/java/module-info.txt
+++ b/media/json-gson/src/main/java/module-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -14,20 +14,18 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-module org.glassfish.jersey.media.json.jackson {
+module org.glassfish.jersey.media.json.gson {
+    requires com.google.gson;
     requires jakarta.annotation;
     requires jakarta.inject;
     requires jakarta.ws.rs;
-
-    requires com.fasterxml.jackson.core;
-    requires com.fasterxml.jackson.annotation;
-    requires com.fasterxml.jackson.databind;
-    requires com.fasterxml.jackson.module.jaxb;
-    requires com.fasterxml.jackson.module.jakarta.xmlbind;
-
     requires org.glassfish.jersey.core.common;
-    requires org.glassfish.jersey.core.server;
-    requires org.glassfish.jersey.ext.entity.filtering;
 
-    exports org.glassfish.jersey.jackson;
+    exports org.glassfish.jersey.gson;
+    exports org.glassfish.jersey.gson.internal;
+    opens org.glassfish.jersey.gson;
+    opens org.glassfish.jersey.gson.internal;
+
+    provides org.glassfish.jersey.internal.spi.ForcedAutoDiscoverable with
+            org.glassfish.jersey.gson.internal.JsonGsonAutoDiscoverable;
 }
\ No newline at end of file
diff --git a/media/json-jackson/pom.xml b/media/json-jackson/pom.xml
index 0fdeb2d..752954d 100644
--- a/media/json-jackson/pom.xml
+++ b/media/json-jackson/pom.xml
@@ -57,6 +57,16 @@
         </license>
     </licenses>
 
+    <properties>
+        <surefire.security.argline>
+            --add-reads org.glassfish.jersey.media.json.jackson=org.glassfish.jersey.core.server
+            --add-reads org.glassfish.jersey.media.json.jackson=org.glassfish.jersey.core.client
+            --add-exports org.glassfish.jersey.media.json.jackson/org.glassfish.jersey.jackson.internal.model=org.glassfish.jersey.core.server
+            --add-opens org.glassfish.jersey.media.json.jackson/org.glassfish.jersey.jackson.internal.model=org.glassfish.hk2.locator
+            --add-opens org.glassfish.jersey.media.json.jackson/org.glassfish.jersey.jackson.internal.model=com.fasterxml.jackson.databind
+        </surefire.security.argline>
+    </properties>
+
     <build>
         <plugins>
             <plugin>
diff --git a/media/json-jackson/src/main/java/module-info.java b/media/json-jackson/src/main/java/module-info.java
new file mode 100644
index 0000000..a513cbd
--- /dev/null
+++ b/media/json-jackson/src/main/java/module-info.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2022, 2025 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+module org.glassfish.jersey.media.json.jackson {
+    requires jakarta.annotation;
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+    requires java.logging;
+
+    requires com.fasterxml.jackson.core;
+    requires com.fasterxml.jackson.annotation;
+    requires com.fasterxml.jackson.databind;
+    requires static com.fasterxml.jackson.module.jaxb;
+    requires static com.fasterxml.jackson.module.jakarta.xmlbind;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.ext.entity.filtering;
+
+    exports org.glassfish.jersey.jackson;
+    exports org.glassfish.jersey.jackson.internal;
+    exports org.glassfish.jersey.jackson.internal.jackson.jaxrs.annotation;
+    exports org.glassfish.jersey.jackson.internal.jackson.jaxrs.base;
+    exports org.glassfish.jersey.jackson.internal.jackson.jaxrs.cfg;
+    exports org.glassfish.jersey.jackson.internal.jackson.jaxrs.json;
+    exports org.glassfish.jersey.jackson.internal.jackson.jaxrs.json.annotation;
+    exports org.glassfish.jersey.jackson.internal.jackson.jaxrs.util;
+
+    opens org.glassfish.jersey.jackson;
+    opens org.glassfish.jersey.jackson.internal;
+    opens org.glassfish.jersey.jackson.internal.jackson.jaxrs.annotation;
+    opens org.glassfish.jersey.jackson.internal.jackson.jaxrs.base;
+    opens org.glassfish.jersey.jackson.internal.jackson.jaxrs.cfg;
+    opens org.glassfish.jersey.jackson.internal.jackson.jaxrs.json;
+    opens org.glassfish.jersey.jackson.internal.jackson.jaxrs.json.annotation;
+    opens org.glassfish.jersey.jackson.internal.jackson.jaxrs.util;
+
+    provides org.glassfish.jersey.internal.spi.AutoDiscoverable with
+            org.glassfish.jersey.jackson.internal.JacksonAutoDiscoverable;
+
+}
\ No newline at end of file
diff --git a/media/json-jettison/src/main/java/module-info.java b/media/json-jettison/src/main/java/module-info.java
index 78882b5..671ce68 100644
--- a/media/json-jettison/src/main/java/module-info.java
+++ b/media/json-jettison/src/main/java/module-info.java
@@ -28,7 +28,12 @@
     requires org.glassfish.jersey.media.jaxb;
 
     exports org.glassfish.jersey.jettison;
+    exports org.glassfish.jersey.jettison.internal;
+    exports org.glassfish.jersey.jettison.internal.entity;
     exports org.glassfish.jersey.jettison.internal.l10n;
 
+    opens org.glassfish.jersey.jettison;
+    opens org.glassfish.jersey.jettison.internal;
+    opens org.glassfish.jersey.jettison.internal.entity;
     opens org.glassfish.jersey.jettison.internal.l10n;
 }
\ No newline at end of file
diff --git a/media/json-processing/src/main/java/module-info.java b/media/json-processing/src/main/java/module-info.java
index 9077b05..40a9958 100644
--- a/media/json-processing/src/main/java/module-info.java
+++ b/media/json-processing/src/main/java/module-info.java
@@ -29,7 +29,12 @@
 
     opens org.glassfish.jersey.jsonp.internal to
             org.glassfish.hk2.locator,
-            org.glassfish.hk2.utilities;
+            org.glassfish.hk2.utilities,
+            org.glassfish.jersey.core.client,  // NonInjectionManager
+            org.glassfish.jersey.incubator.cdi.inject.weld,
+            org.glassfish.jersey.inject.cdi2.se,
+            weld.core.impl;
+
 
     provides org.glassfish.jersey.internal.spi.ForcedAutoDiscoverable with
             org.glassfish.jersey.jsonp.internal.JsonProcessingAutoDiscoverable;
diff --git a/media/moxy/src/main/java/module-info.java b/media/moxy/src/main/java/module-info.java
index 2119453..2fc7daa 100644
--- a/media/moxy/src/main/java/module-info.java
+++ b/media/moxy/src/main/java/module-info.java
@@ -29,12 +29,20 @@
     requires org.eclipse.persistence.core;
     requires org.eclipse.persistence.moxy;
 
-    exports org.glassfish.jersey.moxy.xml;
+    exports org.glassfish.jersey.moxy.internal;
     exports org.glassfish.jersey.moxy.json;
+    exports org.glassfish.jersey.moxy.xml;
 
+    opens org.glassfish.jersey.moxy.internal;
+    opens org.glassfish.jersey.moxy.json;
     opens org.glassfish.jersey.moxy.json.internal to
             org.glassfish.hk2.locator,
-            org.glassfish.hk2.utilities;
+            org.glassfish.hk2.utilities,
+            org.glassfish.jersey.core.client,
+            org.glassfish.jersey.incubator.cdi.inject.weld,
+            org.glassfish.jersey.inject.cdi2.se,
+            weld.core.impl;
+    opens org.glassfish.jersey.moxy.xml;
 
     provides org.glassfish.jersey.internal.spi.AutoDiscoverable with
             org.glassfish.jersey.moxy.json.internal.MoxyJsonAutoDiscoverable;
diff --git a/media/multipart/pom.xml b/media/multipart/pom.xml
index 719eac3..0451347 100644
--- a/media/multipart/pom.xml
+++ b/media/multipart/pom.xml
@@ -36,12 +36,8 @@
 
     <properties>
         <surefire.coverage.argline>
-            --add-exports org.glassfish.jersey.core.common/org.glassfish.jersey.innate=ALL-UNNAMED
-            --add-exports org.glassfish.jersey.core.common/org.glassfish.jersey.innate.inject=ALL-UNNAMED
-            --add-exports org.glassfish.jersey.core.common/org.glassfish.jersey.innate.virtual=ALL-UNNAMED
             --add-exports org.glassfish.jersey.core.common/org.glassfish.jersey.innate.io=ALL-UNNAMED
             --add-exports org.glassfish.jersey.core.client/org.glassfish.jersey.client.innate=ALL-UNNAMED
-            --add-modules=ALL-MODULE-PATH
             --add-reads org.glassfish.jersey.media.multipart=jakarta.json
         </surefire.coverage.argline>
     </properties>
diff --git a/media/multipart/src/main/java/module-info.java b/media/multipart/src/main/java/module-info.java
index 3cc54b9..755dbdf 100644
--- a/media/multipart/src/main/java/module-info.java
+++ b/media/multipart/src/main/java/module-info.java
@@ -28,19 +28,25 @@
     requires org.glassfish.jersey.core.common;
 
     exports org.glassfish.jersey.media.multipart;
-    exports org.glassfish.jersey.media.multipart.internal to
-            org.glassfish.hk2.locator,
-            org.glassfish.hk2.utilities,
-            org.glassfish.jersey.core.server,
-            org.glassfish.jersey.core.client;
+    exports org.glassfish.jersey.media.multipart.file;
+    exports org.glassfish.jersey.media.multipart.internal;
+//            org.glassfish.hk2.locator,
+//            org.glassfish.hk2.utilities,
+//            org.glassfish.jersey.core.server,
+//            org.glassfish.jersey.core.client;
     exports org.glassfish.jersey.media.multipart.internal.l10n;
 
     opens org.glassfish.jersey.media.multipart;
-    opens org.glassfish.jersey.media.multipart.internal to
-            org.glassfish.hk2.locator,
-            org.glassfish.hk2.utilities,
-            org.glassfish.jersey.core.server,
-            org.glassfish.jersey.core.client;
+    opens org.glassfish.jersey.media.multipart.file;
+    opens org.glassfish.jersey.media.multipart.internal;
+//            org.glassfish.hk2.locator,
+//            org.glassfish.hk2.utilities,
+//            org.glassfish.jersey.core.server,
+//            org.glassfish.jersey.core.client,
+//            org.glassfish.jersey.incubator.cdi.inject.weld,
+//            org.glassfish.jersey.inject.cdi2.se,
+//            weld.core.impl;
+
     opens org.glassfish.jersey.media.multipart.internal.l10n;
 
     provides org.glassfish.jersey.innate.spi.EntityPartBuilderProvider with
diff --git a/pom.xml b/pom.xml
index a6c6593..5b7a417 100644
--- a/pom.xml
+++ b/pom.xml
@@ -316,9 +316,9 @@
                     <version>${compiler.mvn.plugin.version}</version>
                     <inherited>true</inherited>
                     <configuration>
-                        <source>${java.version}</source>
-                        <target>${java.version}</target>
+                        <release>${java.version}</release>
                         <compilerArguments>
+
                             <!--<Werror />-->
                             <!-- TODO work towards eliminating all warnings in order to be able to enable the -Xlint option -->
                             <!--Xlint/-->
@@ -695,6 +695,7 @@
                     <configuration>
                         <instructions>
                             <_versionpolicy>[$(version;==;$(@)),$(version;+;$(@)))</_versionpolicy>
+                            <_noimportjava>true</_noimportjava>
                             <_nodefaultversion>false</_nodefaultversion>
                             <Include-Resource>{maven-resources},${project.build.directory}/legal</Include-Resource>
                         </instructions>
@@ -879,6 +880,20 @@
                     </execution>
                 </executions>
             </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>${compiler.mvn.plugin.version}</version>
+                <configuration>
+                    <release>${java.version}</release>
+                    <compilerArguments>
+                        <!-- Do not warn about using sun.misc.Unsafe -->
+                        <XDignore.symbol.file />
+                    </compilerArguments>
+                    <showWarnings>false</showWarnings>
+                    <fork>false</fork>
+                </configuration>
+            </plugin>
         </plugins>
         <extensions>
             <extension>
@@ -891,77 +906,6 @@
 
     <profiles>
         <profile>
-            <id>jdk8</id>
-            <activation>
-                <jdk>1.8</jdk>
-            </activation>
-            <properties>
-                <checkstyle.version>9.3</checkstyle.version>
-                <istack.mvn.plugin.version>3.0.9</istack.mvn.plugin.version>
-            </properties>
-            <build>
-                <pluginManagement>
-                    <plugins>
-                        <plugin>
-                            <groupId>org.apache.maven.plugins</groupId>
-                            <artifactId>maven-compiler-plugin</artifactId>
-                            <version>${compiler.mvn.plugin.version}</version>
-                            <inherited>true</inherited>
-                            <configuration>
-                                <excludes>
-                                    <exclude>module-info.java</exclude>
-                                </excludes>
-                            </configuration>
-                        </plugin>
-                    </plugins>
-                </pluginManagement>
-            </build>
-        </profile>
-        <profile>
-            <id>jdk11+</id>
-            <!--
-                JDK 9 & 10 is unsupported (as well as <release>9</release>)
-                module-info for java.xml.bind is taken from JDK (lib/ct.sym/9-modules)
-                and it depends on java.activation which clashes with javax.activation
-            -->
-            <activation>
-                <jdk>[11,)</jdk>
-            </activation>
-            <build>
-                <pluginManagement>
-                    <plugins>
-                        <plugin>
-                            <groupId>org.apache.maven.plugins</groupId>
-                            <artifactId>maven-compiler-plugin</artifactId>
-                            <version>${compiler.mvn.plugin.version}</version>
-                            <inherited>true</inherited>
-                            <executions>
-                                <execution>
-                                    <id>default-compile</id>
-                                    <configuration>
-                                        compile everything to ensure module-info contains right entries
-                                        <release>${java.version}</release>
-                                    </configuration>
-                                </execution>
-                                <execution>
-                                    <id>default-testCompile</id>
-                                    <goals>
-                                        <goal>testCompile</goal>
-                                    </goals>
-                                    <configuration>
-                                        <compilerArgs>
-                                            <arg>--add-exports</arg>
-                                            <arg>org.glassfish.jersey.core.common/org.glassfish.jersey.innate.inject=ALL-UNNAMED</arg>
-                                        </compilerArgs>
-                                    </configuration>
-                                </execution>
-                            </executions>
-                        </plugin>
-                    </plugins>
-                </pluginManagement>
-            </build>
-        </profile>
-        <profile>
             <!-- Use it with release-perform goal to skip another test run. -->
             <id>testsSkip</id>
             <activation>
@@ -2178,13 +2122,6 @@
         <checkstyle.mvn.plugin.version>3.6.0</checkstyle.mvn.plugin.version>
         <checkstyle.version>10.21.4</checkstyle.version>
         <compiler.mvn.plugin.version>3.14.0</compiler.mvn.plugin.version>
-        <!--
-        Special version of the compiler plugin just for the jersey-common. All versions above
-        generate too much for OSGi manifest.mf imports (awt etc). The version 3.11.0 however
-        introduces the fix for the excludeTests issue. Which makes it preferable for the whole project
-        but the jersey-common module which has to have the separate version for OSGi reasons.
-         -->
-        <compiler.common.mvn.plugin.version>3.14.0</compiler.common.mvn.plugin.version>
         <cyclonedx.mvn.plugin.version>2.8.1</cyclonedx.mvn.plugin.version>
         <dependency.mvn.plugin.version>3.8.1</dependency.mvn.plugin.version>
         <deploy.mvn.plugin.version>3.1.4</deploy.mvn.plugin.version>
diff --git a/security/oauth1-client/src/main/java/module-info.java b/security/oauth1-client/src/main/java/module-info.java
index 370e721..20a6724 100644
--- a/security/oauth1-client/src/main/java/module-info.java
+++ b/security/oauth1-client/src/main/java/module-info.java
@@ -27,5 +27,6 @@
     exports org.glassfish.jersey.client.oauth1;
     exports org.glassfish.jersey.client.oauth1.internal;
 
+    opens org.glassfish.jersey.client.oauth1;
     opens org.glassfish.jersey.client.oauth1.internal;
 }
\ No newline at end of file
diff --git a/security/oauth1-server/src/main/java/module-info.java b/security/oauth1-server/src/main/java/module-info.java
index 523410c..22a59e3 100644
--- a/security/oauth1-server/src/main/java/module-info.java
+++ b/security/oauth1-server/src/main/java/module-info.java
@@ -26,12 +26,8 @@
     requires org.glassfish.jersey.security.oauth1.signature;
 
     exports org.glassfish.jersey.server.oauth1;
-    exports org.glassfish.jersey.server.oauth1.internal to
-                org.glassfish.hk2.locator,
-                org.glassfish.hk2.utilities;
+    exports org.glassfish.jersey.server.oauth1.internal;
 
     opens org.glassfish.jersey.server.oauth1;
-    opens org.glassfish.jersey.server.oauth1.internal to
-            org.glassfish.hk2.locator,
-            org.glassfish.hk2.utilities;
+    opens org.glassfish.jersey.server.oauth1.internal;
 }
\ No newline at end of file
diff --git a/security/oauth1-signature/src/main/java/module-info.java b/security/oauth1-signature/src/main/java/module-info.java
index b717f22..a3232d9 100644
--- a/security/oauth1-signature/src/main/java/module-info.java
+++ b/security/oauth1-signature/src/main/java/module-info.java
@@ -25,5 +25,6 @@
     exports org.glassfish.jersey.oauth1.signature;
     exports org.glassfish.jersey.oauth1.signature.internal; // localization
 
+    opens org.glassfish.jersey.oauth1.signature;
     opens org.glassfish.jersey.oauth1.signature.internal;
 }
\ No newline at end of file
diff --git a/security/oauth2-client/src/main/java/module-info.java b/security/oauth2-client/src/main/java/module-info.java
index ffe9a62..672264e 100644
--- a/security/oauth2-client/src/main/java/module-info.java
+++ b/security/oauth2-client/src/main/java/module-info.java
@@ -24,5 +24,6 @@
     exports org.glassfish.jersey.client.oauth2;
     exports org.glassfish.jersey.client.oauth2.internal; // localization
 
+    opens org.glassfish.jersey.client.oauth2;
     opens org.glassfish.jersey.client.oauth2.internal;
 }
\ No newline at end of file
diff --git a/test-framework/providers/external/src/main/java/module-info.java b/test-framework/providers/external/src/main/java/module-info.java
index 3a8a463..f175989 100644
--- a/test-framework/providers/external/src/main/java/module-info.java
+++ b/test-framework/providers/external/src/main/java/module-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -14,7 +14,7 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-module org.glassfish.jersey.tests.framework.provider.external {
+open module org.glassfish.jersey.tests.framework.provider.external {
     requires jakarta.ws.rs;
     requires java.logging;
 
@@ -24,5 +24,4 @@
     requires org.glassfish.jersey.tests.framework.core;
 
     exports org.glassfish.jersey.test.external;
-    opens org.glassfish.jersey.test.external;
 }
\ No newline at end of file
diff --git a/test-framework/providers/grizzly2/src/main/java/module-info.java b/test-framework/providers/grizzly2/src/main/java/module-info.java
index f5dab7a..4dd0ccc 100644
--- a/test-framework/providers/grizzly2/src/main/java/module-info.java
+++ b/test-framework/providers/grizzly2/src/main/java/module-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022, 2023 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -14,7 +14,7 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-module org.glassfish.jersey.tests.framework.provider.grizzly {
+open module org.glassfish.jersey.tests.framework.provider.grizzly {
     requires java.logging;
 
     requires jakarta.servlet;
@@ -31,4 +31,7 @@
     requires org.glassfish.jersey.container.grizzly2.servlet;
 
     exports org.glassfish.jersey.test.grizzly;
+
+    provides org.glassfish.jersey.test.spi.TestContainerFactory with
+            org.glassfish.jersey.test.grizzly.GrizzlyTestContainerFactory;
 }
\ No newline at end of file
diff --git a/test-framework/providers/grizzly2/src/test/java/module-info.java b/test-framework/providers/grizzly2/src/test/java/module-info.java
index b201975..1d5708e 100644
--- a/test-framework/providers/grizzly2/src/test/java/module-info.java
+++ b/test-framework/providers/grizzly2/src/test/java/module-info.java
@@ -14,7 +14,7 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-module org.glassfish.jersey.tests.framework.provider.grizzly {
+open module org.glassfish.jersey.tests.framework.provider.grizzly {
     requires java.logging;
 
     requires jakarta.inject;
@@ -39,9 +39,6 @@
     exports org.glassfish.jersey.test.grizzly.web.context;
     exports org.glassfish.jersey.test.grizzly.web.ssl;
 
-    opens org.glassfish.jersey.test.grizzly.pckg;
-    opens org.glassfish.jersey.test.grizzly.web;
-
     requires org.junit.jupiter.api;
     requires org.junit.jupiter.engine;
     requires org.hamcrest;
diff --git a/test-framework/providers/helidon-http/pom.xml b/test-framework/providers/helidon-http/pom.xml
index 72fc69b..aec77c2 100644
--- a/test-framework/providers/helidon-http/pom.xml
+++ b/test-framework/providers/helidon-http/pom.xml
@@ -45,4 +45,19 @@
         </dependency>
     </dependencies>
 
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <inherited>true</inherited>
+                <configuration>
+                    <instructions>
+                        <Automatic-Module-Name>org.glassfish.jersey.test.framework.provider.helidon</Automatic-Module-Name>
+                    </instructions>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
 </project>
diff --git a/test-framework/providers/inmemory/pom.xml b/test-framework/providers/inmemory/pom.xml
index 6ce326a..08f85ab 100644
--- a/test-framework/providers/inmemory/pom.xml
+++ b/test-framework/providers/inmemory/pom.xml
@@ -48,5 +48,10 @@
             <artifactId>jersey-client</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 </project>
diff --git a/incubator/declarative-linking/src/test/java/module-info.txt b/test-framework/providers/inmemory/src/main/java/module-info.java
similarity index 65%
copy from incubator/declarative-linking/src/test/java/module-info.txt
copy to test-framework/providers/inmemory/src/main/java/module-info.java
index aee82c7..74e8c8a 100644
--- a/incubator/declarative-linking/src/test/java/module-info.txt
+++ b/test-framework/providers/inmemory/src/main/java/module-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -14,18 +14,16 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-open module org.glassfish.jersey.incubator.declarative.linking {
-    requires junit;
-
+open module org.glassfish.jersey.test.framework.provider.inmemory {
+    requires jakarta.ws.rs;
     requires java.logging;
-    requires java.desktop;
-
-    requires jakarta.xml.bind;
-
-    requires com.fasterxml.jackson.databind;
-
     requires org.glassfish.jersey.core.client;
     requires org.glassfish.jersey.core.common;
     requires org.glassfish.jersey.core.server;
-    requires jsonassert;
+    requires org.glassfish.jersey.tests.framework.core;
+
+    exports org.glassfish.jersey.test.inmemory;
+
+    provides org.glassfish.jersey.test.spi.TestContainerFactory with
+            org.glassfish.jersey.test.inmemory.InMemoryTestContainerFactory;
 }
\ No newline at end of file
diff --git a/incubator/declarative-linking/src/test/java/module-info.txt b/test-framework/providers/inmemory/src/test/java/module-info.java
similarity index 65%
copy from incubator/declarative-linking/src/test/java/module-info.txt
copy to test-framework/providers/inmemory/src/test/java/module-info.java
index aee82c7..6842fc7 100644
--- a/incubator/declarative-linking/src/test/java/module-info.txt
+++ b/test-framework/providers/inmemory/src/test/java/module-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -14,18 +14,18 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-open module org.glassfish.jersey.incubator.declarative.linking {
-    requires junit;
-
+open module org.glassfish.jersey.test.framework.provider.inmemory {
     requires java.logging;
-    requires java.desktop;
-
-    requires jakarta.xml.bind;
-
-    requires com.fasterxml.jackson.databind;
-
+    requires jakarta.ws.rs;
     requires org.glassfish.jersey.core.client;
     requires org.glassfish.jersey.core.common;
     requires org.glassfish.jersey.core.server;
-    requires jsonassert;
+    requires org.glassfish.jersey.tests.framework.core;
+
+    requires org.junit.jupiter.api;
+    requires org.junit.jupiter.engine;
+    requires org.hamcrest;
+
+    exports org.glassfish.jersey.test.inmemory;
+    exports org.glassfish.jersey.test.inmemory.internal;
 }
\ No newline at end of file
diff --git a/test-framework/providers/inmemory/src/test/java/org/glassfish/jersey/test/inmemory/internal/FollowRedirectsTest.java b/test-framework/providers/inmemory/src/test/java/org/glassfish/jersey/test/inmemory/internal/FollowRedirectsTest.java
index 98b5e21..938739d 100644
--- a/test-framework/providers/inmemory/src/test/java/org/glassfish/jersey/test/inmemory/internal/FollowRedirectsTest.java
+++ b/test-framework/providers/inmemory/src/test/java/org/glassfish/jersey/test/inmemory/internal/FollowRedirectsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,6 +33,9 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
+import org.glassfish.jersey.test.inmemory.InMemoryTestContainerFactory;
+import org.glassfish.jersey.test.spi.TestContainerException;
+import org.glassfish.jersey.test.spi.TestContainerFactory;
 import org.junit.jupiter.api.Test;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
@@ -70,6 +73,10 @@
         return new ResourceConfig(RedirectResource.class);
     }
 
+    @Override
+    protected TestContainerFactory getTestContainerFactory() throws TestContainerException {
+        return new InMemoryTestContainerFactory();
+    }
 
     private static class RedirectTestFilter implements ClientResponseFilter {
         public static final String RESOLVED_URI_HEADER = "resolved-uri";
diff --git a/test-framework/providers/jdk-http/pom.xml b/test-framework/providers/jdk-http/pom.xml
index 4117370..f90829b 100644
--- a/test-framework/providers/jdk-http/pom.xml
+++ b/test-framework/providers/jdk-http/pom.xml
@@ -53,6 +53,10 @@
             <artifactId>jersey-client</artifactId>
             <version>${project.version}</version>
         </dependency>
-
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 </project>
diff --git a/test-framework/providers/jdk-http/src/main/java/module-info.java b/test-framework/providers/jdk-http/src/main/java/module-info.java
new file mode 100644
index 0000000..7be5f48
--- /dev/null
+++ b/test-framework/providers/jdk-http/src/main/java/module-info.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2025 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+open module org.glassfish.jersey.test.framework.provider.jdk.http {
+    requires jakarta.ws.rs;
+    requires java.logging;
+    requires jdk.httpserver;
+    requires org.glassfish.jersey.container.jdk.http;
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.tests.framework.core;
+
+    exports org.glassfish.jersey.test.jdkhttp;
+
+    provides org.glassfish.jersey.test.spi.TestContainerFactory with
+            org.glassfish.jersey.test.jdkhttp.JdkHttpServerTestContainerFactory;
+}
\ No newline at end of file
diff --git a/incubator/declarative-linking/src/test/java/module-info.txt b/test-framework/providers/jdk-http/src/test/java/module-info.java
similarity index 63%
copy from incubator/declarative-linking/src/test/java/module-info.txt
copy to test-framework/providers/jdk-http/src/test/java/module-info.java
index aee82c7..4d72955 100644
--- a/incubator/declarative-linking/src/test/java/module-info.txt
+++ b/test-framework/providers/jdk-http/src/test/java/module-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -14,18 +14,19 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-open module org.glassfish.jersey.incubator.declarative.linking {
-    requires junit;
-
+open module org.glassfish.jersey.test.framework.provider.jdk.http {
+    requires jakarta.ws.rs;
     requires java.logging;
-    requires java.desktop;
-
-    requires jakarta.xml.bind;
-
-    requires com.fasterxml.jackson.databind;
-
+    requires jdk.httpserver;
+    requires org.glassfish.jersey.container.jdk.http;
     requires org.glassfish.jersey.core.client;
     requires org.glassfish.jersey.core.common;
     requires org.glassfish.jersey.core.server;
-    requires jsonassert;
+    requires org.glassfish.jersey.tests.framework.core;
+
+    requires org.junit.jupiter.api;
+    requires org.junit.jupiter.engine;
+    requires org.hamcrest;
+
+    exports org.glassfish.jersey.test.jdkhttp;
 }
\ No newline at end of file
diff --git a/test-framework/providers/jetty-http2/src/main/java/module-info.java b/test-framework/providers/jetty-http2/src/main/java/module-info.java
index e38362e..b7413ed 100644
--- a/test-framework/providers/jetty-http2/src/main/java/module-info.java
+++ b/test-framework/providers/jetty-http2/src/main/java/module-info.java
@@ -14,7 +14,7 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-module org.glassfish.jersey.tests.framework.provider.jetty.http2 {
+open module org.glassfish.jersey.tests.framework.provider.jetty.http2 {
     requires java.logging;
 
     requires jakarta.servlet;
@@ -28,4 +28,7 @@
     requires org.glassfish.jersey.container.jetty.http2;
 
     exports org.glassfish.jersey.test.jetty.http2;
+
+    provides org.glassfish.jersey.test.spi.TestContainerFactory with
+            org.glassfish.jersey.test.jetty.http2.JettyHttp2TestContainerFactory;
 }
\ No newline at end of file
diff --git a/test-framework/providers/jetty-http2/src/test/java/module-info.java b/test-framework/providers/jetty-http2/src/test/java/module-info.java
index b539bf2..1173ec5 100644
--- a/test-framework/providers/jetty-http2/src/test/java/module-info.java
+++ b/test-framework/providers/jetty-http2/src/test/java/module-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2023 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2023, 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -14,7 +14,7 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-module org.glassfish.jersey.tests.framework.provider.jetty.http2 {
+open module org.glassfish.jersey.tests.framework.provider.jetty.http2 {
     requires java.logging;
 
     requires jakarta.ws.rs;
@@ -31,8 +31,6 @@
 
     exports org.glassfish.jersey.test.jetty.http2;
 
-    opens org.glassfish.jersey.test.jetty.http2;
-
     requires org.junit.jupiter.api;
     requires org.hamcrest;
 }
\ No newline at end of file
diff --git a/test-framework/providers/jetty/src/main/java/module-info.java b/test-framework/providers/jetty/src/main/java/module-info.java
index 693764c..851df2e 100644
--- a/test-framework/providers/jetty/src/main/java/module-info.java
+++ b/test-framework/providers/jetty/src/main/java/module-info.java
@@ -27,4 +27,7 @@
     requires org.glassfish.jersey.container.jetty.http;
 
     exports org.glassfish.jersey.test.jetty;
+
+    provides org.glassfish.jersey.test.spi.TestContainerFactory with
+            org.glassfish.jersey.test.jetty.JettyTestContainerFactory;
 }
\ No newline at end of file
diff --git a/test-framework/providers/jetty/src/test/java/module-info.java b/test-framework/providers/jetty/src/test/java/module-info.java
index 43485ec..98a2b47 100644
--- a/test-framework/providers/jetty/src/test/java/module-info.java
+++ b/test-framework/providers/jetty/src/test/java/module-info.java
@@ -14,7 +14,7 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-module org.glassfish.jersey.tests.framework.provider.jetty {
+open module org.glassfish.jersey.tests.framework.provider.jetty {
     requires java.logging;
 
     requires jakarta.inject;
@@ -32,8 +32,6 @@
 
     exports org.glassfish.jersey.test.jetty;
 
-    opens org.glassfish.jersey.test.jetty;
-
     requires org.junit.jupiter.api;
     requires org.junit.jupiter.engine;
     requires org.junit.platform.engine;
diff --git a/incubator/gae-integration/src/main/java/module-info.java b/test-framework/providers/netty/src/main/java/module-info.java
similarity index 64%
copy from incubator/gae-integration/src/main/java/module-info.java
copy to test-framework/providers/netty/src/main/java/module-info.java
index 761af57..a6d5b26 100644
--- a/incubator/gae-integration/src/main/java/module-info.java
+++ b/test-framework/providers/netty/src/main/java/module-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022, 2023 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -14,13 +14,12 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-module org.glassfish.jersey.incubator.gae.integration {
+open module org.glassfish.jersey.test.framework.provider.netty {
+    requires io.netty.transport;
     requires jakarta.ws.rs;
+    requires org.glassfish.jersey.container.netty.http;
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.tests.framework.core;
 
-//    requires com.google.appengine.api;
-
-    requires org.glassfish.jersey.core.common;
-    requires org.glassfish.jersey.core.server;
-
-    exports org.glassfish.jersey.server.gae;
+    exports org.glassfish.jersey.test.netty;
 }
\ No newline at end of file
diff --git a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/config/ServiceFinderBinderTest.java b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/config/ServiceFinderBinderTest.java
index d7d6775..0df4351 100644
--- a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/config/ServiceFinderBinderTest.java
+++ b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/config/ServiceFinderBinderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2024 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,7 +23,7 @@
 import jakarta.ws.rs.RuntimeType;
 
 import org.glassfish.jersey.inject.hk2.AbstractBinder;
-import org.glassfish.jersey.innate.inject.ServiceFinderBinder;
+import org.glassfish.jersey.internal.ServiceFinderBinder;
 import org.glassfish.jersey.internal.inject.InjectionManager;
 import org.glassfish.jersey.internal.inject.Injections;
 import org.glassfish.jersey.internal.inject.Providers;
diff --git a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/config/TestContract.java b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/config/TestContract.java
index 9ae7342..d484ed0 100644
--- a/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/config/TestContract.java
+++ b/tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/config/TestContract.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2024 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,7 +16,7 @@
 
 package org.glassfish.jersey.tests.e2e.common.config;
 
-import org.glassfish.jersey.innate.inject.ServiceFinderBinder;
+import org.glassfish.jersey.internal.ServiceFinderBinder;
 
 /**
  * Test contract for {@link ServiceFinderBinder} test.
diff --git a/tests/e2e-entity/pom.xml b/tests/e2e-entity/pom.xml
index 53f374b..6c8a328 100644
--- a/tests/e2e-entity/pom.xml
+++ b/tests/e2e-entity/pom.xml
@@ -32,6 +32,16 @@
 
     <description>Jersey E2E Entity tests</description>
 
+    <properties>
+        <surefire.security.argline>
+            --add-reads org.jboss.logging=weld.core.impl
+            --add-reads org.jboss.logging=weld.se.core
+            --add-reads org.jboss.logging=weld.environment.common
+            --add-reads org.jboss.logging=org.hibernate.validator
+            --add-exports org.eclipse.persistence.moxy/org.eclipse.persistence.internal.jaxb.many=ALL-UNNAMED
+        </surefire.security.argline>
+    </properties>
+
     <build>
         <plugins>
             <plugin>
@@ -212,6 +222,23 @@
 
     <profiles>
         <profile>
+            <id>no.module.path</id>
+            <!-- Module org.eclipse.persistence.moxy does not read a module that exports com.sun.tools.xjc' -->
+            <!-- Works fine on JDK 25+ -->
+            <activation><jdk>[17,25)</jdk></activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-surefire-plugin</artifactId>
+                        <configuration>
+                            <useModulePath>false</useModulePath>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        <profile>
             <id>xdk</id>
             <properties>
                 <!-- do not use security manager for xdk -->
diff --git a/incubator/gae-integration/src/main/java/module-info.java b/tests/e2e-entity/src/main/java/module-info.java
similarity index 64%
copy from incubator/gae-integration/src/main/java/module-info.java
copy to tests/e2e-entity/src/main/java/module-info.java
index 761af57..529200f 100644
--- a/incubator/gae-integration/src/main/java/module-info.java
+++ b/tests/e2e-entity/src/main/java/module-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022, 2023 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -14,13 +14,5 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-module org.glassfish.jersey.incubator.gae.integration {
-    requires jakarta.ws.rs;
-
-//    requires com.google.appengine.api;
-
-    requires org.glassfish.jersey.core.common;
-    requires org.glassfish.jersey.core.server;
-
-    exports org.glassfish.jersey.server.gae;
+module org.glassfish.jersey.tests.e2e.entity.main {
 }
\ No newline at end of file
diff --git a/tests/e2e-entity/src/test/java/module-info.java b/tests/e2e-entity/src/test/java/module-info.java
new file mode 100644
index 0000000..8b13988
--- /dev/null
+++ b/tests/e2e-entity/src/test/java/module-info.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2025 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+open module org.glassfish.jersey.tests.e2e.entity.test {
+    requires com.fasterxml.jackson.annotation;
+    requires com.fasterxml.jackson.databind;
+    requires jakarta.activation;
+    requires jakarta.annotation;
+    requires jakarta.inject;
+    requires jakarta.json;
+    requires jakarta.json.bind;
+    requires jakarta.ws.rs;
+    requires jakarta.xml.bind;
+    requires java.desktop;
+    requires java.logging;
+    requires java.xml;
+    requires jettison;
+    requires org.eclipse.persistence.moxy;
+    requires org.glassfish.grizzly;
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.ext.entity.filtering;
+    requires org.glassfish.jersey.grizzly.connector;
+    requires org.glassfish.jersey.media.jaxb;
+    requires org.glassfish.jersey.media.json.jackson;
+    requires org.glassfish.jersey.media.json.jettison;
+    requires org.glassfish.jersey.media.json.processing;
+    requires org.glassfish.jersey.media.jsonb;
+    requires org.glassfish.jersey.media.moxy;
+    requires org.glassfish.jersey.media.multipart;
+    requires org.glassfish.jersey.media.sse;
+    requires org.glassfish.jersey.tests.framework.core;
+    requires org.hamcrest;
+    requires org.junit.jupiter.api;
+    requires org.junit.platform.suite.api;
+
+    exports org.glassfish.jersey.tests.e2e.entity;
+    exports org.glassfish.jersey.tests.e2e.entity.filtering;
+    exports org.glassfish.jersey.tests.e2e.entity.filtering.json;
+    exports org.glassfish.jersey.tests.e2e.entity.filtering.domain;
+    exports org.glassfish.jersey.tests.e2e.header;
+    exports org.glassfish.jersey.tests.e2e.json;
+    exports org.glassfish.jersey.tests.e2e.json.entity;
+    exports org.glassfish.jersey.tests.e2e.json.entity.pojo;
+    exports org.glassfish.jersey.tests.e2e.sse;
+
+}
\ No newline at end of file
diff --git a/tests/e2e-inject/cdi2-se/pom.xml b/tests/e2e-inject/cdi2-se/pom.xml
index 7c2c813..745b684 100644
--- a/tests/e2e-inject/cdi2-se/pom.xml
+++ b/tests/e2e-inject/cdi2-se/pom.xml
@@ -32,6 +32,14 @@
 
     <description>Jersey E2E Inject CDI SE tests</description>
 
+    <properties>
+        <surefire.security.argline>
+            --add-reads org.jboss.logging=weld.core.impl
+            --add-reads org.jboss.logging=weld.se.core
+            --add-reads org.jboss.logging=weld.environment.common
+        </surefire.security.argline>
+    </properties>
+
     <dependencies>
         <dependency>
             <groupId>org.glassfish.jersey.inject</groupId>
diff --git a/tests/e2e-inject/cdi2-se/src/main/java/module-info.java b/tests/e2e-inject/cdi2-se/src/main/java/module-info.java
new file mode 100644
index 0000000..bbb8949
--- /dev/null
+++ b/tests/e2e-inject/cdi2-se/src/main/java/module-info.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2025 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+module org.glassfish.jersey.tests.e2e.inject.cdi2.se.main {
+    requires jakarta.annotation;
+    requires jakarta.cdi;
+    requires jakarta.inject;
+    requires jakarta.interceptor;
+    requires jakarta.ws.rs;
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+    requires weld.core.impl;
+
+    exports org.glassfish.jersey.tests.e2e.inject.cdi.se;
+    exports org.glassfish.jersey.tests.e2e.inject.cdi.se.scopes;
+    exports org.glassfish.jersey.tests.e2e.inject.cdi.se.subresources;
+
+
+    opens org.glassfish.jersey.tests.e2e.inject.cdi.se to
+            org.glassfish.jersey.inject.cdi2.se,
+            weld.core.impl;
+    opens org.glassfish.jersey.tests.e2e.inject.cdi.se.scopes to
+            org.glassfish.jersey.inject.cdi2.se,
+            weld.core.impl;
+    opens org.glassfish.jersey.tests.e2e.inject.cdi.se.subresources to weld.core.impl;
+}
\ No newline at end of file
diff --git a/incubator/declarative-linking/src/main/java/module-info.txt b/tests/e2e-inject/cdi2-se/src/test/java/module-info.java
similarity index 60%
copy from incubator/declarative-linking/src/main/java/module-info.txt
copy to tests/e2e-inject/cdi2-se/src/test/java/module-info.java
index 2835731..ed920e3 100644
--- a/incubator/declarative-linking/src/main/java/module-info.txt
+++ b/tests/e2e-inject/cdi2-se/src/test/java/module-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -14,22 +14,16 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-module org.glassfish.jersey.incubator.declarative.linking {
-    requires jakarta.el;
-    requires jakarta.inject;
+open module org.glassfish.jersey.tests.e2e.inject.cdi2.se.test {
     requires jakarta.ws.rs;
-
-    requires jakarta.xml.bind;
-
     requires java.logging;
-    requires java.desktop;
-
     requires org.glassfish.jersey.core.common;
     requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.tests.framework.core;
+    requires org.junit.jupiter.api;
+    requires org.glassfish.jersey.tests.e2e.inject.cdi2.se.main;
 
-    opens org.glassfish.jersey.linking;
-    exports org.glassfish.jersey.linking;
-
-    exports org.glassfish.jersey.linking.contributing;
-    exports org.glassfish.jersey.linking.mapping;
+    exports org.glassfish.jersey.tests.e2e.inject.cdi.se.test;
+    exports org.glassfish.jersey.tests.e2e.inject.cdi.se.test.subresources;
+    exports org.glassfish.jersey.tests.e2e.inject.cdi.se.test.scopes;
 }
\ No newline at end of file
diff --git a/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/EventsTest.java b/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/test/EventsTest.java
similarity index 90%
rename from tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/EventsTest.java
rename to tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/test/EventsTest.java
index a1d688c..94f10ab 100644
--- a/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/EventsTest.java
+++ b/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/test/EventsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -14,7 +14,7 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.tests.e2e.inject.cdi.se;
+package org.glassfish.jersey.tests.e2e.inject.cdi.se.test;
 
 import jakarta.ws.rs.client.Entity;
 import jakarta.ws.rs.core.Application;
@@ -23,6 +23,7 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
+import org.glassfish.jersey.tests.e2e.inject.cdi.se.AccountResource;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import static org.junit.jupiter.api.Assertions.assertEquals;
diff --git a/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/InterceptorDecoratorTest.java b/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/test/InterceptorDecoratorTest.java
similarity index 86%
rename from tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/InterceptorDecoratorTest.java
rename to tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/test/InterceptorDecoratorTest.java
index dae02fc..2e08b5c 100644
--- a/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/InterceptorDecoratorTest.java
+++ b/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/test/InterceptorDecoratorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -14,7 +14,7 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.tests.e2e.inject.cdi.se;
+package org.glassfish.jersey.tests.e2e.inject.cdi.se.test;
 
 import jakarta.ws.rs.core.Application;
 import jakarta.ws.rs.core.Response;
@@ -22,6 +22,8 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
+import org.glassfish.jersey.tests.e2e.inject.cdi.se.HelloResource;
+import org.glassfish.jersey.tests.e2e.inject.cdi.se.NameService;
 import org.junit.jupiter.api.Test;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
diff --git a/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/RequestContextBuilder.java b/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/test/RequestContextBuilder.java
similarity index 97%
rename from tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/RequestContextBuilder.java
rename to tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/test/RequestContextBuilder.java
index 42a04a3..9045d73 100644
--- a/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/RequestContextBuilder.java
+++ b/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/test/RequestContextBuilder.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -14,7 +14,7 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.tests.e2e.inject.cdi.se;
+package org.glassfish.jersey.tests.e2e.inject.cdi.se.test;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -36,7 +36,6 @@
 import jakarta.ws.rs.core.MultivaluedHashMap;
 import jakarta.ws.rs.core.MultivaluedMap;
 import jakarta.ws.rs.core.SecurityContext;
-import jakarta.ws.rs.ext.RuntimeDelegate;
 import jakarta.ws.rs.ext.WriterInterceptor;
 
 import org.glassfish.jersey.internal.MapPropertiesDelegate;
diff --git a/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/scopes/ScopesTest.java b/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/test/scopes/ScopesTest.java
similarity index 88%
rename from tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/scopes/ScopesTest.java
rename to tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/test/scopes/ScopesTest.java
index baeb657..31314da 100644
--- a/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/scopes/ScopesTest.java
+++ b/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/test/scopes/ScopesTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -14,11 +14,13 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.tests.e2e.inject.cdi.se.scopes;
+package org.glassfish.jersey.tests.e2e.inject.cdi.se.test.scopes;
 
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
+import org.glassfish.jersey.tests.e2e.inject.cdi.se.scopes.RequestScopedResource;
+import org.glassfish.jersey.tests.e2e.inject.cdi.se.scopes.SingletonScopedResource;
 import org.junit.jupiter.api.Test;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotEquals;
diff --git a/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/subresources/ModelProcessorScopeTest.java b/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/test/subresources/ModelProcessorScopeTest.java
similarity index 92%
rename from tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/subresources/ModelProcessorScopeTest.java
rename to tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/test/subresources/ModelProcessorScopeTest.java
index 3545f4c..91d11d9 100644
--- a/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/subresources/ModelProcessorScopeTest.java
+++ b/tests/e2e-inject/cdi2-se/src/test/java/org/glassfish/jersey/tests/e2e/inject/cdi/se/test/subresources/ModelProcessorScopeTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -14,14 +14,17 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.tests.e2e.inject.cdi.se.subresources;
+package org.glassfish.jersey.tests.e2e.inject.cdi.se.test.subresources;
 
 import java.util.concurrent.ExecutionException;
 
 import org.glassfish.jersey.server.ApplicationHandler;
 import org.glassfish.jersey.server.ContainerResponse;
 import org.glassfish.jersey.server.ResourceConfig;
-import org.glassfish.jersey.tests.e2e.inject.cdi.se.RequestContextBuilder;
+import org.glassfish.jersey.tests.e2e.inject.cdi.se.subresources.ModelProcessorFeature;
+import org.glassfish.jersey.tests.e2e.inject.cdi.se.subresources.RootResource;
+import org.glassfish.jersey.tests.e2e.inject.cdi.se.subresources.RootSingletonResource;
+import org.glassfish.jersey.tests.e2e.inject.cdi.se.test.RequestContextBuilder;
 
 import org.junit.jupiter.api.Test;
 import static org.junit.jupiter.api.Assertions.assertEquals;
diff --git a/tests/e2e-server/pom.xml b/tests/e2e-server/pom.xml
index 526e872..962cc38 100644
--- a/tests/e2e-server/pom.xml
+++ b/tests/e2e-server/pom.xml
@@ -32,8 +32,41 @@
 
     <description>Jersey E2E Server tests</description>
 
+    <properties>
+        <surefire.security.argline>
+            --add-reads org.jboss.logging=weld.core.impl
+            --add-reads org.jboss.logging=weld.se.core
+            --add-reads org.jboss.logging=weld.environment.common
+            --add-reads org.jboss.logging=org.hibernate.validator
+        </surefire.security.argline>
+    </properties>
+    
     <build>
         <plugins>
+<!--            <plugin>-->
+<!--                <groupId>org.apache.maven.plugins</groupId>-->
+<!--                <artifactId>maven-compiler-plugin</artifactId>-->
+<!--                <version>${compiler.mvn.plugin.version}</version>-->
+<!--                <inherited>true</inherited>-->
+<!--                <executions>-->
+<!--                    <execution>-->
+<!--                        <id>default-compile</id>-->
+<!--                    </execution>-->
+<!--                    <execution>-->
+<!--                        <id>default-testCompile</id>-->
+<!--                        <goals>-->
+<!--                            <goal>testCompile</goal>-->
+<!--                        </goals>-->
+<!--                        <configuration>-->
+<!--                            <compilerArgs>-->
+<!--                                <arg>&#45;&#45;add-reads</arg>-->
+<!--                                <arg>org.eclipse.persistence.moxy=com.sun.tools.xjc</arg>-->
+<!--                            </compilerArgs>-->
+<!--                            <release>${java.version}</release>-->
+<!--                        </configuration>-->
+<!--                    </execution>-->
+<!--                </executions>-->
+<!--            </plugin>-->
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-surefire-plugin</artifactId>
@@ -41,6 +74,9 @@
                     <forkCount>1</forkCount>
                     <reuseForks>false</reuseForks>
                     <enableAssertions>false</enableAssertions>
+<!--                    <detail>true</detail>-->
+<!--                    <enableOutErrElements>true</enableOutErrElements>-->
+<!--                    <trimStackTrace>false</trimStackTrace>-->
                 </configuration>
                 <executions>
                     <execution>
@@ -231,6 +267,23 @@
 
     <profiles>
         <profile>
+            <id>no.module.path</id>
+            <!-- Module org.eclipse.persistence.moxy does not read a module that exports com.sun.tools.xjc' -->
+            <!-- Works fine on JDK 25+ -->
+            <activation><jdk>[17,25)</jdk></activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-surefire-plugin</artifactId>
+                        <configuration>
+                            <useModulePath>false</useModulePath>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        <profile>
             <id>xdk</id>
             <properties>
                 <!-- do not use security manager for xdk -->
diff --git a/incubator/gae-integration/src/main/java/module-info.java b/tests/e2e-server/src/main/java/module-info.java
similarity index 64%
copy from incubator/gae-integration/src/main/java/module-info.java
copy to tests/e2e-server/src/main/java/module-info.java
index 761af57..951ac09 100644
--- a/incubator/gae-integration/src/main/java/module-info.java
+++ b/tests/e2e-server/src/main/java/module-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022, 2023 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -14,13 +14,5 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-module org.glassfish.jersey.incubator.gae.integration {
-    requires jakarta.ws.rs;
-
-//    requires com.google.appengine.api;
-
-    requires org.glassfish.jersey.core.common;
-    requires org.glassfish.jersey.core.server;
-
-    exports org.glassfish.jersey.server.gae;
+open module org.glassfish.jersey.tests.e2e.server.main {
 }
\ No newline at end of file
diff --git a/tests/e2e-server/src/test/java/module-info.java b/tests/e2e-server/src/test/java/module-info.java
new file mode 100644
index 0000000..fc06a59
--- /dev/null
+++ b/tests/e2e-server/src/test/java/module-info.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2025 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+open module org.glassfish.jersey.tests.e2e.server.test {
+    requires com.fasterxml.jackson.annotation;
+    requires com.google.gson;
+    requires jakarta.annotation;
+    requires jakarta.inject;
+    requires jakarta.servlet;
+    requires jakarta.validation;
+    requires jakarta.ws.rs;
+    requires jakarta.xml.bind;
+    requires java.logging;
+    requires java.management;
+    requires java.xml;
+    requires org.eclipse.jetty.ee10.servlet;
+    requires org.eclipse.jetty.server;
+    requires org.eclipse.persistence.moxy;
+    requires org.glassfish.grizzly.http.server;
+    requires org.glassfish.jersey.apache5.connector;
+    requires org.glassfish.jersey.container.jetty.http;
+    requires org.glassfish.jersey.container.servlet;
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.ext.bean.validation;
+    requires org.glassfish.jersey.ext.mvc;
+    requires org.glassfish.jersey.ext.mvc.bean.validation;
+    requires org.glassfish.jersey.ext.mvc.freemarker;
+    requires org.glassfish.jersey.ext.mvc.mustache;
+    requires org.glassfish.jersey.grizzly.connector;
+    requires org.glassfish.jersey.inject.hk2;
+    requires org.glassfish.jersey.media.json.gson;
+    requires org.glassfish.jersey.media.json.jackson;
+    requires org.glassfish.jersey.media.json.jettison;
+    requires org.glassfish.jersey.media.jsonb;
+    requires org.glassfish.jersey.media.moxy;
+    requires org.glassfish.jersey.media.multipart;
+    requires org.glassfish.jersey.tests.framework.core;
+    requires org.glassfish.jersey.tests.framework.provider.grizzly;
+    requires org.glassfish.jersey.tests.framework.provider.jetty;
+    requires org.hibernate.validator;
+    requires org.junit.jupiter.api;
+    requires org.junit.platform.suite.api;
+    requires org.hamcrest;
+    requires org.xmlunit;
+    requires org.glassfish.grizzly.http;
+    requires org.glassfish.jersey.test.framework.provider.inmemory;
+    requires org.glassfish.jersey.test.framework.provider.jdk.http;
+
+    provides jakarta.ws.rs.ext.MessageBodyReader with
+            org.glassfish.jersey.tests.e2e.server.AbstractDisableMetainfServicesLookupTest.UselessMessageProvider;
+    provides jakarta.ws.rs.ext.MessageBodyWriter with
+            org.glassfish.jersey.tests.e2e.server.AbstractDisableMetainfServicesLookupTest.UselessMessageProvider;
+    provides org.glassfish.jersey.internal.spi.ForcedAutoDiscoverable with
+            org.glassfish.jersey.tests.e2e.server.monitoring.ApplicationInfoTest.ForcedAutoDiscoverableImpl;
+}
\ No newline at end of file
diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/AbstractDisableMetainfServicesLookupTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/AbstractDisableMetainfServicesLookupTest.java
index 7ef5b18..872baeb 100644
--- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/AbstractDisableMetainfServicesLookupTest.java
+++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/AbstractDisableMetainfServicesLookupTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2024 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -44,7 +44,7 @@
 
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.inject.hk2.AbstractBinder;
-import org.glassfish.jersey.innate.inject.ServiceFinderBinder;
+import org.glassfish.jersey.internal.ServiceFinderBinder;
 import org.glassfish.jersey.message.internal.AbstractMessageReaderWriterProvider;
 import org.glassfish.jersey.message.internal.ReaderWriter;
 import org.glassfish.jersey.server.ResourceConfig;
diff --git a/tests/e2e/pom.xml b/tests/e2e/pom.xml
index 2d1b282..c1f25de 100644
--- a/tests/e2e/pom.xml
+++ b/tests/e2e/pom.xml
@@ -32,6 +32,15 @@
 
     <description>Jersey E2E tests</description>
 
+    <properties>
+        <surefire.security.argline>
+            --add-reads org.jboss.logging=weld.core.impl
+            --add-reads org.jboss.logging=weld.se.core
+            --add-reads org.jboss.logging=weld.environment.common
+            --add-reads org.jboss.logging=org.hibernate.validator
+        </surefire.security.argline>
+    </properties>
+
     <build>
         <plugins>
             <plugin>
@@ -197,6 +206,23 @@
 
     <profiles>
         <profile>
+            <id>no.module.path</id>
+            <!-- Module org.eclipse.persistence.moxy does not read a module that exports com.sun.tools.xjc' -->
+            <!-- Works fine on JDK 25+ -->
+            <activation><jdk>[17,25)</jdk></activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-surefire-plugin</artifactId>
+                        <configuration>
+                            <useModulePath>false</useModulePath>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        <profile>
             <id>xdk</id>
             <properties>
                 <!-- do not use security manager for xdk -->
diff --git a/incubator/gae-integration/src/main/java/module-info.java b/tests/e2e/src/main/java/module-info.java
similarity index 64%
copy from incubator/gae-integration/src/main/java/module-info.java
copy to tests/e2e/src/main/java/module-info.java
index 761af57..d70b2cb 100644
--- a/incubator/gae-integration/src/main/java/module-info.java
+++ b/tests/e2e/src/main/java/module-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022, 2023 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -14,13 +14,5 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-module org.glassfish.jersey.incubator.gae.integration {
-    requires jakarta.ws.rs;
-
-//    requires com.google.appengine.api;
-
-    requires org.glassfish.jersey.core.common;
-    requires org.glassfish.jersey.core.server;
-
-    exports org.glassfish.jersey.server.gae;
+module org.glassfish.jersey.tests.e2e {
 }
\ No newline at end of file
diff --git a/tests/e2e/src/test/java/module-info.java b/tests/e2e/src/test/java/module-info.java
new file mode 100644
index 0000000..3f02bea
--- /dev/null
+++ b/tests/e2e/src/test/java/module-info.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2025 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+open module org.glassfish.jersey.tests.e2e {
+    requires jakarta.annotation;
+    requires jakarta.inject;
+    requires jakarta.servlet;
+    requires jakarta.ws.rs;
+    requires jakarta.xml.bind;
+    requires java.logging;
+    requires java.xml;
+    requires jdk.security.auth;
+    requires org.apache.httpcomponents.client5.httpclient5;
+    requires org.apache.httpcomponents.core5.httpcore5;
+    requires org.eclipse.jetty.server;
+    requires org.glassfish.hk2.api;
+    requires org.glassfish.grizzly.http.server;
+    requires org.glassfish.jersey.apache5.connector;
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.grizzly.connector;
+    requires org.glassfish.jersey.inject.hk2;
+    requires org.glassfish.jersey.jdk.connector;
+    requires org.glassfish.jersey.media.moxy;
+    requires org.glassfish.jersey.media.multipart;
+    requires org.glassfish.jersey.security.oauth1.client;
+    requires org.glassfish.jersey.security.oauth1.server;
+    requires org.glassfish.jersey.security.oauth1.signature;
+    requires org.glassfish.jersey.security.oauth2.client;
+    requires org.glassfish.jersey.test.framework.provider.inmemory;
+    requires org.glassfish.jersey.test.framework.provider.jdk.http;
+    requires org.glassfish.jersey.test.framework.provider.netty;
+    requires org.glassfish.jersey.tests.framework.core;
+    requires org.glassfish.jersey.tests.framework.provider.grizzly;
+    requires org.glassfish.jersey.tests.framework.provider.jetty;
+    requires org.hamcrest;
+    requires org.junit.jupiter.api;
+    requires org.junit.jupiter.params;
+    requires org.junit.platform.suite.api;
+
+    exports org.glassfish.jersey.tests.api;
+    exports org.glassfish.jersey.tests.e2e;
+    exports org.glassfish.jersey.tests.e2e.common;
+    exports org.glassfish.jersey.tests.e2e.client.connector;
+    exports org.glassfish.jersey.tests.e2e.container;
+    exports org.glassfish.jersey.tests.e2e.inject;
+    exports org.glassfish.jersey.tests.e2e.oauth;
+    exports org.glassfish.jersey.tests.e2e.sonar;
+    exports org.glassfish.jersey.tests.e2e.server.wadl;
+
+}
\ No newline at end of file
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/Jersey2462Test.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/Jersey2462Test.java
index 22dda62..cb77a50 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/Jersey2462Test.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/container/Jersey2462Test.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2024 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -54,7 +54,8 @@
  */
 @Suite
 @SelectClasses({Jersey2462Test.GrizzlyContainerTest.class,
-        Jersey2462Test.JettyContainerTest.class})
+})
+//        Jersey2462Test.JettyContainerTest.class})
 public class Jersey2462Test {
     private static final String REQUEST_NUMBER = "request-number";
 
@@ -88,7 +89,7 @@
         @Inject
         private Provider<org.glassfish.grizzly.http.server.Request> grizzlyRequest;
         @Inject
-        private org.glassfish.grizzly.http.server.Response grizzlyResponse;
+        private Provider<org.glassfish.grizzly.http.server.Response> grizzlyResponse;
 
         @Override
         public void filter(ContainerRequestContext ctx) throws IOException {
@@ -112,7 +113,7 @@
             if ("/jersey-2462".equals(grizzlyRequest.get().getContextPath())) {
                 flags += 1;
             }
-            if (!grizzlyResponse.isCommitted()) {
+            if (!grizzlyResponse.get().isCommitted()) {
                 flags += 10;
             }
             final String header = grizzlyRequest.get().getHeader(REQUEST_NUMBER);
diff --git a/tests/integration/cdi-integration/cdi-inject-weld-test/pom.xml b/tests/integration/cdi-integration/cdi-inject-weld-test/pom.xml
index 7a8a675..5fd27a8 100644
--- a/tests/integration/cdi-integration/cdi-inject-weld-test/pom.xml
+++ b/tests/integration/cdi-integration/cdi-inject-weld-test/pom.xml
@@ -64,6 +64,11 @@
             <artifactId>weld-se-core</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/tests/integration/cdi-integration/cdi-skipping-analyzer/pom.xml b/tests/integration/cdi-integration/cdi-skipping-analyzer/pom.xml
index 6f1f732..6f2810f 100644
--- a/tests/integration/cdi-integration/cdi-skipping-analyzer/pom.xml
+++ b/tests/integration/cdi-integration/cdi-skipping-analyzer/pom.xml
@@ -66,6 +66,12 @@
             <groupId>org.glassfish.jersey.incubator</groupId>
             <artifactId>jersey-injectless-client</artifactId>
             <version>${jersey.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-engine</artifactId>
+            <scope>test</scope>
         </dependency>
     </dependencies>
 </project>
diff --git a/incubator/gae-integration/src/main/java/module-info.java b/tests/integration/cdi-integration/cdi-skipping-analyzer/src/main/java/module-info.java
similarity index 64%
copy from incubator/gae-integration/src/main/java/module-info.java
copy to tests/integration/cdi-integration/cdi-skipping-analyzer/src/main/java/module-info.java
index 761af57..cf27e65 100644
--- a/incubator/gae-integration/src/main/java/module-info.java
+++ b/tests/integration/cdi-integration/cdi-skipping-analyzer/src/main/java/module-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022, 2023 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -14,13 +14,10 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-module org.glassfish.jersey.incubator.gae.integration {
-    requires jakarta.ws.rs;
+module org.glassfish.jersey.tests.integration.cdi.skipping.analyzer {
+    requires jakarta.cdi;
+    requires jakarta.inject;
 
-//    requires com.google.appengine.api;
-
-    requires org.glassfish.jersey.core.common;
-    requires org.glassfish.jersey.core.server;
-
-    exports org.glassfish.jersey.server.gae;
+    exports org.glassfish.jersey.tests.cdi.skippinganalyzer;
+    opens org.glassfish.jersey.tests.cdi.skippinganalyzer;
 }
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/cdi-skipping-analyzer/src/test/java/module-info.java b/tests/integration/cdi-integration/cdi-skipping-analyzer/src/test/java/module-info.java
new file mode 100644
index 0000000..f7f6eb1
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-skipping-analyzer/src/test/java/module-info.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2025 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+open module org.glassfish.jersey.tests.integration.cdi.skipping.analyzer.test {
+    requires jakarta.cdi;
+    requires org.glassfish.hk2.api;
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.ext.cdi1x;
+    requires org.glassfish.jersey.inject.hk2;
+    requires org.hamcrest;
+    requires org.junit.jupiter.api;
+    requires weld.se.core;
+    requires org.glassfish.jersey.tests.integration.cdi.skipping.analyzer;
+
+    exports org.glassfish.jersey.tests.cdi.skippinganalyzer.test;
+}
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/cdi-skipping-analyzer/src/test/java/org/glassfish/jersey/tests/cdi/skippinganalyzer/SkippingAnalyzerTest.java b/tests/integration/cdi-integration/cdi-skipping-analyzer/src/test/java/org/glassfish/jersey/tests/cdi/skippinganalyzer/test/SkippingAnalyzerTest.java
similarity index 93%
rename from tests/integration/cdi-integration/cdi-skipping-analyzer/src/test/java/org/glassfish/jersey/tests/cdi/skippinganalyzer/SkippingAnalyzerTest.java
rename to tests/integration/cdi-integration/cdi-skipping-analyzer/src/test/java/org/glassfish/jersey/tests/cdi/skippinganalyzer/test/SkippingAnalyzerTest.java
index 698e496..61ae214 100644
--- a/tests/integration/cdi-integration/cdi-skipping-analyzer/src/test/java/org/glassfish/jersey/tests/cdi/skippinganalyzer/SkippingAnalyzerTest.java
+++ b/tests/integration/cdi-integration/cdi-skipping-analyzer/src/test/java/org/glassfish/jersey/tests/cdi/skippinganalyzer/test/SkippingAnalyzerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2024 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2024, 2025 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -14,7 +14,7 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.tests.cdi.skippinganalyzer;
+package org.glassfish.jersey.tests.cdi.skippinganalyzer.test;
 
 import org.glassfish.hk2.api.ClassAnalyzer;
 import org.glassfish.jersey.ext.cdi1x.internal.CdiComponentProvider;
@@ -22,6 +22,7 @@
 import org.glassfish.jersey.inject.hk2.Hk2InjectionManagerFactory;
 import org.glassfish.jersey.internal.inject.InjectionManager;
 import org.glassfish.jersey.internal.inject.Injections;
+import org.glassfish.jersey.tests.cdi.skippinganalyzer.CdiServiceImpl;
 import org.hamcrest.MatcherAssert;
 import org.hamcrest.Matchers;
 import org.jboss.weld.environment.se.Weld;