JPMS for the 4.0 - adapted from the 3.1.JPMS

diff --git a/archetypes/jersey-example-java8-webapp/src/main/resources/archetype-resources/pom.xml b/archetypes/jersey-example-java8-webapp/src/main/resources/archetype-resources/pom.xml
index 9f6fb8d..e50c9e8 100644
--- a/archetypes/jersey-example-java8-webapp/src/main/resources/archetype-resources/pom.xml
+++ b/archetypes/jersey-example-java8-webapp/src/main/resources/archetype-resources/pom.xml
@@ -70,8 +70,6 @@
                 <artifactId>maven-compiler-plugin</artifactId>
                 <inherited>true</inherited>
                 <configuration>
-                    <source>${java.version}</source>
-                    <target>${java.version}</target>
                     <showWarnings>false</showWarnings>
                     <fork>false</fork>
                 </configuration>
diff --git a/archetypes/jersey-quickstart-grizzly2/pom.xml b/archetypes/jersey-quickstart-grizzly2/pom.xml
index 21aec22..f9a81f5 100644
--- a/archetypes/jersey-quickstart-grizzly2/pom.xml
+++ b/archetypes/jersey-quickstart-grizzly2/pom.xml
@@ -53,4 +53,4 @@
         </plugins>
 
     </build>
-</project>
+</project>
\ No newline at end of file
diff --git a/archetypes/jersey-quickstart-grizzly2/src/main/resources/META-INF/maven/archetype-metadata.xml b/archetypes/jersey-quickstart-grizzly2/src/main/resources/META-INF/maven/archetype-metadata.xml
index 54380e5..58e9ba4 100644
--- a/archetypes/jersey-quickstart-grizzly2/src/main/resources/META-INF/maven/archetype-metadata.xml
+++ b/archetypes/jersey-quickstart-grizzly2/src/main/resources/META-INF/maven/archetype-metadata.xml
@@ -18,24 +18,38 @@
 -->
 
 <archetype-descriptor
-        xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0 http://maven.apache.org/xsd/archetype-descriptor-1.0.0.xsd"
-        name="jersey-quickstart-webapp"
-        xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+        xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.1.0 https://maven.apache.org/xsd/archetype-descriptor-1.1.0.xsd"
+        name="quickstart">
     <fileSets>
-        <fileSet filtered="true" packaged="true" encoding="UTF-8">
+        <fileSet filtered="true" packaged="true">
+            <excludes>
+                <exclude>module-info.java</exclude>
+            </excludes>
             <directory>src/main/java</directory>
             <includes>
-                <include>**/*</include>
+                <include>**/*.java</include>
             </includes>
         </fileSet>
-        <!--<fileSet filtered="true" encoding="UTF-8">
-            <directory>src/main/webapp</directory>
-        </fileSet>-->
-        <fileSet filtered="true" packaged="true" encoding="UTF-8">
+        <fileSet filtered="true" packaged="false">
+            <directory>src/main/java</directory>
+            <includes>
+                <include>module-info.java</include>
+            </includes>
+        </fileSet>
+        <fileSet filtered="true" packaged="true">
+            <excludes>
+                <exclude>module-info.java</exclude>
+            </excludes>
             <directory>src/test/java</directory>
             <includes>
-                <include>**/*</include>
+                <include>**/*.java</include>
+            </includes>
+        </fileSet>
+        <fileSet filtered="true" packaged="false">
+            <directory>src/test/java</directory>
+            <includes>
+                <include>module-info.java</include>
             </includes>
         </fileSet>
     </fileSets>
diff --git a/archetypes/jersey-quickstart-grizzly2/src/main/resources/archetype-resources/pom.xml b/archetypes/jersey-quickstart-grizzly2/src/main/resources/archetype-resources/pom.xml
index 087417f..2690b43 100644
--- a/archetypes/jersey-quickstart-grizzly2/src/main/resources/archetype-resources/pom.xml
+++ b/archetypes/jersey-quickstart-grizzly2/src/main/resources/archetype-resources/pom.xml
@@ -52,10 +52,6 @@
                 <artifactId>maven-compiler-plugin</artifactId>
                 <version>${compiler.mvn.plugin.version}</version>
                 <inherited>true</inherited>
-                <configuration>
-                    <source>1.8</source>
-                    <target>1.8</target>
-                </configuration>
             </plugin>
             <plugin>
                 <groupId>org.codehaus.mojo</groupId>
diff --git a/archetypes/jersey-quickstart-grizzly2/src/main/resources/archetype-resources/src/main/java/module-info.java b/archetypes/jersey-quickstart-grizzly2/src/main/resources/archetype-resources/src/main/java/module-info.java
new file mode 100644
index 0000000..fc807e6
--- /dev/null
+++ b/archetypes/jersey-quickstart-grizzly2/src/main/resources/archetype-resources/src/main/java/module-info.java
@@ -0,0 +1,10 @@
+module ${package}.module {
+    requires jakarta.ws.rs;
+
+    requires org.glassfish.grizzly.http.server;
+
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.container.grizzly2.http;
+
+    exports ${package};
+}
\ No newline at end of file
diff --git a/archetypes/jersey-quickstart-grizzly2/src/main/resources/archetype-resources/src/test/java/MyResourceTest.java b/archetypes/jersey-quickstart-grizzly2/src/main/resources/archetype-resources/src/test/java/MyResourceTest.java
index 0b5f5c7..729b5d5 100644
--- a/archetypes/jersey-quickstart-grizzly2/src/main/resources/archetype-resources/src/test/java/MyResourceTest.java
+++ b/archetypes/jersey-quickstart-grizzly2/src/main/resources/archetype-resources/src/test/java/MyResourceTest.java
@@ -1,4 +1,4 @@
-package $package;
+package ${package}.test;
 
 import jakarta.ws.rs.client.Client;
 import jakarta.ws.rs.client.ClientBuilder;
@@ -6,6 +6,8 @@
 
 import org.glassfish.grizzly.http.server.HttpServer;
 
+import ${package}.Main;
+
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git a/archetypes/jersey-quickstart-grizzly2/src/main/resources/archetype-resources/src/test/java/module-info.java b/archetypes/jersey-quickstart-grizzly2/src/main/resources/archetype-resources/src/test/java/module-info.java
new file mode 100644
index 0000000..dd95b34
--- /dev/null
+++ b/archetypes/jersey-quickstart-grizzly2/src/main/resources/archetype-resources/src/test/java/module-info.java
@@ -0,0 +1,9 @@
+module ${package}.module.test {
+    requires jakarta.ws.rs;
+
+    requires org.junit.jupiter.api;
+
+    requires com.example.archetype.grizzly.module;
+
+    exports ${package}.test;
+}
\ No newline at end of file
diff --git a/archetypes/jersey-quickstart-webapp/pom.xml b/archetypes/jersey-quickstart-webapp/pom.xml
index 46cde55..95281c1 100644
--- a/archetypes/jersey-quickstart-webapp/pom.xml
+++ b/archetypes/jersey-quickstart-webapp/pom.xml
@@ -52,4 +52,4 @@
             </resource>
         </resources>
     </build>
-</project>
+</project>
\ No newline at end of file
diff --git a/archetypes/jersey-quickstart-webapp/src/main/resources/META-INF/maven/archetype-metadata.xml b/archetypes/jersey-quickstart-webapp/src/main/resources/META-INF/maven/archetype-metadata.xml
index bea65b3..97e49d3 100644
--- a/archetypes/jersey-quickstart-webapp/src/main/resources/META-INF/maven/archetype-metadata.xml
+++ b/archetypes/jersey-quickstart-webapp/src/main/resources/META-INF/maven/archetype-metadata.xml
@@ -18,25 +18,27 @@
 -->
 
 <archetype-descriptor
-        xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0 http://maven.apache.org/xsd/archetype-descriptor-1.0.0.xsd"
-        name="jersey-quickstart-webapp"
-        xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+        xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.1.0 https://maven.apache.org/xsd/archetype-descriptor-1.1.0.xsd"
+        name="quickstart">
     <fileSets>
-        <fileSet filtered="true" packaged="true" encoding="UTF-8">
+        <fileSet filtered="true" packaged="true">
+            <excludes>
+                <exclude>module-info.java</exclude>
+            </excludes>
             <directory>src/main/java</directory>
+            <includes>
+                <include>**/*.java</include>
+            </includes>
         </fileSet>
-        <fileSet filtered="true" encoding="UTF-8">
+        <fileSet filtered="true" packaged="false">
+            <directory>src/main/java</directory>
+            <includes>
+                <include>module-info.java</include>
+            </includes>
+        </fileSet>
+        <fileSet filtered="true" packaged="false">
             <directory>src/main/webapp</directory>
-            <includes>
-                <include>**/*</include>
-            </includes>
-        </fileSet>
-        <fileSet filtered="true" packaged="true" encoding="UTF-8">
-            <directory>src/test/java</directory>
-            <includes>
-                <include>**/*</include>
-            </includes>
         </fileSet>
     </fileSets>
 </archetype-descriptor>
\ No newline at end of file
diff --git a/archetypes/jersey-quickstart-webapp/src/main/resources/archetype-resources/pom.xml b/archetypes/jersey-quickstart-webapp/src/main/resources/archetype-resources/pom.xml
index 341fb67..0db4b81 100644
--- a/archetypes/jersey-quickstart-webapp/src/main/resources/archetype-resources/pom.xml
+++ b/archetypes/jersey-quickstart-webapp/src/main/resources/archetype-resources/pom.xml
@@ -17,10 +17,6 @@
                 <artifactId>maven-compiler-plugin</artifactId>
                 <version>${compiler.mvn.plugin.version}</version>
                 <inherited>true</inherited>
-                <configuration>
-                    <source>1.8</source>
-                    <target>1.8</target>
-                </configuration>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
diff --git a/archetypes/jersey-quickstart-webapp/src/main/resources/archetype-resources/src/main/java/module-info.java b/archetypes/jersey-quickstart-webapp/src/main/resources/archetype-resources/src/main/java/module-info.java
new file mode 100644
index 0000000..23c71ea
--- /dev/null
+++ b/archetypes/jersey-quickstart-webapp/src/main/resources/archetype-resources/src/main/java/module-info.java
@@ -0,0 +1,8 @@
+module ${package}.module {
+    requires jakarta.ws.rs;
+
+    requires org.glassfish.jersey.container.servlet.core;
+    requires org.glassfish.jersey.inject.hk2;
+
+    exports ${package};
+}
\ No newline at end of file
diff --git a/archetypes/jersey-quickstart-webapp/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml b/archetypes/jersey-quickstart-webapp/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml
index 7c85b3a..279de3c 100644
--- a/archetypes/jersey-quickstart-webapp/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml
+++ b/archetypes/jersey-quickstart-webapp/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml
@@ -7,7 +7,7 @@
         <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
         <init-param>
             <param-name>jersey.config.server.provider.packages</param-name>
-            <param-value>$package</param-value>
+            <param-value>${package}</param-value>
         </init-param>
         <load-on-startup>1</load-on-startup>
     </servlet>
diff --git a/archetypes/jersey-quickstart-webapp/src/main/resources/archetype-resources/src/main/webapp/index.jsp b/archetypes/jersey-quickstart-webapp/src/main/resources/archetype-resources/src/main/webapp/index.jsp
index a064b45..9b08787 100644
--- a/archetypes/jersey-quickstart-webapp/src/main/resources/archetype-resources/src/main/webapp/index.jsp
+++ b/archetypes/jersey-quickstart-webapp/src/main/resources/archetype-resources/src/main/webapp/index.jsp
@@ -2,7 +2,7 @@
 <body>
     <h2>Jersey RESTful Web Application!</h2>
     <p><a href="webapi/myresource">Jersey resource</a>
-    <p>Visit <a href="http://jersey.java.net">Project Jersey website</a>
+    <p>Visit <a href="http://eclipse-ee4j.github.io/jersey">Project Jersey website</a>
     for more information on Jersey!
 </body>
 </html>
diff --git a/archetypes/pom.xml b/archetypes/pom.xml
index 02b94bc..cdc570d 100644
--- a/archetypes/pom.xml
+++ b/archetypes/pom.xml
@@ -32,7 +32,7 @@
     <description>
         A module containing archetypes for generating Jersey-based applications.
     </description>
-
+    <!-- List of available modules -->
     <modules>
         <module>jersey-heroku-webapp</module>
         <module>jersey-quickstart-grizzly2</module>
@@ -57,4 +57,7 @@
             </plugin>
         </plugins>
     </build>
+    <properties>
+        <maven.resources.plugin.version>3.2.0</maven.resources.plugin.version>
+    </properties>
 </project>
diff --git a/bundles/apidocs/pom.xml b/bundles/apidocs/pom.xml
index 71eee8c..67a5084 100644
--- a/bundles/apidocs/pom.xml
+++ b/bundles/apidocs/pom.xml
@@ -290,23 +290,35 @@
                             <sourceFileExcludes>
                                 <fileExclude>META-INF/versions/21/org/glassfish/jersey/helidon/connector/*.java</fileExclude>
                                 <fileExclude>org/glassfish/jersey/helidon/connector/*.java</fileExclude>
+                                <fileExclude>org/glassfish/jersey/jetty/*.java</fileExclude>
+                                <fileExclude>org/glassfish/jersey/jetty/connector/*.java</fileExclude>
+                                <fileExclude>org/glassfish/jersey/wadl/doclet/*.java</fileExclude>
+                                <fileExclude>module-info.java</fileExclude>
                             </sourceFileExcludes>
+                            <source>${java.version}</source>
+                            <disableSourcepathUsage>true</disableSourcepathUsage>
                             <dependencySourceIncludes>
                                 <dependencySourceInclude>org.glassfish.jersey.*:*</dependencySourceInclude>
                             </dependencySourceIncludes>
                             <excludePackageNames>*.innate:*.innate.*</excludePackageNames>
+                            <legacyMode>true</legacyMode>
+                            <verbose>false</verbose>
+                            <debug>true</debug>
+                            <detectJavaApiLink>false</detectJavaApiLink>
+                            <detectLinks>false</detectLinks>
+                            <doclint>none</doclint>
                         </configuration>
                     </execution>
                 </executions>
             </plugin>
             <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>build-helper-maven-plugin</artifactId>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
                 <executions>
                     <execution>
                         <id>exclude-jar</id>
                         <goals>
-                            <goal>remove-project-artifact</goal>
+                            <goal>purge-local-repository</goal>
                         </goals>
                     </execution>
                 </executions>
diff --git a/bundles/jaxrs-ri/pom.xml b/bundles/jaxrs-ri/pom.xml
index 844d89e..f732ffd 100644
--- a/bundles/jaxrs-ri/pom.xml
+++ b/bundles/jaxrs-ri/pom.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
 
-    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
@@ -208,8 +208,7 @@
                 <artifactId>maven-compiler-plugin</artifactId>
                 <inherited>false</inherited>
                 <configuration>
-                    <source>${java.version}</source>
-                    <target>${java.version}</target>
+                    <release>${java.version}</release>
                     <compilerArguments>
                         <!-- Do not warn about using sun.misc.Unsafe -->
                         <XDignore.symbol.file />
@@ -465,6 +464,15 @@
                 </plugins>
             </build>
         </profile>
+        <profile>
+            <id>java_version</id>
+            <activation>
+                <jdk>21</jdk>
+            </activation>
+            <properties>
+                <java.version>21</java.version>
+            </properties>
+        </profile>
     </profiles>
 
     <properties>
diff --git a/connectors/apache5-connector/src/main/java/module-info.java b/connectors/apache5-connector/src/main/java/module-info.java
new file mode 100644
index 0000000..ab997c4
--- /dev/null
+++ b/connectors/apache5-connector/src/main/java/module-info.java
@@ -0,0 +1,31 @@
+/*
+ * 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
+ * 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.apache5.connector {
+    requires java.logging;
+
+    requires jakarta.ws.rs;
+
+    requires org.apache.httpcomponents.core5.httpcore5;
+    requires org.apache.httpcomponents.client5.httpclient5;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.client;
+
+    exports org.glassfish.jersey.apache5.connector;
+
+    opens org.glassfish.jersey.apache5.connector;
+}
\ No newline at end of file
diff --git a/connectors/apache5-connector/src/test/java/module-info.java b/connectors/apache5-connector/src/test/java/module-info.java
new file mode 100644
index 0000000..9351a82
--- /dev/null
+++ b/connectors/apache5-connector/src/test/java/module-info.java
@@ -0,0 +1,44 @@
+/*
+ * 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
+ * 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.apache5.connector.test {
+    requires java.logging;
+
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+
+    requires org.apache.httpcomponents.client5.httpclient5;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.core.server;
+
+    requires org.glassfish.jersey.apache5.connector;
+    requires org.glassfish.jersey.tests.framework.core;
+    requires org.glassfish.jersey.tests.framework.provider.grizzly;
+
+    requires org.junit.jupiter.api;
+    requires org.junit.jupiter.engine;
+    requires org.junit.platform.commons;
+    requires org.hamcrest;
+
+    exports org.glassfish.jersey.apache5.connector.test to
+            org.junit.platform.commons,
+            org.glassfish.jersey.core.server;
+    opens org.glassfish.jersey.apache5.connector.test to
+            org.glassfish.hk2.locator,
+            org.glassfish.hk2.utilities;
+}
\ No newline at end of file
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/AsyncTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/AsyncTest.java
similarity index 97%
rename from connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/AsyncTest.java
rename to connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/AsyncTest.java
index 249ad82..18d948a 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/AsyncTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/AsyncTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2024 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.apache5.connector;
+package org.glassfish.jersey.apache5.connector.test;
 
 import java.util.concurrent.Callable;
 import java.util.concurrent.CountDownLatch;
@@ -34,6 +34,7 @@
 import jakarta.ws.rs.core.Application;
 import jakarta.ws.rs.core.Response;
 
+import org.glassfish.jersey.apache5.connector.Apache5ConnectorProvider;
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.logging.LoggingFeature;
 import org.glassfish.jersey.server.ResourceConfig;
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/AuthTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/AuthTest.java
similarity index 98%
rename from connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/AuthTest.java
rename to connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/AuthTest.java
index 130a2b3..8fda3ef 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/AuthTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/AuthTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2024 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.apache5.connector;
+package org.glassfish.jersey.apache5.connector.test;
 
 import jakarta.ws.rs.DELETE;
 import jakarta.ws.rs.GET;
@@ -38,6 +38,9 @@
 import org.apache.hc.client5.http.auth.UsernamePasswordCredentials;
 import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider;
 import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
+import org.glassfish.jersey.apache5.connector.Apache5ClientProperties;
+import org.glassfish.jersey.apache5.connector.Apache5ConnectorProvider;
+import org.glassfish.jersey.apache5.connector.Apache5HttpClientBuilderConfigurator;
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature;
 import org.glassfish.jersey.client.authentication.ResponseAuthenticationException;
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/CookieTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/CookieTest.java
similarity index 72%
rename from connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/CookieTest.java
rename to connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/CookieTest.java
index a92271e..80befa6 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/CookieTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/CookieTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2024 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.apache5.connector;
+package org.glassfish.jersey.apache5.connector.test;
 
 import jakarta.ws.rs.GET;
 import jakarta.ws.rs.Path;
@@ -28,13 +28,20 @@
 import jakarta.ws.rs.core.NewCookie;
 import jakarta.ws.rs.core.Response;
 
+import org.apache.hc.client5.http.cookie.CookieStore;
+import org.glassfish.jersey.apache5.connector.Apache5ClientProperties;
+import org.glassfish.jersey.apache5.connector.Apache5ConnectorProvider;
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.client.JerseyClient;
 import org.glassfish.jersey.client.JerseyClientBuilder;
+import org.glassfish.jersey.client.spi.Connector;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
 import org.junit.jupiter.api.Test;
+
+import java.lang.reflect.Method;
+
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
@@ -85,11 +92,11 @@
         assertEquals("NO-COOKIE", r.request().get(String.class));
         assertEquals("NO-COOKIE", r.request().get(String.class));
 
-        final Apache5Connector connector = (Apache5Connector) client.getConfiguration().getConnector();
-        if (connector.getCookieStore() != null) {
-            assertTrue(connector.getCookieStore().getCookies().isEmpty());
+        final CookieStore cookieStore = cookieStore(client);
+        if (cookieStore != null) {
+            assertTrue(cookieStore.getCookies().isEmpty());
         } else {
-            assertNull(connector.getCookieStore());
+            assertNull(cookieStore);
         }
     }
 
@@ -103,9 +110,21 @@
         assertEquals("NO-COOKIE", r.request().get(String.class));
         assertEquals("value", r.request().get(String.class));
 
-        final Apache5Connector connector = (Apache5Connector) client.getConfiguration().getConnector();
-        assertNotNull(connector.getCookieStore().getCookies());
-        assertEquals(1, connector.getCookieStore().getCookies().size());
-        assertEquals("value", connector.getCookieStore().getCookies().get(0).getValue());
+        final CookieStore cookieStore = cookieStore(client);
+        assertNotNull(cookieStore.getCookies());
+        assertEquals(1, cookieStore.getCookies().size());
+        assertEquals("value", cookieStore.getCookies().get(0).getValue());
+    }
+
+    private static CookieStore cookieStore(JerseyClient client) {
+        Connector connector = client.getConfiguration().getConnector();
+        Method method = null;
+        try {
+            method = connector.getClass().getDeclaredMethod("getCookieStore");
+            method.setAccessible(true);
+            return (CookieStore) method.invoke(connector);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
     }
 }
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/CustomLoggingFilter.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/CustomLoggingFilter.java
similarity index 94%
rename from connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/CustomLoggingFilter.java
rename to connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/CustomLoggingFilter.java
index 8b23445..8f4f2aa 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/CustomLoggingFilter.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/CustomLoggingFilter.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2024 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.apache5.connector;
+package org.glassfish.jersey.apache5.connector.test;
 
 import java.io.IOException;
 
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/DisableContentEncodingTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/DisableContentEncodingTest.java
similarity index 92%
rename from connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/DisableContentEncodingTest.java
rename to connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/DisableContentEncodingTest.java
index 85b2408..36f4a7e 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/DisableContentEncodingTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/DisableContentEncodingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2024 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.apache5.connector;
+package org.glassfish.jersey.apache5.connector.test;
 
 import jakarta.ws.rs.GET;
 import jakarta.ws.rs.HeaderParam;
@@ -25,6 +25,8 @@
 import jakarta.ws.rs.core.Application;
 
 import org.apache.hc.client5.http.config.RequestConfig;
+import org.glassfish.jersey.apache5.connector.Apache5ClientProperties;
+import org.glassfish.jersey.apache5.connector.Apache5ConnectorProvider;
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.message.GZipEncoder;
 import org.glassfish.jersey.server.ResourceConfig;
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/FollowRedirectsTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/FollowRedirectsTest.java
similarity index 94%
rename from connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/FollowRedirectsTest.java
rename to connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/FollowRedirectsTest.java
index cb8932a..424b4b3 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/FollowRedirectsTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/FollowRedirectsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2024 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.apache5.connector;
+package org.glassfish.jersey.apache5.connector.test;
 
 import java.io.IOException;
 import java.util.logging.Logger;
@@ -29,6 +29,7 @@
 import jakarta.ws.rs.core.Response;
 import jakarta.ws.rs.core.UriBuilder;
 
+import org.glassfish.jersey.apache5.connector.Apache5ConnectorProvider;
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.client.ClientProperties;
 import org.glassfish.jersey.client.ClientResponse;
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/GZIPContentEncodingTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/GZIPContentEncodingTest.java
similarity index 93%
rename from connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/GZIPContentEncodingTest.java
rename to connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/GZIPContentEncodingTest.java
index d1e43fd..cd2851a 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/GZIPContentEncodingTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/GZIPContentEncodingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2024 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.apache5.connector;
+package org.glassfish.jersey.apache5.connector.test;
 
 import java.util.Arrays;
 
@@ -28,6 +28,7 @@
 import jakarta.ws.rs.core.MediaType;
 import jakarta.ws.rs.core.Response;
 
+import org.glassfish.jersey.apache5.connector.Apache5ConnectorProvider;
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.client.ClientProperties;
 import org.glassfish.jersey.message.GZipEncoder;
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/HelloWorldTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/HelloWorldTest.java
similarity index 98%
rename from connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/HelloWorldTest.java
rename to connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/HelloWorldTest.java
index 96114cb..4946b57 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/HelloWorldTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/HelloWorldTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2024 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.apache5.connector;
+package org.glassfish.jersey.apache5.connector.test;
 
 import java.io.IOException;
 import java.util.Map;
@@ -47,6 +47,8 @@
 import org.apache.hc.core5.io.CloseMode;
 import org.apache.hc.core5.util.TimeValue;
 import org.apache.hc.core5.util.Timeout;
+import org.glassfish.jersey.apache5.connector.Apache5ClientProperties;
+import org.glassfish.jersey.apache5.connector.Apache5ConnectorProvider;
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.logging.LoggingFeature;
 import org.glassfish.jersey.server.ResourceConfig;
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/HttpEntityTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/HttpEntityTest.java
similarity index 93%
rename from connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/HttpEntityTest.java
rename to connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/HttpEntityTest.java
index 9e08aa8..0a51e5c 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/HttpEntityTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/HttpEntityTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2024 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,12 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.apache5.connector;
+package org.glassfish.jersey.apache5.connector.test;
 
 import org.apache.hc.core5.http.ContentType;
 import org.apache.hc.core5.http.io.entity.ByteArrayEntity;
 import org.apache.hc.core5.http.io.entity.InputStreamEntity;
+import org.glassfish.jersey.apache5.connector.Apache5ConnectorProvider;
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.logging.LoggingFeature;
 import org.glassfish.jersey.server.ResourceConfig;
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/HttpHeadersTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/HttpHeadersTest.java
similarity index 95%
rename from connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/HttpHeadersTest.java
rename to connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/HttpHeadersTest.java
index 16e135a..cd6a9c2 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/HttpHeadersTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/HttpHeadersTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2024 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.apache5.connector;
+package org.glassfish.jersey.apache5.connector.test;
 
 import java.io.IOException;
 import java.io.OutputStream;
@@ -36,6 +36,7 @@
 import jakarta.ws.rs.ext.MessageBodyWriter;
 import jakarta.ws.rs.ext.Provider;
 
+import org.glassfish.jersey.apache5.connector.Apache5ConnectorProvider;
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.client.ClientProperties;
 import org.glassfish.jersey.logging.LoggingFeature;
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/HttpMethodTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/HttpMethodTest.java
similarity index 96%
rename from connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/HttpMethodTest.java
rename to connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/HttpMethodTest.java
index 107faad..8e697c3 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/HttpMethodTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/HttpMethodTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2024 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.apache5.connector;
+package org.glassfish.jersey.apache5.connector.test;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
@@ -36,6 +36,8 @@
 import jakarta.ws.rs.core.Response;
 
 import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
+import org.glassfish.jersey.apache5.connector.Apache5ClientProperties;
+import org.glassfish.jersey.apache5.connector.Apache5ConnectorProvider;
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.client.ClientProperties;
 import org.glassfish.jersey.server.ResourceConfig;
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/HttpMethodWithClientFilterTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/HttpMethodWithClientFilterTest.java
similarity index 85%
rename from connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/HttpMethodWithClientFilterTest.java
rename to connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/HttpMethodWithClientFilterTest.java
index 03d182d..dbfb80b 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/HttpMethodWithClientFilterTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/HttpMethodWithClientFilterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2024 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,12 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.apache5.connector;
+package org.glassfish.jersey.apache5.connector.test;
 
 import jakarta.ws.rs.client.Client;
 import jakarta.ws.rs.client.ClientBuilder;
 
+import org.glassfish.jersey.apache5.connector.Apache5ConnectorProvider;
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.logging.LoggingFeature;
 
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/LargeDataTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/LargeDataTest.java
similarity index 95%
rename from connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/LargeDataTest.java
rename to connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/LargeDataTest.java
index 1173941..87cd8af 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/LargeDataTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/LargeDataTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2024 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.apache5.connector;
+package org.glassfish.jersey.apache5.connector.test;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -32,6 +32,7 @@
 import jakarta.ws.rs.core.Response.Status;
 import jakarta.ws.rs.core.StreamingOutput;
 
+import org.glassfish.jersey.apache5.connector.Apache5ConnectorProvider;
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.logging.LoggingFeature;
 import org.glassfish.jersey.server.ResourceConfig;
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/ManagedClientTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/ManagedClientTest.java
similarity index 97%
rename from connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/ManagedClientTest.java
rename to connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/ManagedClientTest.java
index 3ab8a2a..1db31cf 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/ManagedClientTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/ManagedClientTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2024 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.apache5.connector;
+package org.glassfish.jersey.apache5.connector.test;
 
 import java.io.IOException;
 import java.lang.annotation.Documented;
@@ -39,6 +39,7 @@
 import jakarta.ws.rs.core.MediaType;
 import jakarta.ws.rs.core.Response;
 
+import org.glassfish.jersey.apache5.connector.Apache5ConnectorProvider;
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.logging.LoggingFeature;
 import org.glassfish.jersey.server.ClientBinding;
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/NoEntityTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/NoEntityTest.java
similarity index 93%
rename from connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/NoEntityTest.java
rename to connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/NoEntityTest.java
index cff230d..a088faf 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/NoEntityTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/NoEntityTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2024 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.apache5.connector;
+package org.glassfish.jersey.apache5.connector.test;
 
 import java.util.logging.Logger;
 
@@ -26,6 +26,7 @@
 import jakarta.ws.rs.core.Response;
 import jakarta.ws.rs.core.Response.Status;
 
+import org.glassfish.jersey.apache5.connector.Apache5ConnectorProvider;
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.logging.LoggingFeature;
 import org.glassfish.jersey.server.ResourceConfig;
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/RetryStrategyTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/RetryStrategyTest.java
similarity index 94%
rename from connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/RetryStrategyTest.java
rename to connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/RetryStrategyTest.java
index 234c10d..e801515 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/RetryStrategyTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/RetryStrategyTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2024 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.apache5.connector;
+package org.glassfish.jersey.apache5.connector.test;
 
 import java.io.IOException;
 
@@ -34,6 +34,8 @@
 import org.apache.hc.core5.http.HttpResponse;
 import org.apache.hc.core5.http.protocol.HttpContext;
 import org.apache.hc.core5.util.TimeValue;
+import org.glassfish.jersey.apache5.connector.Apache5ClientProperties;
+import org.glassfish.jersey.apache5.connector.Apache5ConnectorProvider;
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.client.ClientProperties;
 import org.glassfish.jersey.client.RequestEntityProcessing;
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/SpecialHeaderTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/SpecialHeaderTest.java
similarity index 93%
rename from connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/SpecialHeaderTest.java
rename to connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/SpecialHeaderTest.java
index 0007ead..d98117e 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/SpecialHeaderTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/SpecialHeaderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2024 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.apache5.connector;
+package org.glassfish.jersey.apache5.connector.test;
 
 import jakarta.ws.rs.GET;
 import jakarta.ws.rs.Path;
@@ -23,6 +23,7 @@
 import jakarta.ws.rs.core.HttpHeaders;
 import jakarta.ws.rs.core.Response;
 
+import org.glassfish.jersey.apache5.connector.Apache5ConnectorProvider;
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.logging.LoggingFeature;
 import org.glassfish.jersey.message.GZipEncoder;
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/StreamingTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/StreamingTest.java
similarity index 93%
rename from connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/StreamingTest.java
rename to connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/StreamingTest.java
index 4a38280..8c5e1c4 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/StreamingTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/StreamingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2024 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.apache5.connector;
+package org.glassfish.jersey.apache5.connector.test;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -31,6 +31,9 @@
 import jakarta.inject.Singleton;
 
 import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
+import org.glassfish.jersey.apache5.connector.Apache5ClientProperties;
+import org.glassfish.jersey.apache5.connector.Apache5ConnectionClosingStrategy;
+import org.glassfish.jersey.apache5.connector.Apache5ConnectorProvider;
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.client.ClientProperties;
 import org.glassfish.jersey.server.ChunkedOutput;
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/TimeoutTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/TimeoutTest.java
similarity index 93%
rename from connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/TimeoutTest.java
rename to connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/TimeoutTest.java
index 3dda5ec..1840319 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/TimeoutTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/TimeoutTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2024 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.apache5.connector;
+package org.glassfish.jersey.apache5.connector.test;
 
 import java.net.SocketTimeoutException;
 import java.util.logging.Logger;
@@ -25,6 +25,7 @@
 import jakarta.ws.rs.core.Application;
 import jakarta.ws.rs.core.Response;
 
+import org.glassfish.jersey.apache5.connector.Apache5ConnectorProvider;
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.client.ClientProperties;
 import org.glassfish.jersey.logging.LoggingFeature;
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/TraceSupportTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/TraceSupportTest.java
similarity index 97%
rename from connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/TraceSupportTest.java
rename to connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/TraceSupportTest.java
index a1fcb93..e9d36dd 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/TraceSupportTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/TraceSupportTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2024 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.apache5.connector;
+package org.glassfish.jersey.apache5.connector.test;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
@@ -37,6 +37,7 @@
 import jakarta.ws.rs.core.Request;
 import jakarta.ws.rs.core.Response;
 
+import org.glassfish.jersey.apache5.connector.Apache5ConnectorProvider;
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.logging.LoggingFeature;
 import org.glassfish.jersey.process.Inflector;
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/UnderlyingCookieStoreAccessTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/UnderlyingCookieStoreAccessTest.java
similarity index 91%
rename from connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/UnderlyingCookieStoreAccessTest.java
rename to connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/UnderlyingCookieStoreAccessTest.java
index 02a21e1..d13d017 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/UnderlyingCookieStoreAccessTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/UnderlyingCookieStoreAccessTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2024 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,14 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.apache5.connector;
+package org.glassfish.jersey.apache5.connector.test;
 
 import jakarta.ws.rs.client.Client;
 import jakarta.ws.rs.client.ClientBuilder;
 import jakarta.ws.rs.client.WebTarget;
 
 import org.apache.hc.client5.http.cookie.CookieStore;
+import org.glassfish.jersey.apache5.connector.Apache5ConnectorProvider;
 import org.glassfish.jersey.client.ClientConfig;
 
 import org.junit.jupiter.api.Test;
diff --git a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/UnderlyingHttpClientAccessTest.java b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/UnderlyingHttpClientAccessTest.java
similarity index 91%
rename from connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/UnderlyingHttpClientAccessTest.java
rename to connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/UnderlyingHttpClientAccessTest.java
index b487a82..5dbce9e 100644
--- a/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/UnderlyingHttpClientAccessTest.java
+++ b/connectors/apache5-connector/src/test/java/org/glassfish/jersey/apache5/connector/test/UnderlyingHttpClientAccessTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2024 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,14 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.apache5.connector;
+package org.glassfish.jersey.apache5.connector.test;
 
 import jakarta.ws.rs.client.Client;
 import jakarta.ws.rs.client.ClientBuilder;
 import jakarta.ws.rs.client.WebTarget;
 
 import org.apache.hc.client5.http.classic.HttpClient;
+import org.glassfish.jersey.apache5.connector.Apache5ConnectorProvider;
 import org.glassfish.jersey.client.ClientConfig;
 
 import org.junit.jupiter.api.Test;
diff --git a/connectors/grizzly-connector/pom.xml b/connectors/grizzly-connector/pom.xml
index ddeead5..66ccf73 100644
--- a/connectors/grizzly-connector/pom.xml
+++ b/connectors/grizzly-connector/pom.xml
@@ -70,10 +70,16 @@
         </dependency>
 
         <dependency>
-            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
-            <artifactId>jersey-test-framework-provider-bundle</artifactId>
+            <groupId>org.glassfish.jersey.test-framework</groupId>
+            <artifactId>jersey-test-framework-core</artifactId>
             <version>${project.version}</version>
-            <type>pom</type>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
+            <artifactId>jersey-test-framework-provider-grizzly2</artifactId>
+            <version>${project.version}</version>
             <scope>test</scope>
         </dependency>
     </dependencies>
@@ -90,10 +96,6 @@
                 <artifactId>build-helper-maven-plugin</artifactId>
                 <inherited>true</inherited>
             </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-            </plugin>
         </plugins>
     </build>
 
diff --git a/connectors/grizzly-connector/src/main/java/module-info.java b/connectors/grizzly-connector/src/main/java/module-info.java
new file mode 100644
index 0000000..8412c6c
--- /dev/null
+++ b/connectors/grizzly-connector/src/main/java/module-info.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2022, 2023 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.grizzly.connector {
+    requires java.logging;
+
+    requires jakarta.ws.rs;
+
+    requires org.glassfish.grizzly;
+    requires grizzly.http.client;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.client;
+
+    exports org.glassfish.jersey.grizzly.connector;
+    opens org.glassfish.jersey.grizzly.connector;
+}
\ No newline at end of file
diff --git a/connectors/grizzly-connector/src/test/java/module-info.java b/connectors/grizzly-connector/src/test/java/module-info.java
new file mode 100644
index 0000000..11c6ad2
--- /dev/null
+++ b/connectors/grizzly-connector/src/test/java/module-info.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2023, 2024 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.grizzly.connector.test {
+    requires java.logging;
+    requires org.slf4j;
+
+    requires jakarta.ws.rs;
+
+    requires org.glassfish.grizzly;
+    requires grizzly.http.client;
+
+    requires org.glassfish.grizzly.http;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.grizzly.connector;
+
+    requires org.glassfish.jersey.tests.framework.core;
+    requires org.glassfish.jersey.tests.framework.provider.grizzly;
+
+    requires org.junit.jupiter.api;
+    requires org.junit.jupiter.engine;
+    requires org.hamcrest;
+
+    exports org.glassfish.jersey.grizzly.connector.test;
+    opens org.glassfish.jersey.grizzly.connector.test;
+}
\ No newline at end of file
diff --git a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/AsyncTest.java b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/test/AsyncTest.java
similarity index 97%
rename from connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/AsyncTest.java
rename to connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/test/AsyncTest.java
index 0818c7e..91972a1 100644
--- a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/AsyncTest.java
+++ b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/test/AsyncTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2024 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.grizzly.connector;
+package org.glassfish.jersey.grizzly.connector.test;
 
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
@@ -31,6 +31,7 @@
 import jakarta.ws.rs.core.Response;
 
 import org.glassfish.jersey.client.ClientConfig;
+import org.glassfish.jersey.grizzly.connector.GrizzlyConnectorProvider;
 import org.glassfish.jersey.logging.LoggingFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
diff --git a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/CustomizersTest.java b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/test/CustomizersTest.java
similarity index 96%
rename from connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/CustomizersTest.java
rename to connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/test/CustomizersTest.java
index b987fc0..1f99366 100644
--- a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/CustomizersTest.java
+++ b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/test/CustomizersTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2024 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.grizzly.connector;
+package org.glassfish.jersey.grizzly.connector.test;
 
 import jakarta.ws.rs.HeaderParam;
 import jakarta.ws.rs.POST;
@@ -29,6 +29,7 @@
 
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.client.ClientRequest;
+import org.glassfish.jersey.grizzly.connector.GrizzlyConnectorProvider;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
diff --git a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/FollowRedirectsTest.java b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/test/FollowRedirectsTest.java
similarity index 94%
rename from connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/FollowRedirectsTest.java
rename to connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/test/FollowRedirectsTest.java
index e313b10..822503f 100644
--- a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/FollowRedirectsTest.java
+++ b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/test/FollowRedirectsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2024 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.grizzly.connector;
+package org.glassfish.jersey.grizzly.connector.test;
 
 import java.io.IOException;
 
@@ -31,6 +31,7 @@
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.client.ClientProperties;
 import org.glassfish.jersey.client.ClientResponse;
+import org.glassfish.jersey.grizzly.connector.GrizzlyConnectorProvider;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
diff --git a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/HttpHeadersTest.java b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/test/HttpHeadersTest.java
similarity index 91%
rename from connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/HttpHeadersTest.java
rename to connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/test/HttpHeadersTest.java
index 2b8cdf2..d3a407b 100644
--- a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/HttpHeadersTest.java
+++ b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/test/HttpHeadersTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2024 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.grizzly.connector;
+package org.glassfish.jersey.grizzly.connector.test;
 
 import jakarta.ws.rs.HeaderParam;
 import jakarta.ws.rs.POST;
@@ -23,6 +23,7 @@
 import jakarta.ws.rs.core.Response;
 
 import org.glassfish.jersey.client.ClientConfig;
+import org.glassfish.jersey.grizzly.connector.GrizzlyConnectorProvider;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
diff --git a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/HttpMethodTest.java b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/test/HttpMethodTest.java
similarity index 92%
rename from connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/HttpMethodTest.java
rename to connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/test/HttpMethodTest.java
index 650eea5..64e9059 100644
--- a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/HttpMethodTest.java
+++ b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/test/HttpMethodTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2024 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,9 +14,10 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.grizzly.connector;
+package org.glassfish.jersey.grizzly.connector.test;
 
 import org.glassfish.jersey.client.ClientConfig;
+import org.glassfish.jersey.grizzly.connector.GrizzlyConnectorProvider;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 import org.junit.jupiter.api.Test;
diff --git a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/NoEntityTest.java b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/test/NoEntityTest.java
similarity index 93%
rename from connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/NoEntityTest.java
rename to connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/test/NoEntityTest.java
index 4e15b4e..d9cc1c3 100644
--- a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/NoEntityTest.java
+++ b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/test/NoEntityTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2024 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.grizzly.connector;
+package org.glassfish.jersey.grizzly.connector.test;
 
 import java.util.logging.Logger;
 
@@ -27,6 +27,7 @@
 import jakarta.ws.rs.core.Response.Status;
 
 import org.glassfish.jersey.client.ClientConfig;
+import org.glassfish.jersey.grizzly.connector.GrizzlyConnectorProvider;
 import org.glassfish.jersey.logging.LoggingFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
diff --git a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/ParallelTest.java b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/test/ParallelTest.java
similarity index 96%
rename from connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/ParallelTest.java
rename to connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/test/ParallelTest.java
index 1987d91..2cc0971 100644
--- a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/ParallelTest.java
+++ b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/test/ParallelTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2024 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.grizzly.connector;
+package org.glassfish.jersey.grizzly.connector.test;
 
 import java.util.concurrent.BrokenBarrierException;
 import java.util.concurrent.CountDownLatch;
@@ -34,6 +34,7 @@
 import jakarta.ws.rs.core.Response;
 
 import org.glassfish.jersey.client.ClientConfig;
+import org.glassfish.jersey.grizzly.connector.GrizzlyConnectorProvider;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
diff --git a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/TimeoutTest.java b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/test/TimeoutTest.java
similarity index 93%
rename from connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/TimeoutTest.java
rename to connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/test/TimeoutTest.java
index 5066426..6f5f543 100644
--- a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/TimeoutTest.java
+++ b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/test/TimeoutTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2024 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.grizzly.connector;
+package org.glassfish.jersey.grizzly.connector.test;
 
 import java.util.concurrent.TimeoutException;
 
@@ -26,6 +26,7 @@
 
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.client.ClientProperties;
+import org.glassfish.jersey.grizzly.connector.GrizzlyConnectorProvider;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
diff --git a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/TraceSupportTest.java b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/test/TraceSupportTest.java
similarity index 97%
rename from connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/TraceSupportTest.java
rename to connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/test/TraceSupportTest.java
index 2a3fb44..36158a1 100644
--- a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/TraceSupportTest.java
+++ b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/test/TraceSupportTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2024 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.grizzly.connector;
+package org.glassfish.jersey.grizzly.connector.test;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
@@ -38,6 +38,7 @@
 import jakarta.ws.rs.core.Response;
 
 import org.glassfish.jersey.client.ClientConfig;
+import org.glassfish.jersey.grizzly.connector.GrizzlyConnectorProvider;
 import org.glassfish.jersey.logging.LoggingFeature;
 import org.glassfish.jersey.process.Inflector;
 import org.glassfish.jersey.server.ContainerRequest;
diff --git a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/UnderlyingHttpClientAccessTest.java b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/test/UnderlyingHttpClientAccessTest.java
similarity index 92%
rename from connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/UnderlyingHttpClientAccessTest.java
rename to connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/test/UnderlyingHttpClientAccessTest.java
index 031baaa..59ef586 100644
--- a/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/UnderlyingHttpClientAccessTest.java
+++ b/connectors/grizzly-connector/src/test/java/org/glassfish/jersey/grizzly/connector/test/UnderlyingHttpClientAccessTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2024 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.grizzly.connector;
+package org.glassfish.jersey.grizzly.connector.test;
 
 import jakarta.ws.rs.client.Client;
 import jakarta.ws.rs.client.ClientBuilder;
@@ -22,6 +22,7 @@
 
 import org.glassfish.jersey.client.ClientConfig;
 
+import org.glassfish.jersey.grizzly.connector.GrizzlyConnectorProvider;
 import org.junit.jupiter.api.Test;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertSame;
diff --git a/connectors/helidon-connector/pom.xml b/connectors/helidon-connector/pom.xml
index c559328..34f9bf6 100644
--- a/connectors/helidon-connector/pom.xml
+++ b/connectors/helidon-connector/pom.xml
@@ -36,13 +36,14 @@
         <java17.sourceDirectory>${project.basedir}/src/main/java17</java17.sourceDirectory>
         <java21.build.outputDirectory>${project.basedir}/target21</java21.build.outputDirectory>
         <java21.sourceDirectory>${project.basedir}/src/main/java21</java21.sourceDirectory>
+        <javadoc.skip>${maven.javadoc.skip}</javadoc.skip>
     </properties>
 
     <dependencies>
         <dependency>
             <groupId>io.helidon.jersey</groupId>
             <artifactId>helidon-jersey-connector</artifactId>
-            <version>${helidon.jersey.connector.version}</version>
+            <version>${helidon.connector.version}</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
@@ -80,8 +81,7 @@
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <configuration>
-                    <source>8</source>
-                   <detectJavaApiLink>false</detectJavaApiLink>
+                    <skip>${javadoc.skip}</skip>
                </configuration>
             </plugin>
         </plugins>
@@ -93,6 +93,9 @@
             <activation>
                 <jdk>[17,21)</jdk>
             </activation>
+            <properties>
+                <javadoc.skip>true</javadoc.skip>
+            </properties>
             <build>
                 <directory>${java17.build.outputDirectory}</directory>
                 <plugins>
diff --git a/connectors/jdk-connector/pom.xml b/connectors/jdk-connector/pom.xml
index bb03b90..e700c90 100644
--- a/connectors/jdk-connector/pom.xml
+++ b/connectors/jdk-connector/pom.xml
@@ -54,6 +54,13 @@
         </dependency>
 
         <dependency>
+            <groupId>jakarta.activation</groupId>
+            <artifactId>jakarta.activation-api</artifactId>
+            <scope>provided</scope>
+            <optional>true</optional>
+        </dependency>
+
+        <dependency>
             <groupId>org.junit.jupiter</groupId>
             <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
diff --git a/connectors/jdk-connector/src/main/java/module-info.java b/connectors/jdk-connector/src/main/java/module-info.java
new file mode 100644
index 0000000..199b09b
--- /dev/null
+++ b/connectors/jdk-connector/src/main/java/module-info.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2022 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.jdk.connector {
+    requires java.logging;
+
+    requires jakarta.ws.rs;
+    requires static jakarta.activation;
+
+    requires osgi.resource.locator;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.client;
+
+    exports org.glassfish.jersey.jdk.connector;
+    exports org.glassfish.jersey.jdk.connector.internal;
+}
\ No newline at end of file
diff --git a/connectors/jdk-connector/src/test/java/module-info.java b/connectors/jdk-connector/src/test/java/module-info.java
new file mode 100644
index 0000000..b5650fd
--- /dev/null
+++ b/connectors/jdk-connector/src/test/java/module-info.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2023 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.jdk.connector {
+    requires java.logging;
+
+    requires jakarta.ws.rs;
+    requires static jakarta.activation;
+
+    requires osgi.resource.locator;
+
+    requires org.junit.jupiter.api;
+    requires org.junit.jupiter.engine;
+
+    requires org.glassfish.grizzly.http;
+    requires org.glassfish.grizzly.http.server;
+
+    requires org.glassfish.jersey.tests.framework.core;
+    requires org.glassfish.jersey.tests.framework.provider.grizzly;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.core.server;
+
+    exports org.glassfish.jersey.jdk.connector;
+    exports org.glassfish.jersey.jdk.connector.internal;
+}
\ No newline at end of file
diff --git a/connectors/jetty-connector/pom.xml b/connectors/jetty-connector/pom.xml
index db6175a..5924fda 100644
--- a/connectors/jetty-connector/pom.xml
+++ b/connectors/jetty-connector/pom.xml
@@ -34,6 +34,9 @@
 
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <surefire.coverage.argline>
+            --add-modules=ALL-MODULE-PATH
+        </surefire.coverage.argline>
     </properties>
 
     <dependencies>
@@ -47,7 +50,6 @@
                 </exclusion>
             </exclusions>
         </dependency>
-
         <dependency>
             <groupId>org.glassfish.jersey.media</groupId>
             <artifactId>jersey-media-jaxb</artifactId>
@@ -64,12 +66,24 @@
             <groupId>org.glassfish.jersey.media</groupId>
             <artifactId>jersey-media-json-jackson</artifactId>
             <version>${project.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>jakarta.servlet</groupId>
+                    <artifactId>jakarta.servlet-api</artifactId>
+                </exclusion>
+            </exclusions>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.glassfish.jersey.test-framework.providers</groupId>
             <artifactId>jersey-test-framework-provider-jetty</artifactId>
             <version>${project.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>jakarta.servlet</groupId>
+                    <artifactId>jakarta.servlet-api</artifactId>
+                </exclusion>
+            </exclusions>
             <scope>test</scope>
         </dependency>
         <dependency>
@@ -82,6 +96,17 @@
             <artifactId>jaxb-osgi</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty.toolchain</groupId>
+            <artifactId>jetty-jakarta-servlet-api</artifactId>
+            <version>${jetty.servlet.api.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <version>${slf4j.version}</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/connectors/jetty-connector/src/main/java/module-info.java b/connectors/jetty-connector/src/main/java/module-info.java
new file mode 100644
index 0000000..41d7d8c
--- /dev/null
+++ b/connectors/jetty-connector/src/main/java/module-info.java
@@ -0,0 +1,33 @@
+/*
+ * 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.jetty.connector {
+    requires java.logging;
+    requires org.slf4j;
+
+    requires jakarta.ws.rs;
+
+    requires org.eclipse.jetty.client;
+    requires org.eclipse.jetty.http;
+    requires org.eclipse.jetty.io;
+    requires org.eclipse.jetty.util;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.client;
+
+    exports org.glassfish.jersey.jetty.connector;
+    opens org.glassfish.jersey.jetty.connector;
+}
\ No newline at end of file
diff --git a/connectors/jetty-connector/src/test/java/module-info.java b/connectors/jetty-connector/src/test/java/module-info.java
new file mode 100644
index 0000000..e67eb51
--- /dev/null
+++ b/connectors/jetty-connector/src/test/java/module-info.java
@@ -0,0 +1,43 @@
+/*
+ * 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
+ * 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.jetty.connector {
+    requires java.logging;
+
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+
+    requires org.eclipse.jetty.server;
+    requires org.eclipse.jetty.client;
+    requires org.eclipse.jetty.http;
+    requires org.eclipse.jetty.io;
+    requires org.eclipse.jetty.util;
+
+    requires org.junit.jupiter.api;
+    requires org.junit.jupiter.engine;
+    requires org.hamcrest;
+
+    requires jakarta.xml.bind;
+
+    requires org.glassfish.jersey.tests.framework.core;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.core.server;
+
+    exports org.glassfish.jersey.jetty.connector;
+    opens org.glassfish.jersey.jetty.connector;
+}
\ No newline at end of file
diff --git a/connectors/jetty-http2-connector/pom.xml b/connectors/jetty-http2-connector/pom.xml
index 117c730..bcced89 100644
--- a/connectors/jetty-http2-connector/pom.xml
+++ b/connectors/jetty-http2-connector/pom.xml
@@ -40,6 +40,12 @@
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-client</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>slf4j-api</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
diff --git a/connectors/jetty-http2-connector/src/main/java/module-info.java b/connectors/jetty-http2-connector/src/main/java/module-info.java
new file mode 100644
index 0000000..942d478
--- /dev/null
+++ b/connectors/jetty-http2-connector/src/main/java/module-info.java
@@ -0,0 +1,31 @@
+/*
+ * 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
+ * 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.jetty.http2.connector {
+
+    requires jakarta.ws.rs;
+
+    requires org.eclipse.jetty.client;
+    requires org.eclipse.jetty.http2.client;
+    requires org.eclipse.jetty.http2.client.transport;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.jetty.connector;
+
+    exports org.glassfish.jersey.jetty.http2.connector;
+    opens org.glassfish.jersey.jetty.http2.connector;
+}
\ 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
new file mode 100644
index 0000000..5453358
--- /dev/null
+++ b/connectors/jetty-http2-connector/src/test/java/module-info.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2023 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.jetty.http2.connector {
+
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+    requires jakarta.xml.bind;
+
+    requires java.logging;
+
+    requires org.eclipse.jetty.client;
+    requires org.eclipse.jetty.http2.client;
+    requires org.eclipse.jetty.http2.client.transport;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.jetty.connector;
+
+    requires org.junit.jupiter.api;
+    requires org.hamcrest;
+
+    requires org.glassfish.jersey.tests.framework.core;
+
+    exports org.glassfish.jersey.jetty.http2.connector;
+    opens org.glassfish.jersey.jetty.http2.connector;
+}
\ No newline at end of file
diff --git a/connectors/jetty11-connector/src/main/java/module-info.java b/connectors/jetty11-connector/src/main/java/module-info.java
new file mode 100644
index 0000000..62dbbb8
--- /dev/null
+++ b/connectors/jetty11-connector/src/main/java/module-info.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2023 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.jetty11.connector {
+    requires java.logging;
+
+    requires jakarta.ws.rs;
+
+    requires org.eclipse.jetty.client;
+    requires org.eclipse.jetty.http;
+    requires org.eclipse.jetty.io;
+    requires org.eclipse.jetty.util;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.client;
+
+    exports org.glassfish.jersey.jetty.connector;
+    opens org.glassfish.jersey.jetty.connector;
+}
\ No newline at end of file
diff --git a/connectors/jetty11-connector/src/test/java/module-info.java b/connectors/jetty11-connector/src/test/java/module-info.java
new file mode 100644
index 0000000..eb47e83
--- /dev/null
+++ b/connectors/jetty11-connector/src/test/java/module-info.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2023 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.jetty11.connector {
+    requires java.logging;
+
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+
+    requires org.eclipse.jetty.client;
+//    requires org.eclipse.jetty.server;
+    requires org.eclipse.jetty.http;
+    requires org.eclipse.jetty.io;
+    requires org.eclipse.jetty.util;
+
+    requires org.junit.jupiter.api;
+    requires org.junit.jupiter.engine;
+    requires org.hamcrest;
+
+    requires jakarta.xml.bind;
+
+    requires org.glassfish.jersey.tests.framework.core;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.core.server;
+
+    exports org.glassfish.jersey.jetty.connector;
+    opens org.glassfish.jersey.jetty.connector;
+}
\ No newline at end of file
diff --git a/connectors/netty-connector/pom.xml b/connectors/netty-connector/pom.xml
index 9077fc1..5a40f3a 100644
--- a/connectors/netty-connector/pom.xml
+++ b/connectors/netty-connector/pom.xml
@@ -34,6 +34,15 @@
 
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <surefire.coverage.argline>
+            --add-opens org.glassfish.jersey.core.common/org.glassfish.jersey.innate=ALL-UNNAMED
+            --add-opens org.glassfish.jersey.core.common/org.glassfish.jersey.innate.inject=ALL-UNNAMED
+            --add-opens org.glassfish.jersey.core.common/org.glassfish.jersey.innate.virtual=ALL-UNNAMED
+            --add-opens java.base/java.lang=org.glassfish.jersey.netty.connector
+            --add-opens java.base/java.lang.reflect=org.glassfish.jersey.netty.connector
+            --add-exports org.glassfish.jersey.core.common/org.glassfish.jersey.innate=ALL-UNNAMED
+            --add-modules=ALL-MODULE-PATH
+        </surefire.coverage.argline>
     </properties>
 
     <dependencies>
@@ -50,11 +59,22 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.glassfish.jersey.core</groupId>
+            <artifactId>jersey-server</artifactId>
+            <version>${project.version}</version>
+<!--            <scope>test</scope>-->
+        </dependency>
+        <dependency>
             <groupId>org.glassfish.jersey.test-framework.providers</groupId>
             <artifactId>jersey-test-framework-provider-jetty</artifactId>
             <version>${project.version}</version>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
@@ -101,24 +121,5 @@
                 </plugins>
             </build>
         </profile>
-        <profile>
-            <id>InaccessibleObjectException</id>
-            <activation><jdk>[12,)</jdk></activation>
-            <build>
-                <plugins>
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-surefire-plugin</artifactId>
-                        <configuration>
-                            <argLine>
-                                --add-opens java.base/java.lang=ALL-UNNAMED
-                                --add-opens java.base/java.lang.reflect=ALL-UNNAMED
-                            </argLine>
-                        </configuration>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
     </profiles>
-
 </project>
diff --git a/connectors/netty-connector/src/main/java/module-info.java b/connectors/netty-connector/src/main/java/module-info.java
new file mode 100644
index 0000000..0556416
--- /dev/null
+++ b/connectors/netty-connector/src/main/java/module-info.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2022, 2023 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.netty.connector {
+    requires java.logging;
+
+    requires jakarta.ws.rs;
+    requires jakarta.inject;
+
+    requires io.netty.all;
+    requires io.netty.buffer;
+    requires io.netty.handler;
+    requires io.netty.handler.proxy;
+    requires io.netty.codec;
+    requires io.netty.codec.http;
+    requires io.netty.codec.http2;
+    requires io.netty.common;
+    requires io.netty.resolver;
+    requires io.netty.transport;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.core.server;
+
+    exports org.glassfish.jersey.netty.connector;
+    exports org.glassfish.jersey.netty.connector.internal;
+}
\ No newline at end of file
diff --git a/connectors/netty-connector/src/main/java/org/glassfish/jersey/netty/connector/JerseyClientHandler.java b/connectors/netty-connector/src/main/java/org/glassfish/jersey/netty/connector/JerseyClientHandler.java
index e9d55c1..398fd2e 100644
--- a/connectors/netty-connector/src/main/java/org/glassfish/jersey/netty/connector/JerseyClientHandler.java
+++ b/connectors/netty-connector/src/main/java/org/glassfish/jersey/netty/connector/JerseyClientHandler.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2024 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 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,6 @@
 
 package org.glassfish.jersey.netty.connector;
 
-import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.net.URI;
 import java.util.Iterator;
diff --git a/containers/glassfish/jersey-gf-ejb/pom.xml b/containers/glassfish/jersey-gf-ejb/pom.xml
index 1f6d5ea..69b559e 100644
--- a/containers/glassfish/jersey-gf-ejb/pom.xml
+++ b/containers/glassfish/jersey-gf-ejb/pom.xml
@@ -63,6 +63,12 @@
         </dependency>
         <!-- TODO remove versions when org.glassfish.exousia:exousia:jar in central-->
         <dependency>
+            <groupId>org.glassfish.jersey.inject</groupId>
+            <artifactId>jersey-hk2</artifactId>
+            <version>${project.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
             <groupId>org.glassfish.main.ejb</groupId>
             <artifactId>ejb-container</artifactId>
             <version>6.0.0</version>
@@ -131,4 +137,4 @@
             </plugin>
         </plugins>
     </build>
- </project>
+ </project>
\ No newline at end of file
diff --git a/containers/glassfish/jersey-gf-ejb/src/main/java/module-info.java b/containers/glassfish/jersey-gf-ejb/src/main/java/module-info.java
new file mode 100644
index 0000000..36588dd
--- /dev/null
+++ b/containers/glassfish/jersey-gf-ejb/src/main/java/module-info.java
@@ -0,0 +1,43 @@
+/*
+ * 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.gf.ejb {
+    requires java.logging;
+    requires java.naming;
+
+    requires jakarta.ws.rs;
+    requires static jakarta.activation;
+    requires jakarta.annotation;
+    requires jakarta.ejb;
+    requires jakarta.inject;
+    requires jakarta.interceptor;
+
+    requires ejb.container;
+    requires internal.api;
+    requires config.api;
+
+    requires org.glassfish.hk2.api;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.ext.cdi1x;
+    requires org.glassfish.jersey.inject.hk2;
+
+
+    exports org.glassfish.jersey.gf.ejb.internal;
+    opens org.glassfish.jersey.gf.ejb.internal;
+}
\ No newline at end of file
diff --git a/containers/grizzly2-http/pom.xml b/containers/grizzly2-http/pom.xml
index ce02aaa..9bfdaac 100644
--- a/containers/grizzly2-http/pom.xml
+++ b/containers/grizzly2-http/pom.xml
@@ -47,6 +47,12 @@
             <artifactId>jakarta.inject-api</artifactId>
         </dependency>
         <dependency>
+            <groupId>jakarta.xml.bind</groupId>
+            <artifactId>jakarta.xml.bind-api</artifactId>
+            <optional>true</optional>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
             <groupId>org.glassfish.grizzly</groupId>
             <artifactId>grizzly-http-server</artifactId>
         </dependency>
@@ -66,7 +72,6 @@
             <artifactId>grizzly-npn-api</artifactId>
             <scope>test</scope>
         </dependency>
-
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-client</artifactId>
@@ -92,6 +97,22 @@
     </dependencies>
 
     <build>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <artifactId>maven-compiler-plugin</artifactId>
+                    <executions>
+                        <execution>
+                            <id>default-testCompile</id>
+                            <configuration>
+                                <source>11</source>
+                                <target>11</target>
+                            </configuration>
+                        </execution>
+                    </executions>
+                </plugin>
+            </plugins>
+        </pluginManagement>
         <plugins>
             <plugin>
                 <groupId>com.sun.istack</groupId>
@@ -146,4 +167,4 @@
             </plugin>
         </plugins>
     </build>
-</project>
+</project>
\ No newline at end of file
diff --git a/containers/grizzly2-http/src/main/java/module-info.java b/containers/grizzly2-http/src/main/java/module-info.java
new file mode 100644
index 0000000..26ba080
--- /dev/null
+++ b/containers/grizzly2-http/src/main/java/module-info.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2022, 2023 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.container.grizzly2.http {
+    requires java.logging;
+    requires java.net.http;
+
+    requires jakarta.ws.rs;
+    requires jakarta.inject;
+    requires static jakarta.xml.bind;
+
+    requires org.glassfish.grizzly;
+    requires org.glassfish.grizzly.http.server;
+    requires org.glassfish.grizzly.http;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+
+    exports org.glassfish.jersey.grizzly2.httpserver;
+    opens org.glassfish.jersey.grizzly2.httpserver;
+
+}
\ No newline at end of file
diff --git a/containers/grizzly2-http/src/test/java/module-info.java b/containers/grizzly2-http/src/test/java/module-info.java
new file mode 100644
index 0000000..bf57de9
--- /dev/null
+++ b/containers/grizzly2-http/src/test/java/module-info.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2022, 2023 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.container.grizzly2.http {
+
+    requires java.net.http;
+    requires java.logging;
+
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+
+    requires org.eclipse.jetty.http2.client;
+    requires org.eclipse.jetty.http2.client.transport;
+
+    requires org.bouncycastle.provider;
+    requires org.bouncycastle.pkix;
+    requires org.eclipse.jetty.client;
+    requires org.hamcrest;
+    requires org.junit.jupiter.api;
+    requires org.junit.jupiter.engine;
+
+    requires org.glassfish.grizzly.http.server;
+    requires org.glassfish.grizzly;
+    requires org.glassfish.grizzly.http;
+    requires org.glassfish.grizzly.http2;
+
+    requires org.glassfish.hk2.api;
+    requires org.glassfish.hk2.locator;
+
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.inject.hk2;
+
+    exports org.glassfish.jersey.grizzly2.httpserver.test.application
+            to  org.glassfish.jersey.core.server;
+}
\ No newline at end of file
diff --git a/containers/grizzly2-servlet/pom.xml b/containers/grizzly2-servlet/pom.xml
index 4e7f8bd..1f9232b 100644
--- a/containers/grizzly2-servlet/pom.xml
+++ b/containers/grizzly2-servlet/pom.xml
@@ -79,6 +79,6 @@
                     <unpackBundle>true</unpackBundle>
                 </configuration>
              </plugin>
-         </plugins>
+        </plugins>
      </build>
-</project>
+</project>
\ No newline at end of file
diff --git a/containers/grizzly2-servlet/src/main/java/module-info.java b/containers/grizzly2-servlet/src/main/java/module-info.java
new file mode 100644
index 0000000..229f2ac
--- /dev/null
+++ b/containers/grizzly2-servlet/src/main/java/module-info.java
@@ -0,0 +1,30 @@
+/*
+ * 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.container.grizzly2.servlet {
+    requires jakarta.ws.rs;
+    requires jakarta.servlet;
+
+    requires org.glassfish.grizzly.servlet;
+    requires org.glassfish.grizzly.http.server;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.container.servlet.core;
+    requires org.glassfish.jersey.container.grizzly2.http;
+
+    exports org.glassfish.jersey.grizzly2.servlet;
+}
\ No newline at end of file
diff --git a/containers/jdk-http/pom.xml b/containers/jdk-http/pom.xml
index 2038638..26c6214 100644
--- a/containers/jdk-http/pom.xml
+++ b/containers/jdk-http/pom.xml
@@ -44,6 +44,12 @@
             <artifactId>hamcrest</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>jakarta.xml.bind</groupId>
+            <artifactId>jakarta.xml.bind-api</artifactId>
+            <optional>true</optional>
+            <scope>provided</scope>
+        </dependency>
     </dependencies>
 
     <build>
@@ -84,4 +90,4 @@
         <!-- https://bugs.openjdk.java.net/browse/JDK-8211426 -->
         <surefire.security.argline>-Djdk.tls.client.protocols=TLSv1.2</surefire.security.argline>
     </properties>
-</project>
+</project>
\ No newline at end of file
diff --git a/containers/jdk-http/src/main/java/module-info.java b/containers/jdk-http/src/main/java/module-info.java
new file mode 100644
index 0000000..cccbf13
--- /dev/null
+++ b/containers/jdk-http/src/main/java/module-info.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2022 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.container.jdk.http {
+    requires java.logging;
+
+    requires jdk.httpserver;
+
+    requires jakarta.ws.rs;
+    requires static jakarta.xml.bind;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+
+    exports org.glassfish.jersey.jdkhttp;
+    opens org.glassfish.jersey.jdkhttp;
+    opens org.glassfish.jersey.jdkhttp.internal;
+}
\ No newline at end of file
diff --git a/containers/jdk-http/src/test/java/org/glassfish/jersey/jdkhttp/JdkHttpsServerTest.java b/containers/jdk-http/src/test/java/org/glassfish/jersey/jdkhttp/JdkHttpsServerTest.java
index 2b912d8..51385db 100644
--- a/containers/jdk-http/src/test/java/org/glassfish/jersey/jdkhttp/JdkHttpsServerTest.java
+++ b/containers/jdk-http/src/test/java/org/glassfish/jersey/jdkhttp/JdkHttpsServerTest.java
@@ -55,14 +55,14 @@
  */
 public class JdkHttpsServerTest extends AbstractJdkHttpServerTester {
 
-    private static final String TRUSTSTORE_CLIENT_FILE = "./truststore_client";
+    private static final String TRUSTSTORE_CLIENT_FILE = "truststore_client";
     private static final String TRUSTSTORE_CLIENT_PWD = "asdfgh";
-    private static final String KEYSTORE_CLIENT_FILE = "./keystore_client";
+    private static final String KEYSTORE_CLIENT_FILE = "keystore_client";
     private static final String KEYSTORE_CLIENT_PWD = "asdfgh";
 
-    private static final String KEYSTORE_SERVER_FILE = "./keystore_server";
+    private static final String KEYSTORE_SERVER_FILE = "keystore_server";
     private static final String KEYSTORE_SERVER_PWD = "asdfgh";
-    private static final String TRUSTSTORE_SERVER_FILE = "./truststore_server";
+    private static final String TRUSTSTORE_SERVER_FILE = "truststore_server";
     private static final String TRUSTSTORE_SERVER_PWD = "asdfgh";
 
     private HttpServer server;
@@ -228,4 +228,4 @@
             server = null;
         }
     }
-}
\ No newline at end of file
+}
diff --git a/containers/jersey-servlet-core/pom.xml b/containers/jersey-servlet-core/pom.xml
index 1f4b4c4..f283e96 100644
--- a/containers/jersey-servlet-core/pom.xml
+++ b/containers/jersey-servlet-core/pom.xml
@@ -36,7 +36,7 @@
         <dependency>
             <groupId>jakarta.servlet</groupId>
             <artifactId>jakarta.servlet-api</artifactId>
-            <version>${servlet6.version}</version>
+<!--            <version>${servlet6.version}</version>-->
             <scope>provided</scope>
         </dependency>
         <dependency>
@@ -85,5 +85,11 @@
              </plugin>
          </plugins>
     </build>
+    <properties>
+        <surefire.coverage.argline>
+            --add-reads org.glassfish.jersey.container.servlet.core=ALL-UNNAMED
+            --add-modules=ALL-MODULE-PATH
+        </surefire.coverage.argline>
+    </properties>
 
-</project>
+</project>
\ No newline at end of file
diff --git a/containers/jersey-servlet-core/src/main/java/module-info.java b/containers/jersey-servlet-core/src/main/java/module-info.java
new file mode 100644
index 0000000..37081a7
--- /dev/null
+++ b/containers/jersey-servlet-core/src/main/java/module-info.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2022, 2023 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.container.servlet.core {
+    requires java.logging;
+    requires java.naming;
+
+    requires jakarta.ws.rs;
+    requires jakarta.inject;
+    requires static jakarta.persistence;
+    requires static jakarta.servlet;
+
+    requires osgi.resource.locator;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+
+    exports org.glassfish.jersey.servlet;
+    exports org.glassfish.jersey.servlet.internal;
+    exports org.glassfish.jersey.servlet.internal.spi;
+    exports org.glassfish.jersey.servlet.spi;
+
+    opens org.glassfish.jersey.servlet;
+
+    uses org.glassfish.jersey.servlet.spi.AsyncContextDelegate;
+    uses org.glassfish.jersey.servlet.spi.AsyncContextDelegateProvider;
+    uses org.glassfish.jersey.servlet.spi.FilterUrlMappingsProvider;
+
+    uses org.glassfish.jersey.servlet.internal.spi.ExtendedServletContainerProvider;
+    uses org.glassfish.jersey.servlet.internal.spi.RequestContextProvider;
+    uses org.glassfish.jersey.servlet.internal.spi.RequestScopedInitializerProvider;
+    uses org.glassfish.jersey.servlet.internal.spi.ServletContainerProvider;
+}
\ No newline at end of file
diff --git a/containers/jersey-servlet-core/src/main/java/org/glassfish/jersey/servlet/internal/ResponseWriter.java b/containers/jersey-servlet-core/src/main/java/org/glassfish/jersey/servlet/internal/ResponseWriter.java
index 9876c01..5cf6812 100644
--- a/containers/jersey-servlet-core/src/main/java/org/glassfish/jersey/servlet/internal/ResponseWriter.java
+++ b/containers/jersey-servlet-core/src/main/java/org/glassfish/jersey/servlet/internal/ResponseWriter.java
@@ -308,4 +308,4 @@
             // do not close - let the servlet container close the stream
         }
     }
-}
+}
\ No newline at end of file
diff --git a/containers/jersey-servlet/src/main/java/module-info.java b/containers/jersey-servlet/src/main/java/module-info.java
new file mode 100644
index 0000000..39ece48
--- /dev/null
+++ b/containers/jersey-servlet/src/main/java/module-info.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2022 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.container.servlet {
+    requires java.logging;
+
+    requires jakarta.ws.rs;
+    requires jakarta.servlet;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.container.servlet.core;
+
+    exports org.glassfish.jersey.servlet.async;
+    exports org.glassfish.jersey.servlet.init;
+}
\ No newline at end of file
diff --git a/containers/jetty-http/pom.xml b/containers/jetty-http/pom.xml
index c150333..78f0af1 100644
--- a/containers/jetty-http/pom.xml
+++ b/containers/jetty-http/pom.xml
@@ -72,6 +72,12 @@
             </exclusions>
         </dependency>
         <dependency>
+            <groupId>org.eclipse.jetty.toolchain</groupId>
+            <artifactId>jetty-jakarta-servlet-api</artifactId>
+            <version>${jetty.servlet.api.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
             <groupId>org.apache.httpcomponents.client5</groupId>
             <artifactId>httpclient5</artifactId>
             <scope>test</scope>
diff --git a/containers/jetty-http/src/main/java/module-info.java b/containers/jetty-http/src/main/java/module-info.java
new file mode 100644
index 0000000..0633819
--- /dev/null
+++ b/containers/jetty-http/src/main/java/module-info.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2022, 2023 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.container.jetty.http {
+    requires java.logging;
+
+    requires jakarta.ws.rs;
+    requires jakarta.inject;
+
+    requires org.eclipse.jetty.http;
+    requires org.eclipse.jetty.server;
+    requires org.eclipse.jetty.security;
+    requires org.eclipse.jetty.util;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+
+    exports org.glassfish.jersey.jetty;
+    opens org.glassfish.jersey.jetty;
+}
\ No newline at end of file
diff --git a/containers/jetty-http2/src/main/java/module-info.java b/containers/jetty-http2/src/main/java/module-info.java
new file mode 100644
index 0000000..1425822
--- /dev/null
+++ b/containers/jetty-http2/src/main/java/module-info.java
@@ -0,0 +1,30 @@
+/*
+ * 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.container.jetty.http2 {
+
+    requires jakarta.ws.rs;
+
+    requires org.eclipse.jetty.http2.server;
+    requires org.eclipse.jetty.alpn.server;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.container.jetty.http;
+
+    exports org.glassfish.jersey.jetty.http2;
+    opens org.glassfish.jersey.jetty.http2;
+}
\ No newline at end of file
diff --git a/containers/jetty-http2/src/main/java/org/glassfish/jersey/jetty/http2/JettyHttp2ContainerProvider.java b/containers/jetty-http2/src/main/java/org/glassfish/jersey/jetty/http2/JettyHttp2ContainerProvider.java
index e0e5ec7..6880187 100644
--- a/containers/jetty-http2/src/main/java/org/glassfish/jersey/jetty/http2/JettyHttp2ContainerProvider.java
+++ b/containers/jetty-http2/src/main/java/org/glassfish/jersey/jetty/http2/JettyHttp2ContainerProvider.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2023, 2024 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
@@ -19,7 +19,6 @@
 import org.glassfish.jersey.internal.util.JdkVersion;
 import org.glassfish.jersey.jetty.JettyHttpContainer;
 import org.glassfish.jersey.jetty.JettyHttpContainerProvider;
-import org.glassfish.jersey.jetty.internal.LocalizationMessages;
 import org.glassfish.jersey.server.spi.ContainerProvider;
 
 import jakarta.ws.rs.ProcessingException;
diff --git a/containers/jetty-http2/src/test/java/module-info.java b/containers/jetty-http2/src/test/java/module-info.java
new file mode 100644
index 0000000..d8f20dd
--- /dev/null
+++ b/containers/jetty-http2/src/test/java/module-info.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2022, 2023 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.container.jetty.http2 {
+    requires java.logging;
+
+    requires jakarta.ws.rs;
+
+    requires org.eclipse.jetty.http2.server;
+    requires org.eclipse.jetty.alpn.server;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.container.jetty.http;
+
+    requires org.junit.jupiter.api;
+    requires org.hamcrest;
+
+    exports org.glassfish.jersey.jetty.http2;
+    opens org.glassfish.jersey.jetty.http2;
+}
\ No newline at end of file
diff --git a/containers/jetty-servlet/src/main/java/module-info.txt b/containers/jetty-servlet/src/main/java/module-info.txt
new file mode 100644
index 0000000..271084c
--- /dev/null
+++ b/containers/jetty-servlet/src/main/java/module-info.txt
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2022 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.container.jetty.servlet {
+
+    requires jakarta.ws.rs;
+//    requires jakarta.servlet; //taken from jetty.servlet.api which is part of jetty server
+
+    requires org.eclipse.jetty.http;
+    requires org.eclipse.jetty.server;
+    requires org.eclipse.jetty.util;
+    requires org.eclipse.jetty.webapp;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.container.jetty.http;
+    requires static org.glassfish.jersey.container.servlet.core;
+
+    exports org.glassfish.jersey.jetty.servlet;
+}
\ No newline at end of file
diff --git a/containers/netty-http/pom.xml b/containers/netty-http/pom.xml
index 71808de..e98791e 100644
--- a/containers/netty-http/pom.xml
+++ b/containers/netty-http/pom.xml
@@ -47,6 +47,12 @@
             <artifactId>hamcrest</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>jakarta.xml.bind</groupId>
+            <artifactId>jakarta.xml.bind-api</artifactId>
+            <scope>provided</scope>
+            <optional>true</optional>
+        </dependency>
     </dependencies>
 
     <build>
@@ -69,4 +75,4 @@
         </plugins>
     </build>
 
-</project>
+</project>
\ No newline at end of file
diff --git a/containers/netty-http/src/main/java/module-info.java b/containers/netty-http/src/main/java/module-info.java
new file mode 100644
index 0000000..1206d4e
--- /dev/null
+++ b/containers/netty-http/src/main/java/module-info.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2022 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.container.netty.servlet {
+    requires java.logging;
+    requires jakarta.ws.rs;
+    requires io.netty.all;
+
+    requires static jakarta.xml.bind;
+
+    requires org.glassfish.jersey.netty.connector;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.core.common;
+
+    exports org.glassfish.jersey.netty.httpserver;
+    opens org.glassfish.jersey.netty.httpserver;
+}
\ No newline at end of file
diff --git a/containers/simple-http/src/main/java/module-info.java b/containers/simple-http/src/main/java/module-info.java
new file mode 100644
index 0000000..92611df
--- /dev/null
+++ b/containers/simple-http/src/main/java/module-info.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2022 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.container.simple.http {
+    requires java.logging;
+
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+
+    requires static jakarta.xml.bind;
+
+    requires simple.common;
+    requires simple.http;
+    requires simple.transport;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+
+    exports org.glassfish.jersey.simple;
+    opens org.glassfish.jersey.simple;
+}
\ No newline at end of file
diff --git a/core-client/pom.xml b/core-client/pom.xml
index 66818f8..cf4d1a6 100644
--- a/core-client/pom.xml
+++ b/core-client/pom.xml
@@ -33,6 +33,16 @@
 
     <description>Jersey core client implementation</description>
 
+    <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.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>
+
     <build>
         <plugins>
             <plugin>
@@ -41,24 +51,36 @@
                 <inherited>true</inherited>
             </plugin>
             <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>build-helper-maven-plugin</artifactId>
-                <inherited>true</inherited>
-            </plugin>
-            <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-compiler-plugin</artifactId>
-                <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>
+                <executions>
+                    <execution>
+                        <id>default-compile</id>
+                        <goals>
+                            <goal>compile</goal>
+                        </goals>
+                        <configuration>
+                            <source>${java.version}</source>
+                            <target>${java.version}</target>
+                            <compilerArguments>
+                                <!-- Do not warn about using sun.misc.Unsafe -->
+                                <XDignore.symbol.file/>
+                            </compilerArguments>
+                        </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>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
@@ -68,6 +90,7 @@
                     <parallel>classesAndMethods</parallel>
                     <perCoreThreadCount>true</perCoreThreadCount>
                     <threadCount>1</threadCount>
+                    <forkCount>0</forkCount>
                 </configuration>
             </plugin>
 
@@ -119,6 +142,19 @@
             <artifactId>jakarta.inject-api</artifactId>
         </dependency>
 
+<!--
+        <dependency>
+            <groupId>jakarta.xml.bind</groupId>
+            <artifactId>jakarta.xml.bind-api</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>jakarta.annotation</groupId>
+            <artifactId>jakarta.annotation-api</artifactId>
+        </dependency>
+-->
+
         <dependency>
             <!-- not to warn about missing activation -->
             <groupId>org.eclipse.angus</groupId>
diff --git a/core-client/src/main/java/module-info.java b/core-client/src/main/java/module-info.java
new file mode 100644
index 0000000..7b945a0
--- /dev/null
+++ b/core-client/src/main/java/module-info.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2022, 2024 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.core.client {
+    requires jakarta.annotation;
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+
+    requires java.logging;
+
+    requires org.glassfish.jersey.core.common;
+
+    exports org.glassfish.jersey.client;
+    exports org.glassfish.jersey.client.authentication;
+    exports org.glassfish.jersey.client.filter;
+    exports org.glassfish.jersey.client.http;
+    exports org.glassfish.jersey.client.inject;
+    exports org.glassfish.jersey.client.spi;
+    exports org.glassfish.jersey.client.internal;
+
+    exports org.glassfish.jersey.client.innate to
+            org.glassfish.jersey.apache.connector,
+            org.glassfish.jersey.apache5.connector,
+            org.glassfish.jersey.netty.connector,
+            org.glassfish.jersey.grizzly.connector,
+            org.glassfish.jersey.jetty11.connector,
+            org.glassfish.jersey.jetty.connector;
+
+    exports org.glassfish.jersey.client.innate.http to
+            org.glassfish.jersey.apache.connector,
+            org.glassfish.jersey.apache5.connector,
+            org.glassfish.jersey.netty.connector,
+            org.glassfish.jersey.grizzly.connector,
+            org.glassfish.jersey.jetty.connector,
+            org.glassfish.jersey.jdk.connector;
+
+    exports org.glassfish.jersey.client.innate.inject to
+            org.glassfish.jersey.incubator.injectless.client;
+
+    opens org.glassfish.jersey.client;
+    opens org.glassfish.jersey.client.spi;
+    opens org.glassfish.jersey.client.filter;
+
+    // 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;
+}
\ No newline at end of file
diff --git a/core-client/src/main/java/org/glassfish/jersey/client/RequestProcessingInitializationStage.java b/core-client/src/main/java/org/glassfish/jersey/client/RequestProcessingInitializationStage.java
index 0b9da83..1ac6b75 100644
--- a/core-client/src/main/java/org/glassfish/jersey/client/RequestProcessingInitializationStage.java
+++ b/core-client/src/main/java/org/glassfish/jersey/client/RequestProcessingInitializationStage.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2024 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,9 @@
 
 package org.glassfish.jersey.client;
 
+import java.util.Collection;
 import java.util.Collections;
+import java.util.Iterator;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.StreamSupport;
@@ -26,6 +28,7 @@
 
 import jakarta.inject.Provider;
 
+import org.glassfish.jersey.innate.spi.MessageBodyWorkersSettable;
 import org.glassfish.jersey.internal.inject.InjectionManager;
 import org.glassfish.jersey.internal.inject.Providers;
 import org.glassfish.jersey.internal.util.collection.Ref;
@@ -80,6 +83,21 @@
         requestContext.setWriterInterceptors(writerInterceptors);
         requestContext.setReaderInterceptors(readerInterceptors);
 
+        if (requestContext.getEntity() != null) {
+            setWorkers(requestContext.getEntity());
+        }
+
         return requestContext;
     }
+
+    private void setWorkers(Object entity) {
+        if (MessageBodyWorkersSettable.class.isInstance(entity)) {
+            ((MessageBodyWorkersSettable) entity).setMessageBodyWorkers(workersProvider);
+        } else if (Collection.class.isInstance(entity)) {
+            Iterator it = ((Collection) entity).iterator();
+            while (it.hasNext()) {
+                setWorkers(it.next());
+            }
+        }
+    }
 }
diff --git a/core-common/pom.xml b/core-common/pom.xml
index cfedaba..b4e0ca8 100644
--- a/core-common/pom.xml
+++ b/core-common/pom.xml
@@ -71,10 +71,10 @@
         </resources>
 
         <testResources>
-          <testResource>
-            <directory>${basedir}/src/test/resources</directory>
-            <filtering>true</filtering>
-          </testResource>
+            <testResource>
+                <directory>${basedir}/src/test/resources</directory>
+                <filtering>true</filtering>
+            </testResource>
         </testResources>
 
         <plugins>
@@ -226,6 +226,13 @@
             <groupId>org.osgi</groupId>
             <artifactId>org.osgi.core</artifactId>
             <scope>provided</scope>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>jakarta.xml.bind</groupId>
+            <artifactId>jakarta.xml.bind-api</artifactId>
+            <scope>provided</scope>
+            <optional>true</optional>
         </dependency>
         <dependency>
             <groupId>jakarta.inject</groupId>
@@ -467,6 +474,10 @@
         <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
new file mode 100644
index 0000000..d7a0f4d
--- /dev/null
+++ b/core-common/src/main/java/module-info.java
@@ -0,0 +1,120 @@
+/*
+ * 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.core.common {
+    requires jakarta.ws.rs;
+    requires jakarta.inject;
+    requires static jakarta.xml.bind;
+    requires static jakarta.activation;
+    requires jakarta.annotation;
+    requires java.logging;
+    requires static java.desktop;
+
+    // Filename-based auto-modules
+    requires static org.osgi.core;
+    requires static osgi.resource.locator;
+
+    // Exports rather all, which corresponds to previous state without module-info
+    exports org.glassfish.jersey;
+    exports org.glassfish.jersey.http;
+    exports org.glassfish.jersey.internal;
+    exports org.glassfish.jersey.internal.config;
+    exports org.glassfish.jersey.internal.guava;
+    exports org.glassfish.jersey.internal.inject;
+    exports org.glassfish.jersey.internal.l10n;
+    exports org.glassfish.jersey.internal.sonar;
+    exports org.glassfish.jersey.internal.spi;
+    exports org.glassfish.jersey.internal.routing;
+    exports org.glassfish.jersey.internal.util;
+    exports org.glassfish.jersey.internal.util.collection;
+    exports org.glassfish.jersey.logging;
+    exports org.glassfish.jersey.message;
+    exports org.glassfish.jersey.message.internal;
+    exports org.glassfish.jersey.model;
+    exports org.glassfish.jersey.model.internal;
+    exports org.glassfish.jersey.model.internal.spi;
+    exports org.glassfish.jersey.process;
+    exports org.glassfish.jersey.process.internal;
+    exports org.glassfish.jersey.spi;
+    exports org.glassfish.jersey.uri;
+    exports org.glassfish.jersey.uri.internal;
+
+
+    exports org.glassfish.jersey.innate to org.glassfish.jersey.core.client,org.glassfish.jersey.core.server,
+                                           org.glassfish.jersey.container.grizzly2.http,
+                                           org.glassfish.jersey.container.servlet.core,
+                                           org.glassfish.jersey.container.jetty.http,
+                                           org.glassfish.jersey.netty.connector,
+                                           org.glassfish.jersey.ext.mp.rest.client;
+    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.core,
+                                                  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.mvc,
+                                                  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,
+                                                   org.glassfish.jersey.ext.mp.rest.client;
+
+    opens org.glassfish.jersey.innate.virtual to org.glassfish.jersey.container.grizzly2.http,
+                                                 org.glassfish.jersey.container.jetty.http;
+    opens org.glassfish.jersey.innate to org.glassfish.jersey.container.servlet.core;
+
+    exports org.glassfish.jersey.innate.io to org.glassfish.jersey.core.server,
+                                              org.glassfish.jersey.container.servlet.core,
+                                              org.glassfish.jersey.apache5.connector,
+                                              org.glassfish.jersey.apache.connector;
+    exports org.glassfish.jersey.innate.spi to org.glassfish.jersey.core.client,
+                                               org.glassfish.jersey.media.multipart;
+    exports org.glassfish.jersey.innate.inject.spi to org.glassfish.jersey.inject.hk2;
+
+    opens org.glassfish.jersey.innate.spi to org.glassfish.jersey.media.multipart;
+    opens org.glassfish.jersey.internal;
+    opens org.glassfish.jersey.message.internal;
+    opens org.glassfish.jersey.spi;
+
+    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;
+    uses org.glassfish.jersey.model.internal.spi.ParameterServiceProvider;
+    uses org.glassfish.jersey.spi.HeaderDelegateProvider;
+    uses org.glassfish.jersey.spi.ExternalConfigurationProvider;
+    uses org.glassfish.jersey.spi.ComponentProvider;
+
+    provides jakarta.ws.rs.ext.RuntimeDelegate
+            with org.glassfish.jersey.internal.RuntimeDelegateImpl;
+    provides org.glassfish.jersey.internal.spi.AutoDiscoverable
+            with org.glassfish.jersey.logging.LoggingFeatureAutoDiscoverable;
+}
\ No newline at end of file
diff --git a/core-common/src/main/java/org/glassfish/jersey/innate/spi/MessageBodyWorkersSettable.java b/core-common/src/main/java/org/glassfish/jersey/innate/spi/MessageBodyWorkersSettable.java
new file mode 100644
index 0000000..09c751e
--- /dev/null
+++ b/core-common/src/main/java/org/glassfish/jersey/innate/spi/MessageBodyWorkersSettable.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2024 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
+ */
+
+package org.glassfish.jersey.innate.spi;
+
+import org.glassfish.jersey.message.MessageBodyWorkers;
+
+/**
+ * Entity type that expects the {@link MessageBodyWorkers} to be set for converting the entity to another types.
+ */
+public interface MessageBodyWorkersSettable {
+
+    /**
+     * Set message body workers used to transform an entity stream into particular Java type.
+     *
+     * @param messageBodyWorkers message body workers.
+     */
+    public void setMessageBodyWorkers(final MessageBodyWorkers messageBodyWorkers);
+}
diff --git a/core-common/src/main/java/org/glassfish/jersey/internal/util/ReflectionHelper.java b/core-common/src/main/java/org/glassfish/jersey/internal/util/ReflectionHelper.java
index 6383095..aa46870 100644
--- a/core-common/src/main/java/org/glassfish/jersey/internal/util/ReflectionHelper.java
+++ b/core-common/src/main/java/org/glassfish/jersey/internal/util/ReflectionHelper.java
@@ -1344,6 +1344,7 @@
      * @param m the method to find
      * @return privileged action to return public method found.
      * @see AccessController#doPrivileged(java.security.PrivilegedAction)
+     *
      */
     public static PrivilegedAction<Method> findMethodOnClassPA(final Class<?> c, final Method m) {
         return new PrivilegedAction<Method>() {
diff --git a/core-server/pom.xml b/core-server/pom.xml
index 68e0f87..2b24237 100644
--- a/core-server/pom.xml
+++ b/core-server/pom.xml
@@ -155,9 +155,13 @@
                     <parallel>classes</parallel>
                     <perCoreThreadCount>true</perCoreThreadCount>
                     <threadCount>1</threadCount>
-                    <forkCount>1C</forkCount>
+                    <forkCount>1</forkCount>
                     <reuseForks>true</reuseForks>
                     <systemPropertiesFile>${project.basedir}/etc/systemPropertiesFile</systemPropertiesFile>
+                    <argLine>
+                        ${surefire.coverage.argline}
+                        ${surefire.security.argline}
+                    </argLine>
                 </configuration>
             </plugin>
         </plugins>
@@ -248,7 +252,8 @@
             <groupId>org.glassfish.jersey.inject</groupId>
             <artifactId>jersey-hk2</artifactId>
             <version>${project.version}</version>
-            <scope>test</scope>
+            <scope>provided</scope>
+            <optional>true</optional>
         </dependency>
 
         <dependency>
@@ -311,6 +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>
     </properties>
 
 </project>
diff --git a/core-server/src/main/java/module-info.java b/core-server/src/main/java/module-info.java
new file mode 100644
index 0000000..ea3159f
--- /dev/null
+++ b/core-server/src/main/java/module-info.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2022, 2023 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.core.server {
+    requires jakarta.ws.rs;
+    requires static jakarta.xml.bind;
+    requires java.logging;
+    requires jakarta.annotation;
+    requires static java.desktop;
+    requires java.management;
+    requires jakarta.activation;
+    requires jakarta.inject;
+    requires jakarta.validation;
+
+    requires jdk.httpserver;
+
+    requires static org.glassfish.jersey.inject.hk2;
+    requires static org.glassfish.hk2.api;
+
+    // jersey common modules
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.client;
+
+    // Exports rather all, which corresponds to previous state without module-info
+    exports org.glassfish.jersey.server;
+    exports org.glassfish.jersey.server.spi;
+    exports org.glassfish.jersey.server.spi.internal;
+    exports org.glassfish.jersey.server.model;
+    exports org.glassfish.jersey.server.model.internal;
+    exports org.glassfish.jersey.server.wadl;
+    exports org.glassfish.jersey.server.wadl.config;
+    exports org.glassfish.jersey.server.wadl.processor;
+    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;
+    exports org.glassfish.jersey.server.monitoring;
+    exports org.glassfish.jersey.server.wadl.internal;
+    exports org.glassfish.jersey.server.internal;
+    exports org.glassfish.jersey.server.internal.inject;
+    exports org.glassfish.jersey.server.internal.monitoring;
+    exports org.glassfish.jersey.server.internal.monitoring.jmx;
+    exports org.glassfish.jersey.server.internal.process;
+    exports org.glassfish.jersey.server.internal.routing;
+    exports org.glassfish.jersey.server.internal.scanning;
+    exports org.glassfish.jersey.server.internal.sonar;
+
+    exports com.sun.research.ws.wadl; // to org.glassfish.jersey.core.server.test;
+    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;
+
+    opens org.glassfish.jersey.server;
+    opens org.glassfish.jersey.server.filter;
+    opens org.glassfish.jersey.server.filter.internal;
+    opens org.glassfish.jersey.server.internal;
+    opens org.glassfish.jersey.server.internal.inject;
+    opens org.glassfish.jersey.server.internal.monitoring;
+    opens org.glassfish.jersey.server.internal.monitoring.jmx;
+    opens org.glassfish.jersey.server.internal.process;
+    opens org.glassfish.jersey.server.internal.routing;
+    opens org.glassfish.jersey.server.model;
+    opens org.glassfish.jersey.server.wadl.processor;
+
+    provides jakarta.ws.rs.ext.RuntimeDelegate
+            with org.glassfish.jersey.server.internal.RuntimeDelegateImpl;
+    provides org.glassfish.jersey.internal.spi.AutoDiscoverable
+            with org.glassfish.jersey.server.filter.internal.ServerFiltersAutoDiscoverable;
+    provides org.glassfish.jersey.internal.spi.ForcedAutoDiscoverable
+            with org.glassfish.jersey.server.wadl.internal.WadlAutoDiscoverable,
+                    org.glassfish.jersey.server.internal.monitoring.MonitoringAutodiscoverable;
+    provides org.glassfish.jersey.model.internal.spi.ParameterServiceProvider
+            with org.glassfish.jersey.server.model.Parameter.ServerParameterService;
+}
\ No newline at end of file
diff --git a/core-server/src/main/java/org/glassfish/jersey/server/wadl/internal/generators/WadlGeneratorJAXBGrammarGenerator.java b/core-server/src/main/java/org/glassfish/jersey/server/wadl/internal/generators/WadlGeneratorJAXBGrammarGenerator.java
index 57468eb..25b3c52 100644
--- a/core-server/src/main/java/org/glassfish/jersey/server/wadl/internal/generators/WadlGeneratorJAXBGrammarGenerator.java
+++ b/core-server/src/main/java/org/glassfish/jersey/server/wadl/internal/generators/WadlGeneratorJAXBGrammarGenerator.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 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,6 +19,7 @@
 import java.io.CharArrayWriter;
 import java.io.IOException;
 import java.lang.reflect.Constructor;
+import java.lang.reflect.InaccessibleObjectException;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
@@ -402,7 +403,7 @@
                                 });
                         parameterClassInstance = defaultConstructor.newInstance();
                     } catch (final InstantiationException | SecurityException | IllegalAccessException
-                            | IllegalArgumentException | InvocationTargetException ex) {
+                            | IllegalArgumentException | InvocationTargetException | InaccessibleObjectException ex) {
                         LOGGER.log(Level.FINE, null, ex);
                     } catch (final PrivilegedActionException ex) {
                         LOGGER.log(Level.FINE, null, ex.getCause());
diff --git a/core-server/src/test/java/module-info.test b/core-server/src/test/java/module-info.test
new file mode 100644
index 0000000..521f079
--- /dev/null
+++ b/core-server/src/test/java/module-info.test
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2023 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.core.server.test {
+    requires java.logging;
+    requires java.management;
+
+    requires jdk.httpserver;
+
+    requires jakarta.annotation;
+    requires jakarta.inject;
+    requires jakarta.validation;
+    requires jakarta.ws.rs;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.inject.hk2;
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.hk2.api;
+    requires org.glassfish.hk2.locator;
+    requires org.glassfish.hk2.utilities;
+
+    requires org.glassfish.jersey.core.server;
+
+    requires org.junit.jupiter.api;
+    requires org.junit.jupiter.engine;
+    requires org.junit.jupiter.params;
+    requires org.assertj.core;
+    requires org.hamcrest;
+    requires jakarta.xml.bind;
+    requires com.sun.xml.bind.osgi;
+
+    requires jboss.vfs;
+
+    opens org.glassfish.jersey.server.model to org.eclipse.persistence.core;
+    /*exports org.glassfish.jersey.server to org.junit.platform.commons;
+    exports org.glassfish.jersey.server.filter to org.junit.platform.commons;
+    exports org.glassfish.jersey.server.model to org.junit.platform.commons;
+    exports org.glassfish.jersey.server.model.internal to org.junit.platform.commons;
+    exports org.glassfish.jersey.server.monitoring to org.junit.platform.commons;
+    exports org.glassfish.jersey.server.spi to org.junit.platform.commons;
+    exports org.glassfish.jersey.server.internal to org.junit.platform.commons;
+    exports org.glassfish.jersey.server.internal.process to org.junit.platform.commons;
+    exports org.glassfish.jersey.server.internal.monitoring to org.junit.platform.commons;
+    exports org.glassfish.jersey.server.internal.inject to org.junit.platform.commons;
+    exports org.glassfish.jersey.server.internal.routing to org.junit.platform.commons;
+    exports org.glassfish.jersey.server.internal.scanning to org.junit.platform.commons;
+    exports org.glassfish.jersey.server.internal.sonar to org.junit.platform.commons;
+    exports org.glassfish.jersey.server.wadl.generators.resourcedoc to org.junit.platform.commons;
+    exports org.glassfish.jersey.server.wadl.config to org.junit.platform.commons;*/
+
+}
\ No newline at end of file
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/RuntimeDelegateImplTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/RuntimeDelegateImplTest.java
index 9aa7419..dfd0d64 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/RuntimeDelegateImplTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/RuntimeDelegateImplTest.java
@@ -54,6 +54,11 @@
      */
     @Test
     public void testRuntimeDelegateInstance() {
+        try {
+            RuntimeDelegate.getInstance().createEndpoint((Application) null, com.sun.net.httpserver.HttpHandler.class);
+        } catch (Exception e) {
+            // does not matter, this just makes sure the correct RuntimeDelegate is set
+        }
         assertSame(RuntimeDelegateImpl.class, RuntimeDelegate.getInstance().getClass());
     }
 
@@ -104,7 +109,6 @@
         // when
         final SeBootstrap.Configuration configuration = configurationBuilder.property("property", "value").build();
 
-        // then
         assertThat(configuration, is(notNullValue()));
         assertTrue(configuration.hasProperty("property"));
         assertThat(configuration.property("property"), is("value"));
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/scanning/AbstractFinderTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/scanning/AbstractFinderTest.java
new file mode 100644
index 0000000..42417f3
--- /dev/null
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/scanning/AbstractFinderTest.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2022 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
+ */
+
+package org.glassfish.jersey.server.internal.scanning;
+
+public abstract class AbstractFinderTest {
+
+    private static final String SEPARATOR = System.getProperty("path.separator");
+
+    String setUpJaxRsApiPath() {
+
+        final String oldClassPath = System.getProperty("java.class.path");
+        final String sureFireClassPath = System.getProperty("surefire.test.class.path");
+        final String modulePath = System.getProperty("jdk.module.path");
+        final StringBuilder classPath = new StringBuilder();
+        if (oldClassPath != null) {
+            classPath.append(oldClassPath);
+            classPath.append(SEPARATOR);
+        }
+        if (sureFireClassPath != null) {
+            classPath.append(sureFireClassPath);
+            classPath.append(SEPARATOR);
+        }
+        if (modulePath != null) {
+            classPath.append(modulePath);
+        }
+
+        return parseEntries(classPath.toString());
+    }
+
+    private static String parseEntries(String fullPath) {
+        final String[] entries = fullPath.split(SEPARATOR);
+        for (final String entry : entries) {
+            if (entry.contains("jakarta.ws.rs-api")) {
+                return entry;
+            }
+        }
+        return null;
+    }
+
+}
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/scanning/JarFileScannerTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/scanning/JarFileScannerTest.java
index d76efcd..76875b9 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/scanning/JarFileScannerTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/scanning/JarFileScannerTest.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,21 +37,13 @@
 /**
  * @author Martin Snyder
  */
-public class JarFileScannerTest {
+public class JarFileScannerTest extends AbstractFinderTest {
 
     private String jaxRsApiPath;
 
     @BeforeEach
     public void setUp() throws Exception {
-        final String classPath = System.getProperty("java.class.path");
-        final String[] entries = classPath.split(System.getProperty("path.separator"));
-
-        for (final String entry : entries) {
-            if (entry.contains("jakarta.ws.rs-api")) {
-                jaxRsApiPath = entry;
-                break;
-            }
-        }
+        jaxRsApiPath = setUpJaxRsApiPath();
 
         if (jaxRsApiPath == null) {
             fail("Could not find jakarta.ws.rs-api.");
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/internal/scanning/VFSSchemeResourceFinderTest.java b/core-server/src/test/java/org/glassfish/jersey/server/internal/scanning/VFSSchemeResourceFinderTest.java
index 903f150..8beb6f7 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/internal/scanning/VFSSchemeResourceFinderTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/internal/scanning/VFSSchemeResourceFinderTest.java
@@ -40,21 +40,13 @@
  * @author Martin Snyder
  * @author Jason T. Greene
  */
-public class VFSSchemeResourceFinderTest {
+public class VFSSchemeResourceFinderTest extends AbstractFinderTest {
 
     private String jaxRsApiPath;
 
     @BeforeEach
     public void setUp() throws Exception {
-        final String classPath = System.getProperty("java.class.path");
-        final String[] entries = classPath.split(System.getProperty("path.separator"));
-
-        for (final String entry : entries) {
-            if (entry.contains("jakarta.ws.rs-api")) {
-                jaxRsApiPath = entry;
-                break;
-            }
-        }
+        jaxRsApiPath = setUpJaxRsApiPath();
 
         if (jaxRsApiPath == null) {
             fail("Could not find jakarta.ws.rs-api.");
diff --git a/core-server/src/test/resources/META-INF/services/org.glassfish.jersey.internal.spi.AutoDiscoverable b/core-server/src/test/resources/META-INF/services/org.glassfish.jersey.internal.spi.AutoDiscoverable
index 7f80709..4dde7b3 100644
--- a/core-server/src/test/resources/META-INF/services/org.glassfish.jersey.internal.spi.AutoDiscoverable
+++ b/core-server/src/test/resources/META-INF/services/org.glassfish.jersey.internal.spi.AutoDiscoverable
@@ -1 +1,2 @@
-org.glassfish.jersey.server.AutoDiscoverableServerTest$CommonAutoDiscoverable
\ No newline at end of file
+org.glassfish.jersey.server.AutoDiscoverableServerTest$CommonAutoDiscoverable
+org.glassfish.jersey.server.filter.internal.ServerFiltersAutoDiscoverable
\ No newline at end of file
diff --git a/etc/config/copyright-exclude b/etc/config/copyright-exclude
index de5bfc6..9c4e32d 100644
--- a/etc/config/copyright-exclude
+++ b/etc/config/copyright-exclude
@@ -93,3 +93,4 @@
 /media/json-binding/src/test/java/org/glassfish/jersey/jsonb/internal/JsonBindingProviderTest.java
 /connectors/jdk-connector/src/test/resources
 /tools
+/media/multipart/src/test/resources/multipart
diff --git a/examples/extended-wadl-webapp/pom.xml b/examples/extended-wadl-webapp/pom.xml
index 96e9f75..dc19ad9 100644
--- a/examples/extended-wadl-webapp/pom.xml
+++ b/examples/extended-wadl-webapp/pom.xml
@@ -132,7 +132,6 @@
         <dependency>
             <groupId>com.sun.xml.bind</groupId>
             <artifactId>jaxb-osgi</artifactId>
-<!--            <scope>test</scope>-->
         </dependency>
         <dependency>
             <groupId>jakarta.xml.bind</groupId>
@@ -192,7 +191,6 @@
 
                 </dependencies>
             </plugin>
-
             <!-- Extended Wadl Config: javadoc plugin generates resourcedoc.xml during the compilation using doclet.
             Generated file is then used during runtime to attach javadoc information to wadl. -->
             <plugin>
@@ -396,4 +394,4 @@
             </build>
         </profile>
     </profiles>
-</project>
+</project>
\ No newline at end of file
diff --git a/examples/groovy/pom.xml b/examples/groovy/pom.xml
index b91c1e9..181b6e4 100644
--- a/examples/groovy/pom.xml
+++ b/examples/groovy/pom.xml
@@ -31,6 +31,18 @@
             <version>${groovy.version}</version>
             <exclusions>
                 <exclusion>
+                    <groupId>org.ow2.asm</groupId>
+                    <artifactId>asm</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.ow2.asm</groupId>
+                    <artifactId>asm-commons</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.ow2.asm</groupId>
+                    <artifactId>asm-tree</artifactId>
+                </exclusion>
+                <exclusion>
                     <groupId>com.fasterxml.jackson.core</groupId>
                     <artifactId>jackson-core</artifactId>
                 </exclusion>
diff --git a/examples/http-patch/pom.xml b/examples/http-patch/pom.xml
index 53d1f98..da243fd 100644
--- a/examples/http-patch/pom.xml
+++ b/examples/http-patch/pom.xml
@@ -74,6 +74,12 @@
             <groupId>org.glassfish.jersey.media</groupId>
             <artifactId>jersey-media-moxy</artifactId>
             <version>${project.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.eclipse.angus</groupId>
+                    <artifactId>angus-activation</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
 
         <dependency>
diff --git a/examples/json-moxy/pom.xml b/examples/json-moxy/pom.xml
index 3150b2d..1b429a9 100644
--- a/examples/json-moxy/pom.xml
+++ b/examples/json-moxy/pom.xml
@@ -38,6 +38,12 @@
         <dependency>
             <groupId>org.glassfish.jersey.media</groupId>
             <artifactId>jersey-media-moxy</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.eclipse.angus</groupId>
+                    <artifactId>angus-activation</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
         <dependency>
             <groupId>org.glassfish.jersey.media</groupId>
diff --git a/examples/managed-beans-webapp/pom.xml b/examples/managed-beans-webapp/pom.xml
index b39c47b..7280d61 100644
--- a/examples/managed-beans-webapp/pom.xml
+++ b/examples/managed-beans-webapp/pom.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
 
-    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 Distribution License v. 1.0, which is available at
diff --git a/examples/xml-moxy/pom.xml b/examples/xml-moxy/pom.xml
index 323557c..7cea2cf 100644
--- a/examples/xml-moxy/pom.xml
+++ b/examples/xml-moxy/pom.xml
@@ -39,6 +39,12 @@
         <dependency>
             <groupId>org.glassfish.jersey.media</groupId>
             <artifactId>jersey-media-moxy</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.eclipse.angus</groupId>
+                    <artifactId>angus-activation</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
 
         <dependency>
diff --git a/ext/bean-validation/src/main/java/module-info.java b/ext/bean-validation/src/main/java/module-info.java
new file mode 100644
index 0000000..a0d312e
--- /dev/null
+++ b/ext/bean-validation/src/main/java/module-info.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2022, 2024 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.ext.bean.validation {
+
+    requires java.logging;
+
+    requires jakarta.annotation;
+    requires jakarta.inject;
+    requires jakarta.validation;
+    requires jakarta.ws.rs;
+    requires static jakarta.xml.bind;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+
+    requires static org.glassfish.jersey.ext.cdi1x;
+    requires static jakarta.cdi;
+
+    exports org.glassfish.jersey.server.validation;
+    exports org.glassfish.jersey.server.validation.internal;
+    exports org.glassfish.jersey.server.validation.internal.hibernate;
+    opens org.glassfish.jersey.server.validation;
+    opens org.glassfish.jersey.server.validation.internal;
+    opens org.glassfish.jersey.server.validation.internal.hibernate;
+}
\ No newline at end of file
diff --git a/ext/cdi/jersey-cdi-rs-inject/pom.xml b/ext/cdi/jersey-cdi-rs-inject/pom.xml
index 9d04d8f..5ed8b63 100644
--- a/ext/cdi/jersey-cdi-rs-inject/pom.xml
+++ b/ext/cdi/jersey-cdi-rs-inject/pom.xml
@@ -41,6 +41,18 @@
             <version>${project.version}</version>
         </dependency>
         <dependency>
+            <groupId>org.glassfish.jersey.core</groupId>
+            <artifactId>jersey-server</artifactId>
+            <version>${project.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.inject</groupId>
+            <artifactId>jersey-hk2</artifactId>
+            <version>${project.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
             <groupId>jakarta.enterprise</groupId>
             <artifactId>jakarta.enterprise.cdi-api</artifactId>
             <scope>provided</scope>
@@ -61,7 +73,10 @@
                 <artifactId>maven-javadoc-plugin</artifactId>
                 <configuration>
                     <show>package</show>
-		    <detectJavaApiLink>false</detectJavaApiLink>
+		            <detectJavaApiLink>false</detectJavaApiLink>
+                    <detectLinks>false</detectLinks>
+                    <detectOfflineLinks>false</detectOfflineLinks>
+                    <source>8</source>
                 </configuration>
             </plugin>
             <plugin>
diff --git a/ext/cdi/jersey-cdi-rs-inject/src/main/java/module-info.java b/ext/cdi/jersey-cdi-rs-inject/src/main/java/module-info.java
new file mode 100644
index 0000000..c6d96b4
--- /dev/null
+++ b/ext/cdi/jersey-cdi-rs-inject/src/main/java/module-info.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2022, 2023 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.ext.cdi.rs.inject {
+    requires jakarta.ws.rs;
+    requires jakarta.cdi;
+    requires jakarta.servlet;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.inject.hk2;
+    requires org.glassfish.jersey.ext.cdi1x;
+
+    opens org.glassfish.jersey.ext.cdi1x.inject.internal;
+    exports org.glassfish.jersey.ext.cdi1x.inject.internal;
+}
\ No newline at end of file
diff --git a/ext/cdi/jersey-cdi1x-ban-custom-hk2-binding/pom.xml b/ext/cdi/jersey-cdi1x-ban-custom-hk2-binding/pom.xml
index 3f59868..5e11245 100644
--- a/ext/cdi/jersey-cdi1x-ban-custom-hk2-binding/pom.xml
+++ b/ext/cdi/jersey-cdi1x-ban-custom-hk2-binding/pom.xml
@@ -43,7 +43,17 @@
             <groupId>org.glassfish.jersey.core</groupId>
             <artifactId>jersey-common</artifactId>
             <version>${project.version}</version>
-            <scope>test</scope>
+<!--            <scope>test</scope>-->
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.core</groupId>
+            <artifactId>jersey-server</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.inject</groupId>
+            <artifactId>jersey-hk2</artifactId>
+            <version>${project.version}</version>
         </dependency>
 
         <dependency>
@@ -51,6 +61,12 @@
             <artifactId>hamcrest</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>jakarta.enterprise</groupId>
+            <artifactId>jakarta.enterprise.cdi-api</artifactId>
+            <scope>provided</scope>
+            <optional>true</optional>
+        </dependency>
     </dependencies>
 
     <build>
@@ -73,4 +89,4 @@
             </plugin>
         </plugins>
     </build>
-</project>
+</project>
\ No newline at end of file
diff --git a/ext/cdi/jersey-cdi1x-ban-custom-hk2-binding/src/main/java/module-info.java b/ext/cdi/jersey-cdi1x-ban-custom-hk2-binding/src/main/java/module-info.java
new file mode 100644
index 0000000..8d64a91
--- /dev/null
+++ b/ext/cdi/jersey-cdi1x-ban-custom-hk2-binding/src/main/java/module-info.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2022 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.ext.cdi1x.ban.custom.hk2.binding {
+    requires org.glassfish.jersey.ext.cdi1x;
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.inject.hk2;
+
+    exports org.glassfish.jersey.ext.cdi1x.hk2ban;
+}
\ No newline at end of file
diff --git a/ext/cdi/jersey-cdi1x-servlet/pom.xml b/ext/cdi/jersey-cdi1x-servlet/pom.xml
index 8c420f5..0532887 100644
--- a/ext/cdi/jersey-cdi1x-servlet/pom.xml
+++ b/ext/cdi/jersey-cdi1x-servlet/pom.xml
@@ -49,6 +49,11 @@
             <artifactId>jersey-server</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.inject</groupId>
+            <artifactId>jersey-hk2</artifactId>
+            <version>${project.version}</version>
+        </dependency>
     </dependencies>
 
     <build>
@@ -97,4 +102,4 @@
         </plugins>
     </build>
 
-</project>
+</project>
\ No newline at end of file
diff --git a/ext/cdi/jersey-cdi1x-servlet/src/main/java/module-info.java b/ext/cdi/jersey-cdi1x-servlet/src/main/java/module-info.java
new file mode 100644
index 0000000..4a78540
--- /dev/null
+++ b/ext/cdi/jersey-cdi1x-servlet/src/main/java/module-info.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2022 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.ext.cdi1x.servlet {
+    requires jakarta.cdi;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.inject.hk2;
+
+    requires org.glassfish.jersey.ext.cdi1x;
+
+    exports org.glassfish.jersey.ext.cdi1x.servlet.internal;
+}
\ No newline at end of file
diff --git a/ext/cdi/jersey-cdi1x-transaction/pom.xml b/ext/cdi/jersey-cdi1x-transaction/pom.xml
index b342a4735..82998f0 100644
--- a/ext/cdi/jersey-cdi1x-transaction/pom.xml
+++ b/ext/cdi/jersey-cdi1x-transaction/pom.xml
@@ -54,6 +54,38 @@
             <version>${project.version}</version>
             <scope>provided</scope>
         </dependency>
+
+        <dependency>
+            <groupId>org.glassfish.jersey.inject</groupId>
+            <artifactId>jersey-hk2</artifactId>
+            <version>${project.version}</version>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>jakarta.enterprise</groupId>
+            <artifactId>jakarta.enterprise.cdi-api</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>jakarta.annotation</groupId>
+                    <artifactId>jakarta.annotation-api</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>jakarta.el</groupId>
+                    <artifactId>jakarta.el-api</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <dependency>
+            <groupId>jakarta.inject</groupId>
+            <artifactId>jakarta.inject-api</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>jakarta.transaction</groupId>
+            <artifactId>jakarta.transaction-api</artifactId>
+        </dependency>
     </dependencies>
 
     <build>
@@ -103,4 +135,4 @@
             </plugin>
         </plugins>
     </build>
-</project>
+</project>
\ No newline at end of file
diff --git a/ext/cdi/jersey-cdi1x-transaction/src/main/java/module-info.java b/ext/cdi/jersey-cdi1x-transaction/src/main/java/module-info.java
new file mode 100644
index 0000000..251515b
--- /dev/null
+++ b/ext/cdi/jersey-cdi1x-transaction/src/main/java/module-info.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2022, 2023 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.ext.cdi1x.transaction {
+    requires jakarta.annotation;
+    requires jakarta.inject;
+    requires jakarta.interceptor;
+    requires jakarta.transaction;
+    requires jakarta.ws.rs;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.inject.hk2;
+    requires org.glassfish.jersey.ext.cdi1x;
+
+    exports org.glassfish.jersey.ext.cdi1x.transaction.internal;
+}
\ No newline at end of file
diff --git a/ext/cdi/jersey-cdi1x-validation/pom.xml b/ext/cdi/jersey-cdi1x-validation/pom.xml
index 3491db5..0e093d7 100644
--- a/ext/cdi/jersey-cdi1x-validation/pom.xml
+++ b/ext/cdi/jersey-cdi1x-validation/pom.xml
@@ -41,6 +41,13 @@
         </dependency>
 
         <dependency>
+            <groupId>org.glassfish.jersey.inject</groupId>
+            <artifactId>jersey-hk2</artifactId>
+            <version>${project.version}</version>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
             <groupId>org.hibernate.validator</groupId>
             <artifactId>hibernate-validator-cdi</artifactId>
             <scope>provided</scope>
@@ -115,4 +122,4 @@
         </plugins>
     </build>
 
-</project>
+</project>
\ No newline at end of file
diff --git a/ext/cdi/jersey-cdi1x-validation/src/main/java/module-info.java b/ext/cdi/jersey-cdi1x-validation/src/main/java/module-info.java
new file mode 100644
index 0000000..45a3da4
--- /dev/null
+++ b/ext/cdi/jersey-cdi1x-validation/src/main/java/module-info.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2022, 2023 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.ext.cdi1x.validation {
+    requires jakarta.annotation;
+    requires jakarta.inject;
+    requires jakarta.interceptor;
+
+    requires jakarta.cdi;
+
+    requires org.hibernate.validator.cdi;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.inject.hk2;
+    requires org.glassfish.jersey.ext.cdi1x;
+
+    exports org.glassfish.jersey.ext.cdi1x.validation.internal;
+    opens org.glassfish.jersey.ext.cdi1x.validation.internal;
+}
\ No newline at end of file
diff --git a/ext/cdi/jersey-cdi1x/pom.xml b/ext/cdi/jersey-cdi1x/pom.xml
index de1d52f..acd12e6 100644
--- a/ext/cdi/jersey-cdi1x/pom.xml
+++ b/ext/cdi/jersey-cdi1x/pom.xml
@@ -79,6 +79,7 @@
                 <artifactId>build-helper-maven-plugin</artifactId>
                 <inherited>true</inherited>
             </plugin>
+	    <!-- Felix plugin -->
             <plugin>
                 <groupId>org.apache.felix</groupId>
                 <artifactId>maven-bundle-plugin</artifactId>
diff --git a/ext/cdi/jersey-cdi1x/src/main/java/module-info.java b/ext/cdi/jersey-cdi1x/src/main/java/module-info.java
new file mode 100644
index 0000000..344dfe2
--- /dev/null
+++ b/ext/cdi/jersey-cdi1x/src/main/java/module-info.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2022 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.ext.cdi1x {
+
+    requires java.naming;
+    requires java.logging;
+
+    requires jakarta.cdi;
+    requires jakarta.inject;
+    requires jakarta.annotation;
+    requires jakarta.ws.rs;
+
+    requires org.glassfish.hk2.api;
+
+    requires static org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.inject.hk2;
+
+    exports org.glassfish.jersey.ext.cdi1x.internal;
+    exports org.glassfish.jersey.ext.cdi1x.internal.spi;
+    exports org.glassfish.jersey.ext.cdi1x.spi;
+    opens org.glassfish.jersey.ext.cdi1x.internal;
+
+    uses org.glassfish.jersey.ext.cdi1x.spi.Hk2CustomBoundTypesProvider;
+    uses org.glassfish.jersey.ext.cdi1x.internal.spi.BeanManagerProvider;
+    uses org.glassfish.jersey.ext.cdi1x.internal.spi.InjectionManagerInjectedTarget;
+    uses org.glassfish.jersey.ext.cdi1x.internal.spi.InjectionManagerStore;
+    uses org.glassfish.jersey.ext.cdi1x.internal.spi.InjectionTargetListener;
+}
\ No newline at end of file
diff --git a/ext/cdi/jersey-weld2-se/pom.xml b/ext/cdi/jersey-weld2-se/pom.xml
index 6192bac..86c9ad3 100644
--- a/ext/cdi/jersey-weld2-se/pom.xml
+++ b/ext/cdi/jersey-weld2-se/pom.xml
@@ -55,6 +55,11 @@
             <version>${project.version}</version>
         </dependency>
         <dependency>
+            <groupId>org.glassfish.jersey.inject</groupId>
+            <artifactId>jersey-hk2</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
             <groupId>jakarta.enterprise</groupId>
             <artifactId>jakarta.enterprise.cdi-api</artifactId>
             <exclusions>
@@ -76,6 +81,12 @@
                 </exclusion>
             </exclusions>
         </dependency>
+        <dependency>
+            <groupId>jakarta.interceptor</groupId>
+            <artifactId>jakarta.interceptor-api</artifactId>
+            <version>${jakarta.interceptor.version}</version>
+            <scope>provided</scope>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/ext/cdi/jersey-weld2-se/src/main/java/module-info.java b/ext/cdi/jersey-weld2-se/src/main/java/module-info.java
new file mode 100644
index 0000000..401667f
--- /dev/null
+++ b/ext/cdi/jersey-weld2-se/src/main/java/module-info.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2022 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.ext.weld2.se {
+    requires jakarta.inject;
+    requires jakarta.cdi;
+
+    requires weld.api;
+
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.ext.cdi1x;
+    requires org.glassfish.jersey.inject.hk2;
+
+    exports org.glassfish.jersey.weld.se;
+    opens org.glassfish.jersey.weld.se;
+}
\ No newline at end of file
diff --git a/ext/entity-filtering/src/main/java/module-info.java b/ext/entity-filtering/src/main/java/module-info.java
new file mode 100644
index 0000000..1e20ed2
--- /dev/null
+++ b/ext/entity-filtering/src/main/java/module-info.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2022 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.ext.entity.filtering {
+    requires java.logging;
+
+    requires jakarta.annotation;
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+    requires jakarta.xml.bind;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+
+    exports org.glassfish.jersey.message.filtering;
+    exports org.glassfish.jersey.message.filtering.spi;
+
+    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;
+
+}
\ No newline at end of file
diff --git a/ext/metainf-services/pom.xml b/ext/metainf-services/pom.xml
index 0f31c18..5194681 100644
--- a/ext/metainf-services/pom.xml
+++ b/ext/metainf-services/pom.xml
@@ -61,6 +61,9 @@
                         <!-- Do not warn about using sun.misc.Unsafe -->
                         <XDignore.symbol.file />
                     </compilerArguments>
+                    <compilerArgs>
+                        <arg>-Xdiags:verbose</arg>
+                    </compilerArgs>
                     <showWarnings>false</showWarnings>
                     <fork>false</fork>
                 </configuration>
diff --git a/ext/metainf-services/src/main/java/module-info.txt b/ext/metainf-services/src/main/java/module-info.txt
new file mode 100644
index 0000000..c78548c
--- /dev/null
+++ b/ext/metainf-services/src/main/java/module-info.txt
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2022 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.ext.metainf.services {
+    requires jakarta.annotation;
+    requires jakarta.ws.rs;
+
+    requires org.glassfish.jersey.core.common;
+    exports org.glassfish.jersey.spidiscovery.internal;
+}
\ No newline at end of file
diff --git a/ext/metainf-services/src/test/java/module-info.txt b/ext/metainf-services/src/test/java/module-info.txt
new file mode 100644
index 0000000..e07ac6e
--- /dev/null
+++ b/ext/metainf-services/src/test/java/module-info.txt
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2022 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.ext.metainf.services {
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.core.server;
+//    requires org.glassfish.jersey.ext.metainf.services;
+    requires junit;
+}
\ No newline at end of file
diff --git a/ext/microprofile/mp-config/pom.xml b/ext/microprofile/mp-config/pom.xml
index 1aaa254..4f3c04c 100644
--- a/ext/microprofile/mp-config/pom.xml
+++ b/ext/microprofile/mp-config/pom.xml
@@ -29,6 +29,15 @@
 
     <artifactId>jersey-mp-config</artifactId>
 
+    <properties>
+        <surefire.coverage.argline>
+            --add-opens org.glassfish.jersey.core.common/org.glassfish.jersey.innate=ALL-UNNAMED
+            --add-opens org.glassfish.jersey.core.common/org.glassfish.jersey.innate.inject=ALL-UNNAMED
+            --add-opens org.glassfish.jersey.core.common/org.glassfish.jersey.innate.virtual=ALL-UNNAMED
+            --add-modules=ALL-MODULE-PATH
+        </surefire.coverage.argline>
+    </properties>
+
     <dependencies>
 
         <dependency>
@@ -49,6 +58,14 @@
         </dependency>
 
         <dependency>
+            <groupId>org.glassfish.jersey.core</groupId>
+            <artifactId>jersey-server</artifactId>
+            <version>${project.version}</version>
+            <scope>provided</scope>
+            <optional>true</optional>
+        </dependency>
+
+        <dependency>
             <groupId>org.glassfish.jersey.inject</groupId>
             <artifactId>jersey-hk2</artifactId>
             <version>${project.version}</version>
diff --git a/ext/microprofile/mp-config/src/main/java/module-info.java b/ext/microprofile/mp-config/src/main/java/module-info.java
new file mode 100644
index 0000000..13bc0bf
--- /dev/null
+++ b/ext/microprofile/mp-config/src/main/java/module-info.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2022, 2023 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.ext.mp.config {
+    requires jakarta.ws.rs;
+    requires microprofile.config.api;
+
+    requires org.glassfish.jersey.core.common;
+    requires static org.glassfish.jersey.core.server;
+
+    exports org.glassfish.jersey.microprofile.config;
+}
\ No newline at end of file
diff --git a/ext/microprofile/mp-config/src/test/java/module-info.test b/ext/microprofile/mp-config/src/test/java/module-info.test
new file mode 100644
index 0000000..ddeb8cf
--- /dev/null
+++ b/ext/microprofile/mp-config/src/test/java/module-info.test
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2023 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.ext.mp.config {
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+    requires microprofile.config.api;
+
+    requires org.junit.jupiter.api;
+    requires org.junit.jupiter.engine;
+    requires org.glassfish.jersey.tests.framework.core;
+
+    requires jetty.servlet.api;
+    requires smallrye.config;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+
+    exports org.glassfish.jersey.microprofile.config;
+}
\ No newline at end of file
diff --git a/ext/microprofile/mp-config/src/test/java/org/glassfish/jersey/microprofile/config/ExternalPropertiesConfigurationFactoryTest.java b/ext/microprofile/mp-config/src/test/java/org/glassfish/jersey/microprofile/config/ExternalPropertiesConfigurationFactoryTest.java
index 58f7bd7..3bd818a 100644
--- a/ext/microprofile/mp-config/src/test/java/org/glassfish/jersey/microprofile/config/ExternalPropertiesConfigurationFactoryTest.java
+++ b/ext/microprofile/mp-config/src/test/java/org/glassfish/jersey/microprofile/config/ExternalPropertiesConfigurationFactoryTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019, 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2023 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
@@ -82,23 +82,23 @@
     @Test
     public void readConfigTest() {
 
-        final Boolean responce = target("getPropertyValue/{key}")
+        final Boolean response = target("getPropertyValue/{key}")
                 .resolveTemplate("key", "jersey.config.disableMetainfServicesLookup").request().get(Boolean.class);
-        Assertions.assertEquals(Boolean.TRUE, responce);
+        Assertions.assertEquals(Boolean.TRUE, response);
     }
 
     @Test
     public void smallRyeConfigTest() {
 
-        final String responce = target("readProperty/{key}")
+        final String response = target("readProperty/{key}")
                 .resolveTemplate("key", "jersey.config.disableAutoDiscovery").request().get(String.class);
-        Assertions.assertEquals("1", responce);
+        Assertions.assertEquals("1", response);
     }
 
     @Test
     public void defaultHeaderValueTest() {
-        final String responce = target("readProperty/{key}")
+        final String response = target("readProperty/{key}")
                 .resolveTemplate("key", "jersey.config.disableJsonProcessing").request().get(String.class);
-        Assertions.assertEquals("true", responce);
+        Assertions.assertEquals("true", response);
     }
 }
\ No newline at end of file
diff --git a/ext/microprofile/mp-rest-client/pom.xml b/ext/microprofile/mp-rest-client/pom.xml
index 5c96882..3e66566 100644
--- a/ext/microprofile/mp-rest-client/pom.xml
+++ b/ext/microprofile/mp-rest-client/pom.xml
@@ -106,6 +106,7 @@
                 <artifactId>istack-commons-maven-plugin</artifactId>
                 <inherited>true</inherited>
             </plugin>
+	    <!-- Felix plugin -->
             <plugin>
                 <groupId>org.apache.felix</groupId>
                 <artifactId>maven-bundle-plugin</artifactId>
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
new file mode 100644
index 0000000..f958c14
--- /dev/null
+++ b/ext/microprofile/mp-rest-client/src/main/java/module-info.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2022, 2023 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.ext.mp.rest.client {
+    requires java.logging;
+
+    requires jakarta.annotation;
+    requires jakarta.cdi;
+    requires jakarta.inject;
+    requires jakarta.interceptor;
+    requires jakarta.json;
+    requires jakarta.ws.rs;
+
+    requires microprofile.rest.client.api;
+    requires microprofile.config.api;
+    requires org.reactivestreams;
+
+    requires org.glassfish.jersey.ext.cdi1x;
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.inject.hk2;
+    requires org.glassfish.jersey.media.sse;
+}
\ No newline at end of file
diff --git a/ext/microprofile/mp-rest-client/src/main/java/org/glassfish/jersey/microprofile/restclient/MethodModel.java b/ext/microprofile/mp-rest-client/src/main/java/org/glassfish/jersey/microprofile/restclient/MethodModel.java
index 9f8ebd1..08eaf0a 100644
--- a/ext/microprofile/mp-rest-client/src/main/java/org/glassfish/jersey/microprofile/restclient/MethodModel.java
+++ b/ext/microprofile/mp-rest-client/src/main/java/org/glassfish/jersey/microprofile/restclient/MethodModel.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2025 Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2019 Payara Foundation and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -379,6 +379,11 @@
         if (!headersContext.isPresent()) {
             for (InboundHeadersProvider provider : interfaceModel.context().inboundHeadersProviders()) {
                 inbound.putAll(provider.inboundHeaders());
+                if (RestClientBuilderImpl.DefaultInboundHeaderProvider.class.isInstance(provider)) {
+                    MultivaluedMap<String, String> fromFactory =
+                            ((ClientHeadersFactory) provider).update(inbound, customHeaders);
+                    customHeaders.putAll(fromFactory);
+                }
             }
         }
 
diff --git a/ext/microprofile/mp-rest-client/src/main/java/org/glassfish/jersey/microprofile/restclient/RestClientBuilderImpl.java b/ext/microprofile/mp-rest-client/src/main/java/org/glassfish/jersey/microprofile/restclient/RestClientBuilderImpl.java
index 2b7425f..687d228 100644
--- a/ext/microprofile/mp-rest-client/src/main/java/org/glassfish/jersey/microprofile/restclient/RestClientBuilderImpl.java
+++ b/ext/microprofile/mp-rest-client/src/main/java/org/glassfish/jersey/microprofile/restclient/RestClientBuilderImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019, 2024 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2025 Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2019, 2021 Payara Foundation and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -47,8 +47,11 @@
 import jakarta.ws.rs.core.Configuration;
 import jakarta.ws.rs.core.Feature;
 import jakarta.ws.rs.core.FeatureContext;
+import jakarta.ws.rs.core.MultivaluedHashMap;
+import jakarta.ws.rs.core.MultivaluedMap;
 import jakarta.ws.rs.ext.ParamConverterProvider;
 
+import jakarta.ws.rs.ext.RuntimeDelegate;
 import org.eclipse.microprofile.config.Config;
 import org.eclipse.microprofile.config.ConfigProvider;
 import org.eclipse.microprofile.rest.client.RestClientBuilder;
@@ -56,6 +59,7 @@
 import org.eclipse.microprofile.rest.client.annotation.RegisterProvider;
 import org.eclipse.microprofile.rest.client.ext.AsyncInvocationInterceptor;
 import org.eclipse.microprofile.rest.client.ext.AsyncInvocationInterceptorFactory;
+import org.eclipse.microprofile.rest.client.ext.ClientHeadersFactory;
 import org.eclipse.microprofile.rest.client.ext.QueryParamStyle;
 import org.eclipse.microprofile.rest.client.ext.ResponseExceptionMapper;
 import org.eclipse.microprofile.rest.client.spi.RestClientListener;
@@ -66,10 +70,12 @@
 import org.glassfish.jersey.client.spi.ConnectorProvider;
 import org.glassfish.jersey.ext.cdi1x.internal.CdiUtil;
 import org.glassfish.jersey.innate.VirtualThreadUtil;
+import org.glassfish.jersey.internal.RuntimeDelegateDecorator;
 import org.glassfish.jersey.internal.ServiceFinder;
 import org.glassfish.jersey.internal.inject.InjectionManager;
 import org.glassfish.jersey.internal.inject.InjectionManagerSupplier;
 import org.glassfish.jersey.internal.util.ReflectionHelper;
+import org.glassfish.jersey.message.internal.HeaderUtils;
 import org.glassfish.jersey.uri.JerseyQueryParamStyle;
 
 /**
@@ -92,6 +98,7 @@
     private final List<AsyncInvocationInterceptorFactoryPriorityWrapper> asyncInterceptorFactories;
     private final Config config;
     private final ConfigWrapper configWrapper;
+    private final DefaultInboundHeaderProvider defaultInboundHeaderProvider;
     private URI uri;
     private ClientBuilder clientBuilder;
     private Supplier<ExecutorService> executorService;
@@ -112,6 +119,9 @@
         config = ConfigProvider.getConfig();
         configWrapper = new ConfigWrapper(clientBuilder.getConfiguration());
         executorService = () -> VirtualThreadUtil.withConfig(configWrapper).newCachedThreadPool();
+
+        defaultInboundHeaderProvider = new DefaultInboundHeaderProvider(clientBuilder.getConfiguration());
+        inboundHeaderProviders.add(defaultInboundHeaderProvider);
     }
 
     @Override
@@ -491,6 +501,11 @@
         return this;
     }
 
+    public RestClientBuilder header(String s, Object o) {
+        defaultInboundHeaderProvider.header(s, o);
+        return this;
+    }
+
     private static class InjectionManagerExposer implements Feature {
         InjectionManager injectionManager;
 
@@ -529,4 +544,34 @@
         }
     }
 
+    /* package*/ static class DefaultInboundHeaderProvider implements InboundHeadersProvider, ClientHeadersFactory {
+        private final RuntimeDelegate delegate;
+        private final MultivaluedMap<String, String> headers = new MultivaluedHashMap<>();
+
+        private DefaultInboundHeaderProvider(Configuration configuration) {
+            this.delegate = RuntimeDelegateDecorator.configured(configuration);
+        }
+
+        private void header(String key, Object value) {
+            if (value == null) {
+                throw new NullPointerException();
+            }
+            headers.add(key, HeaderUtils.asString(value, delegate));
+        }
+
+        @Override
+        public Map<String, List<String>> inboundHeaders() {
+            return headers;
+        }
+
+        @Override
+        public MultivaluedMap<String, String> update(MultivaluedMap<String, String> incomingHeaders,
+                                                     MultivaluedMap<String, String> clientOutgoingHeaders) {
+            MultivaluedMap<String, String> map = new MultivaluedHashMap<>();
+            map.putAll(incomingHeaders);
+            clientOutgoingHeaders.forEach((k, v) -> map.addAll(k, v));
+            return map;
+        }
+    }
+
 }
\ No newline at end of file
diff --git a/ext/microprofile/mp-rest-client/src/main/java/org/glassfish/jersey/microprofile/restclient/RestClientProducer.java b/ext/microprofile/mp-rest-client/src/main/java/org/glassfish/jersey/microprofile/restclient/RestClientProducer.java
index 1fbf420..0dff2b1 100644
--- a/ext/microprofile/mp-rest-client/src/main/java/org/glassfish/jersey/microprofile/restclient/RestClientProducer.java
+++ b/ext/microprofile/mp-rest-client/src/main/java/org/glassfish/jersey/microprofile/restclient/RestClientProducer.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019, 2023 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 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
@@ -161,6 +161,13 @@
 
     @Override
     public void destroy(Object instance, CreationalContext<Object> creationalContext) {
+        if (AutoCloseable.class.isInstance(instance)) {
+            try {
+                ((AutoCloseable) instance).close();
+            } catch (Exception e) {
+                throw new IllegalStateException(e);
+            }
+        }
     }
 
     @Override
diff --git a/ext/microprofile/mp-rest-client/src/main/resources/org/glassfish/jersey/microprofile/restclient/internal/localization.properties b/ext/microprofile/mp-rest-client/src/main/resources/org/glassfish/jersey/microprofile/restclient/internal/localization.properties
index 3afc639..5a3b074 100644
--- a/ext/microprofile/mp-rest-client/src/main/resources/org/glassfish/jersey/microprofile/restclient/internal/localization.properties
+++ b/ext/microprofile/mp-rest-client/src/main/resources/org/glassfish/jersey/microprofile/restclient/internal/localization.properties
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2021, 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,4 @@
 
 err.invalid.proxy.uri=Invalid proxy URI: {0}.
 err.invalid.proxy.port=Invalid proxy port: {0}.
+err.null.header=Header cannot be null.
diff --git a/ext/mvc-bean-validation/pom.xml b/ext/mvc-bean-validation/pom.xml
index 5b4cb7c..81f7a4d 100644
--- a/ext/mvc-bean-validation/pom.xml
+++ b/ext/mvc-bean-validation/pom.xml
@@ -88,4 +88,4 @@
         </dependency>
     </dependencies>
 
-</project>
+</project>
\ No newline at end of file
diff --git a/ext/mvc-bean-validation/src/main/java/module-info.java b/ext/mvc-bean-validation/src/main/java/module-info.java
new file mode 100644
index 0000000..f479039
--- /dev/null
+++ b/ext/mvc-bean-validation/src/main/java/module-info.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2022 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.ext.mvc.bean.validation {
+    requires jakarta.inject;
+    requires jakarta.validation;
+    requires jakarta.ws.rs;
+
+    requires org.glassfish.jersey.ext.mvc;
+    requires org.glassfish.jersey.ext.bean.validation;
+
+    exports org.glassfish.jersey.server.mvc.beanvalidation;
+}
\ No newline at end of file
diff --git a/ext/mvc-bean-validation/src/main/java/org/glassfish/jersey/server/mvc/beanvalidation/ValidationErrorTemplateExceptionMapper.java b/ext/mvc-bean-validation/src/main/java/org/glassfish/jersey/server/mvc/beanvalidation/ValidationErrorTemplateExceptionMapper.java
index 9b46cde..6ef16aa 100644
--- a/ext/mvc-bean-validation/src/main/java/org/glassfish/jersey/server/mvc/beanvalidation/ValidationErrorTemplateExceptionMapper.java
+++ b/ext/mvc-bean-validation/src/main/java/org/glassfish/jersey/server/mvc/beanvalidation/ValidationErrorTemplateExceptionMapper.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2022 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
@@ -17,7 +17,6 @@
 package org.glassfish.jersey.server.mvc.beanvalidation;
 
 import jakarta.ws.rs.core.Response;
-import jakarta.ws.rs.ext.Provider;
 
 import jakarta.inject.Singleton;
 import jakarta.validation.ConstraintViolationException;
diff --git a/ext/mvc-freemarker/pom.xml b/ext/mvc-freemarker/pom.xml
index 74cdc12..b50b611 100644
--- a/ext/mvc-freemarker/pom.xml
+++ b/ext/mvc-freemarker/pom.xml
@@ -68,6 +68,18 @@
         </dependency>
 
         <dependency>
+            <groupId>org.glassfish.jersey.core</groupId>
+            <artifactId>jersey-common</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.glassfish.jersey.core</groupId>
+            <artifactId>jersey-server</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+        <dependency>
             <groupId>org.glassfish.jersey.ext</groupId>
             <artifactId>jersey-mvc</artifactId>
             <version>${project.version}</version>
@@ -80,4 +92,4 @@
         </dependency>
     </dependencies>
 
-</project>
+</project>
\ 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
new file mode 100644
index 0000000..2af13d3
--- /dev/null
+++ b/ext/mvc-freemarker/src/main/java/module-info.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2022 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.ext.mvc.freemarker {
+    requires jakarta.inject;
+    requires jakarta.servlet;
+    requires jakarta.ws.rs;
+
+    requires freemarker;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.ext.mvc;
+
+    exports org.glassfish.jersey.server.mvc.freemarker;
+}
\ No newline at end of file
diff --git a/ext/mvc-jsp/pom.xml b/ext/mvc-jsp/pom.xml
index 9827cfa..4930df4 100644
--- a/ext/mvc-jsp/pom.xml
+++ b/ext/mvc-jsp/pom.xml
@@ -72,6 +72,10 @@
             <artifactId>jakarta.inject-api</artifactId>
         </dependency>
         <dependency>
+            <groupId>jakarta.el</groupId>
+            <artifactId>jakarta.el-api</artifactId>
+        </dependency>
+        <dependency>
             <groupId>org.glassfish.jersey.containers</groupId>
             <artifactId>jersey-container-servlet-core</artifactId>
             <version>${project.version}</version>
diff --git a/ext/mvc-jsp/src/main/java/module-info.java b/ext/mvc-jsp/src/main/java/module-info.java
new file mode 100644
index 0000000..60e109c
--- /dev/null
+++ b/ext/mvc-jsp/src/main/java/module-info.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2022 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.ext.mvc.jsp {
+    requires jakarta.inject;
+    requires jakarta.servlet;
+    requires jakarta.servlet.jsp;
+    requires jakarta.ws.rs;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.ext.mvc;
+
+    exports org.glassfish.jersey.server.mvc.jsp;
+}
\ No newline at end of file
diff --git a/ext/mvc-mustache/pom.xml b/ext/mvc-mustache/pom.xml
index 8c4b886..ca37327 100644
--- a/ext/mvc-mustache/pom.xml
+++ b/ext/mvc-mustache/pom.xml
@@ -61,6 +61,20 @@
 
     <dependencies>
         <dependency>
+            <groupId>jakarta.servlet</groupId>
+            <artifactId>jakarta.servlet-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.core</groupId>
+            <artifactId>jersey-common</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.core</groupId>
+            <artifactId>jersey-server</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
             <groupId>org.glassfish.jersey.ext</groupId>
             <artifactId>jersey-mvc</artifactId>
             <version>${project.version}</version>
@@ -84,4 +98,4 @@
         </dependency>
     </dependencies>
 
-</project>
+</project>
\ 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
new file mode 100644
index 0000000..65360fc
--- /dev/null
+++ b/ext/mvc-mustache/src/main/java/module-info.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2022, 2023 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.ext.mvc.mustache {
+    requires jakarta.inject;
+    requires jakarta.servlet;
+    requires jakarta.ws.rs;
+
+    requires jdk.compiler;
+
+    requires com.github.mustachejava;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.ext.mvc;
+
+    exports org.glassfish.jersey.server.mvc.mustache;
+}
\ 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
new file mode 100644
index 0000000..f3c28b6
--- /dev/null
+++ b/ext/mvc/src/main/java/module-info.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2022 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.ext.mvc {
+    requires java.logging;
+
+    requires jakarta.annotation;
+    requires jakarta.inject;
+    requires jakarta.servlet;
+    requires jakarta.ws.rs;
+
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.core.common;
+
+    exports org.glassfish.jersey.server.mvc;
+    exports org.glassfish.jersey.server.mvc.internal;
+    exports org.glassfish.jersey.server.mvc.spi;
+
+    uses org.glassfish.jersey.server.mvc.spi.TemplateProcessor;
+    uses org.glassfish.jersey.server.mvc.spi.ViewableContext;
+    uses org.glassfish.jersey.server.mvc.spi.AbstractTemplateProcessor;
+}
\ No newline at end of file
diff --git a/ext/proxy-client/pom.xml b/ext/proxy-client/pom.xml
index 5c985f9..ad2f19b 100644
--- a/ext/proxy-client/pom.xml
+++ b/ext/proxy-client/pom.xml
@@ -32,6 +32,12 @@
         Jersey extension module providing support for (proxy-based) high-level client API.
     </description>
 
+    <properties>
+        <surefire.coverage.argline>
+            --add-modules=ALL-MODULE-PATH
+        </surefire.coverage.argline>
+    </properties>
+
     <build>
         <plugins>
             <plugin>
@@ -65,10 +71,15 @@
             <version>${project.version}</version>
         </dependency>
         <dependency>
-            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
-            <artifactId>jersey-test-framework-provider-bundle</artifactId>
+            <groupId>org.glassfish.jersey.test-framework</groupId>
+            <artifactId>jersey-test-framework-core</artifactId>
             <version>${project.version}</version>
-            <type>pom</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
+            <artifactId>jersey-test-framework-provider-grizzly2</artifactId>
+            <version>${project.version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git a/ext/proxy-client/src/main/java/module-info.java b/ext/proxy-client/src/main/java/module-info.java
new file mode 100644
index 0000000..0bb2091
--- /dev/null
+++ b/ext/proxy-client/src/main/java/module-info.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2022 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.ext.proxy.client {
+    requires static java.desktop;
+
+    requires jakarta.ws.rs;
+
+    requires org.glassfish.jersey.core.common;
+
+    exports org.glassfish.jersey.client.proxy;
+    opens org.glassfish.jersey.client.proxy;
+}
\ No newline at end of file
diff --git a/ext/proxy-client/src/test/java/module-info.java b/ext/proxy-client/src/test/java/module-info.java
new file mode 100644
index 0000000..3796a82
--- /dev/null
+++ b/ext/proxy-client/src/test/java/module-info.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2023 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.ext.proxy.client {
+    requires static java.desktop;
+
+    requires jakarta.ws.rs;
+    requires jakarta.xml.bind;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+
+    requires org.glassfish.jersey.tests.framework.core;
+    requires org.glassfish.jersey.tests.framework.provider.grizzly;
+
+    requires org.junit.jupiter.api;
+    requires org.junit.jupiter.engine;
+
+    exports org.glassfish.jersey.client.proxy;
+    opens org.glassfish.jersey.client.proxy;
+
+}
\ No newline at end of file
diff --git a/ext/rx/rx-client-guava/pom.xml b/ext/rx/rx-client-guava/pom.xml
index d75a6ad..51edcb7 100644
--- a/ext/rx/rx-client-guava/pom.xml
+++ b/ext/rx/rx-client-guava/pom.xml
@@ -44,4 +44,4 @@
             <version>${guava.version}</version>
         </dependency>
     </dependencies>
-</project>
+</project>
\ No newline at end of file
diff --git a/ext/rx/rx-client-guava/src/main/java/module-info.java b/ext/rx/rx-client-guava/src/main/java/module-info.java
new file mode 100644
index 0000000..ccf5a91
--- /dev/null
+++ b/ext/rx/rx-client-guava/src/main/java/module-info.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2022, 2023 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.ext.rx.client.guava {
+    requires jakarta.ws.rs;
+
+    requires com.google.common;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.client;
+
+    exports org.glassfish.jersey.client.rx.guava;
+    opens org.glassfish.jersey.client.rx.guava;
+}
\ No newline at end of file
diff --git a/ext/rx/rx-client-rxjava/pom.xml b/ext/rx/rx-client-rxjava/pom.xml
index 4ef4318..b651824 100644
--- a/ext/rx/rx-client-rxjava/pom.xml
+++ b/ext/rx/rx-client-rxjava/pom.xml
@@ -44,4 +44,5 @@
             <version>${rxjava.version}</version>
         </dependency>
     </dependencies>
-</project>
+
+</project>
\ No newline at end of file
diff --git a/ext/rx/rx-client-rxjava/src/main/java/module-info.java b/ext/rx/rx-client-rxjava/src/main/java/module-info.java
new file mode 100644
index 0000000..1f7f9e6
--- /dev/null
+++ b/ext/rx/rx-client-rxjava/src/main/java/module-info.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2022 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.ext.rx.client.rxjava {
+    requires jakarta.ws.rs;
+
+    requires rxjava;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.client;
+
+    exports org.glassfish.jersey.client.rx.rxjava;
+    opens org.glassfish.jersey.client.rx.rxjava;
+}
\ No newline at end of file
diff --git a/ext/rx/rx-client-rxjava2/pom.xml b/ext/rx/rx-client-rxjava2/pom.xml
index 54b49bc..444ca22 100644
--- a/ext/rx/rx-client-rxjava2/pom.xml
+++ b/ext/rx/rx-client-rxjava2/pom.xml
@@ -55,4 +55,5 @@
             <version>${reactive.streams.version}</version>
         </dependency>
     </dependencies>
-</project>
+
+</project>
\ No newline at end of file
diff --git a/ext/rx/rx-client-rxjava2/src/main/java/module-info.java b/ext/rx/rx-client-rxjava2/src/main/java/module-info.java
new file mode 100644
index 0000000..70af086
--- /dev/null
+++ b/ext/rx/rx-client-rxjava2/src/main/java/module-info.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2022, 2023 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.ext.rx.client.rxjava2 {
+    requires jakarta.ws.rs;
+
+    requires io.reactivex.rxjava2;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.client;
+
+    exports org.glassfish.jersey.client.rx.rxjava2;
+    opens org.glassfish.jersey.client.rx.rxjava2;
+}
\ No newline at end of file
diff --git a/ext/wadl-doclet/pom.xml b/ext/wadl-doclet/pom.xml
index b84ff29..99848a0 100644
--- a/ext/wadl-doclet/pom.xml
+++ b/ext/wadl-doclet/pom.xml
@@ -49,10 +49,6 @@
             <version>${project.version}</version>
         </dependency>
         <dependency>
-            <groupId>xerces</groupId>
-            <artifactId>xercesImpl</artifactId>
-        </dependency>
-        <dependency>
             <groupId>org.glassfish.jersey.core</groupId>
             <artifactId>jersey-server</artifactId>
             <version>${project.version}</version>
@@ -72,4 +68,4 @@
             </resource>
         </resources>
     </build>
-</project>
+</project>
\ No newline at end of file
diff --git a/ext/wadl-doclet/src/main/java/module-info.java b/ext/wadl-doclet/src/main/java/module-info.java
new file mode 100644
index 0000000..cad70c3
--- /dev/null
+++ b/ext/wadl-doclet/src/main/java/module-info.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2022 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.ext.wadl.doclet {
+    requires java.compiler;
+    requires java.logging;
+    requires java.xml;
+
+    requires jdk.compiler;
+    requires jdk.javadoc;
+
+    requires static jakarta.xml.bind;
+
+    requires org.glassfish.jersey.core.server;
+
+    exports org.glassfish.jersey.wadl.doclet;
+}
\ No newline at end of file
diff --git a/incubator/cdi-inject-weld/pom.xml b/incubator/cdi-inject-weld/pom.xml
index 042e745..952a3f4 100644
--- a/incubator/cdi-inject-weld/pom.xml
+++ b/incubator/cdi-inject-weld/pom.xml
@@ -128,6 +128,7 @@
                 <artifactId>build-helper-maven-plugin</artifactId>
                 <inherited>true</inherited>
             </plugin>
+	    <!-- Felix plugin -->
             <plugin>
                 <groupId>org.apache.felix</groupId>
                 <artifactId>maven-bundle-plugin</artifactId>
diff --git a/incubator/cdi-inject-weld/src/main/java/module-info.txt b/incubator/cdi-inject-weld/src/main/java/module-info.txt
new file mode 100644
index 0000000..df3328a
--- /dev/null
+++ b/incubator/cdi-inject-weld/src/main/java/module-info.txt
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2022, 2023 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.incubator.cdi.inject.weld {
+    requires jakarta.annotation;
+    requires jakarta.cdi;
+    requires jakarta.inject;
+    requires jakarta.interceptor;
+    requires jakarta.servlet;
+//  requires jakarta.persistence;
+    requires jakarta.ws.rs;
+
+    requires java.logging;
+
+    requires weld.api;
+    requires weld.spi;
+    requires weld.core.impl;
+    requires weld.se.core;
+    requires weld.probe.core;
+    requires org.glassfish.grizzly.http.server;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.container.servlet.core;
+
+    opens org.glassfish.jersey.inject.weld.internal.data;
+    opens org.glassfish.jersey.inject.weld.internal.bean;
+    opens org.glassfish.jersey.inject.weld.internal.inject;
+    opens org.glassfish.jersey.inject.weld.internal.managed;
+    opens org.glassfish.jersey.inject.weld.internal.scope;
+    opens org.glassfish.jersey.inject.weld.internal.type;
+    opens org.glassfish.jersey.inject.weld.spi;
+    opens org.glassfish.jersey.inject.weld.managed;
+
+    exports org.glassfish.jersey.inject.weld.internal.data;
+    exports org.glassfish.jersey.inject.weld.internal.bean;
+    exports org.glassfish.jersey.inject.weld.internal.inject;
+    exports org.glassfish.jersey.inject.weld.internal.managed;
+    exports org.glassfish.jersey.inject.weld.internal.scope;
+    exports org.glassfish.jersey.inject.weld.internal.type;
+    exports org.glassfish.jersey.inject.weld.spi;
+    exports org.glassfish.jersey.inject.weld.managed;
+}
\ No newline at end of file
diff --git a/incubator/cdi-inject-weld/src/test/java/module-info.txt b/incubator/cdi-inject-weld/src/test/java/module-info.txt
new file mode 100644
index 0000000..e9c2e19
--- /dev/null
+++ b/incubator/cdi-inject-weld/src/test/java/module-info.txt
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2022, 2023 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.incubator.cdi.inject.weld {
+    requires jakarta.annotation;
+    requires jakarta.cdi;
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+
+    requires java.logging;
+
+    requires junit;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.core.server;
+    requires org.hamcrest;
+}
\ No newline at end of file
diff --git a/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/ClientTestParent.java b/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/ClientTestParent.java
index beb75bd..32df345 100644
--- a/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/ClientTestParent.java
+++ b/incubator/cdi-inject-weld/src/test/java/org/glassfish/jersey/inject/weld/ClientTestParent.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
diff --git a/incubator/declarative-linking/pom.xml b/incubator/declarative-linking/pom.xml
index 24909d7..4cf0839 100644
--- a/incubator/declarative-linking/pom.xml
+++ b/incubator/declarative-linking/pom.xml
@@ -126,23 +126,20 @@
         <profile>
             <id>InaccessibleObjectException</id>
             <activation><jdk>[16,)</jdk></activation>
-            <build>
-                <plugins>
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-surefire-plugin</artifactId>
-                        <configuration>
-                            <argLine>
+            <properties>
+                <surefire.coverage.argline>
                                 --add-opens java.base/java.util.zip=ALL-UNNAMED
                                 --add-opens java.base/java.util=ALL-UNNAMED
-                            </argLine>
-                        </configuration>
-                    </plugin>
-                </plugins>
-            </build>
+                </surefire.coverage.argline>
+            </properties>
         </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.txt
new file mode 100644
index 0000000..2835731
--- /dev/null
+++ b/incubator/declarative-linking/src/main/java/module-info.txt
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2022 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.incubator.declarative.linking {
+    requires jakarta.el;
+    requires jakarta.inject;
+    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;
+
+    opens org.glassfish.jersey.linking;
+    exports org.glassfish.jersey.linking;
+
+    exports org.glassfish.jersey.linking.contributing;
+    exports 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.txt
new file mode 100644
index 0000000..aee82c7
--- /dev/null
+++ b/incubator/declarative-linking/src/test/java/module-info.txt
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2022 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.incubator.declarative.linking {
+    requires junit;
+
+    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;
+}
\ No newline at end of file
diff --git a/incubator/gae-integration/pom.xml b/incubator/gae-integration/pom.xml
index f566f13..da67308 100644
--- a/incubator/gae-integration/pom.xml
+++ b/incubator/gae-integration/pom.xml
@@ -55,5 +55,25 @@
                 <directory>${project.build.directory}/legal</directory>
             </resource>
         </resources>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>default-compile</id>
+                        <configuration>
+                            <!-- compile everything to ensure module-info contains right entries -->
+                            <release>11</release>
+                            <compilerArgs>
+                                <arg>--add-reads</arg>
+                                <arg>org.glassfish.jersey.incubator.gae.integration=ALL-UNNAMED</arg>
+                                <arg>-Xdiags:verbose</arg>
+                            </compilerArgs>
+                        </configuration>
+                    </execution>
+                </executions>
+            </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
new file mode 100644
index 0000000..761af57
--- /dev/null
+++ b/incubator/gae-integration/src/main/java/module-info.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2022, 2023 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.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;
+}
\ No newline at end of file
diff --git a/incubator/html-json/pom.xml b/incubator/html-json/pom.xml
index a5eda4e..4c0dbe1 100644
--- a/incubator/html-json/pom.xml
+++ b/incubator/html-json/pom.xml
@@ -41,6 +41,17 @@
     <properties>
         <net.java.html.version>1.8.1</net.java.html.version>
         <enforcer.skip>true</enforcer.skip>
+        <surefire.coverage.argline>
+            --add-exports org.junit.platform.commons/org.junit.platform.commons.util=ALL-UNNAMED
+            --add-exports org.junit.platform.commons/org.junit.platform.commons.logging=ALL-UNNAMED
+            --add-exports org.glassfish.jersey.core.common/org.glassfish.jersey.innate=ALL-UNNAMED
+            --add-exports org.glassfish.jersey.core.common/org.glassfish.jersey.innate.virtual=ALL-UNNAMED
+            --add-reads org.glassfish.jersey.incubator.html.json=org.glassfish.jersey.core.server
+            --add-reads org.glassfish.jersey.incubator.html.json=org.glassfish.jersey.tests.framework.core
+            --add-reads org.glassfish.jersey.incubator.html.json=org.glassfish.jersey.tests.framework.provider.grizzly
+            --add-reads org.glassfish.jersey.incubator.html.json=org.junit.jupiter.api
+            --add-modules=ALL-MODULE-PATH
+        </surefire.coverage.argline>
     </properties>
 
     <dependencies>
@@ -56,7 +67,7 @@
         <dependency>
             <groupId>org.netbeans.api</groupId>
             <artifactId>org-openide-util-lookup</artifactId>
-            <version>RELEASE110</version>
+            <version>RELEASE160</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
@@ -82,11 +93,16 @@
         </dependency>
         <dependency>
             <groupId>org.glassfish.jersey.test-framework.providers</groupId>
-            <artifactId>jersey-test-framework-provider-bundle</artifactId>
+            <artifactId>jersey-test-framework-provider-grizzly2</artifactId>
             <version>${project.version}</version>
-            <type>pom</type>
             <scope>test</scope>
         </dependency>
+        <!--<dependency>
+            <groupId>org.glassfish.jersey.connectors</groupId>
+            <artifactId>jersey-apache-connector</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>-->
         <dependency>
             <groupId>org.netbeans.html</groupId>
             <artifactId>ko-ws-tyrus</artifactId>
@@ -121,5 +137,25 @@
                 <directory>${project.build.directory}/legal</directory>
             </resource>
         </resources>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>default-compile</id>
+                        <configuration>
+                            <!-- compile everything to ensure module-info contains right entries -->
+                            <release>11</release>
+                            <compilerArgs>
+                                <arg>--add-reads</arg>
+                                <arg>org.glassfish.jersey.incubator.html.json=ALL-UNNAMED</arg>
+                                <arg>-Xdiags:verbose</arg>
+                            </compilerArgs>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
     </build>
 </project>
diff --git a/incubator/html-json/src/main/java/module-info.txt b/incubator/html-json/src/main/java/module-info.txt
new file mode 100644
index 0000000..29656d9
--- /dev/null
+++ b/incubator/html-json/src/main/java/module-info.txt
@@ -0,0 +1,31 @@
+/*
+ * 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.incubator.html.json {
+    requires jakarta.annotation;
+    requires jakarta.ws.rs;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.client;
+    requires org.openide.util.lookup.RELEASE240;
+    requires net.java.html.json;
+    requires net.java.html;
+
+    exports org.glassfish.jersey.media.htmljson;
+    opens org.glassfish.jersey.media.htmljson;
+    exports org.glassfish.jersey.media.htmljson.internal;
+    opens org.glassfish.jersey.media.htmljson.internal;
+}
\ No newline at end of file
diff --git a/incubator/html-json/src/test/java/module-info.txt b/incubator/html-json/src/test/java/module-info.txt
new file mode 100644
index 0000000..d1e14d0
--- /dev/null
+++ b/incubator/html-json/src/test/java/module-info.txt
@@ -0,0 +1,36 @@
+/*
+ * 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
+ * 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.incubator.html.json {
+    requires jakarta.annotation;
+    requires jakarta.ws.rs;
+
+    requires net.java.html;
+    requires net.java.html.json;
+    requires ko.ws.tyrus;
+    requires org.openide.util.lookup.RELEASE240;
+
+    requires org.junit.jupiter.api;
+    requires org.glassfish.jersey.tests.framework.core;
+    requires org.glassfish.jersey.tests.framework.provider.grizzly;
+
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+
+//    exports org.glassfish.jersey.media.htmljson;
+    opens org.glassfish.jersey.media.htmljson;
+}
\ No newline at end of file
diff --git a/incubator/injectless-client/src/main/java/module-info.java b/incubator/injectless-client/src/main/java/module-info.java
new file mode 100644
index 0000000..aa30805
--- /dev/null
+++ b/incubator/injectless-client/src/main/java/module-info.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2024 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.incubator.injectless.client {
+
+    requires jakarta.annotation;
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.client;
+
+    exports org.glassfish.jersey.inject.injectless;
+
+    provides org.glassfish.jersey.internal.inject.InjectionManagerFactory
+            with org.glassfish.jersey.inject.injectless.NonInjectionManagerFactory;
+}
\ No newline at end of file
diff --git a/incubator/kryo/pom.xml b/incubator/kryo/pom.xml
index 24e9b5f..baa8a3b 100644
--- a/incubator/kryo/pom.xml
+++ b/incubator/kryo/pom.xml
@@ -34,6 +34,17 @@
         Jersey/JAX-RS Message Body Writer and Reader using Kryo serialization framework
     </description>
 
+    <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-reads org.glassfish.jersey.incubator.media.kryo=org.glassfish.jersey.core.server
+            --add-reads org.glassfish.jersey.incubator.media.kryo=org.glassfish.jersey.core.client
+            --add-modules=ALL-MODULE-PATH
+        </surefire.coverage.argline>
+    </properties>
+
     <dependencies>
         <dependency>
             <groupId>jakarta.ws.rs</groupId>
@@ -93,6 +104,24 @@
                     </instructions>
                 </configuration>
             </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>default-compile</id>
+                        <configuration>
+                            <!-- compile everything to ensure module-info contains right entries -->
+                            <release>11</release>
+                            <compilerArgs>
+                                <arg>--add-opens</arg>
+                                <arg>org.glassfish.jersey.incubator.media.kryo=ALL-UNNAMED</arg>
+                                <arg>-Xdiags:verbose</arg>
+                            </compilerArgs>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
         </plugins>
     </build>
 </project>
diff --git a/incubator/kryo/src/main/java/module-info.java b/incubator/kryo/src/main/java/module-info.java
new file mode 100644
index 0000000..1bed528
--- /dev/null
+++ b/incubator/kryo/src/main/java/module-info.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2022, 2023 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.incubator.media.kryo {
+    requires jakarta.annotation;
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+
+    requires kryo;
+
+    requires org.glassfish.jersey.core.common;
+
+    exports org.glassfish.jersey.kryo;
+    exports org.glassfish.jersey.kryo.internal;
+    opens org.glassfish.jersey.kryo;
+    opens org.glassfish.jersey.kryo.internal;
+}
\ No newline at end of file
diff --git a/incubator/kryo/src/test/java/module-info.test b/incubator/kryo/src/test/java/module-info.test
new file mode 100644
index 0000000..2303a42
--- /dev/null
+++ b/incubator/kryo/src/test/java/module-info.test
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2023 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.incubator.media.kryo {
+    requires jakarta.annotation;
+    requires jakarta.ws.rs;
+
+    requires kryo;
+    requires org.objectweb.asm;
+
+    requires org.junit.jupiter.api;
+    requires org.junit.jupiter.engine;
+    requires org.glassfish.jersey.tests.framework.core;
+    requires org.glassfish.jersey.tests.framework.provider.grizzly;
+
+
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+
+    exports org.glassfish.jersey.kryo;
+    exports org.glassfish.jersey.kryo.internal;
+}
\ No newline at end of file
diff --git a/incubator/kryo/src/test/java/org/glassfish/jersey/kryo/PersonResourceTest.java b/incubator/kryo/src/test/java/org/glassfish/jersey/kryo/internal/PersonResourceTest.java
similarity index 81%
rename from incubator/kryo/src/test/java/org/glassfish/jersey/kryo/PersonResourceTest.java
rename to incubator/kryo/src/test/java/org/glassfish/jersey/kryo/internal/PersonResourceTest.java
index de0e76a..7179371 100644
--- a/incubator/kryo/src/test/java/org/glassfish/jersey/kryo/PersonResourceTest.java
+++ b/incubator/kryo/src/test/java/org/glassfish/jersey/kryo/internal/PersonResourceTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2023 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,17 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.kryo;
+package org.glassfish.jersey.kryo.internal;
 
-import jakarta.ws.rs.client.Entity;
 import jakarta.ws.rs.core.Application;
-import jakarta.ws.rs.core.Response;
 
 import org.glassfish.jersey.client.ClientConfig;
+import org.glassfish.jersey.kryo.KryoContextResolver;
+import org.glassfish.jersey.kryo.PersonResource;
+import org.glassfish.jersey.kryo.PersonResourceBaseTest;
 import org.glassfish.jersey.server.ResourceConfig;
-import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
-import org.junit.jupiter.api.Test;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
 /**
  * Test for kryo resource.
  *
diff --git a/incubator/open-tracing/pom.xml b/incubator/open-tracing/pom.xml
index 35d7eb1..750e19f 100644
--- a/incubator/open-tracing/pom.xml
+++ b/incubator/open-tracing/pom.xml
@@ -85,6 +85,7 @@
                 <artifactId>build-helper-maven-plugin</artifactId>
                 <inherited>true</inherited>
             </plugin>
+	   <!-- Felix plugin -->
             <plugin>
                 <groupId>org.apache.felix</groupId>
                 <artifactId>maven-bundle-plugin</artifactId>
diff --git a/incubator/open-tracing/src/main/java/module-info.java b/incubator/open-tracing/src/main/java/module-info.java
new file mode 100644
index 0000000..aa82948
--- /dev/null
+++ b/incubator/open-tracing/src/main/java/module-info.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2022, 2023 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.incubator.open.tracing {
+    requires java.logging;
+
+    requires jakarta.ws.rs;
+
+    requires io.opentracing.api;
+    requires io.opentracing.util;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+
+    exports org.glassfish.jersey.opentracing;
+}
\ No newline at end of file
diff --git a/inject/cdi2-se/pom.xml b/inject/cdi2-se/pom.xml
index b347c02..0a16ae1 100644
--- a/inject/cdi2-se/pom.xml
+++ b/inject/cdi2-se/pom.xml
@@ -32,6 +32,10 @@
 
     <description>CDI 4 SE InjectionManager implementation</description>
 
+    <properties>
+        <surefire.coverage.argline>--add-modules=ALL-MODULE-PATH</surefire.coverage.argline>
+    </properties>
+
     <dependencies>
         <dependency>
             <groupId>org.glassfish.jersey.core</groupId>
diff --git a/inject/cdi2-se/src/main/java/module-info.java b/inject/cdi2-se/src/main/java/module-info.java
new file mode 100644
index 0000000..eeb9a42
--- /dev/null
+++ b/inject/cdi2-se/src/main/java/module-info.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2022, 2023 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.inject.cdi2.se {
+    requires java.logging;
+
+    requires jakarta.annotation;
+    requires jakarta.inject;
+    requires jakarta.interceptor;
+    requires jakarta.ws.rs;
+
+    requires jakarta.cdi;
+    requires weld.api;
+    requires weld.spi;
+
+    requires weld.core.impl;
+    requires weld.se.core;
+
+    requires org.glassfish.jersey.core.common;
+
+    exports org.glassfish.jersey.inject.cdi.se;
+    exports org.glassfish.jersey.inject.cdi.se.injector;
+    exports org.glassfish.jersey.inject.cdi.se.bean;
+
+    opens org.glassfish.jersey.inject.cdi.se;
+}
\ No newline at end of file
diff --git a/inject/hk2/pom.xml b/inject/hk2/pom.xml
index 430c9dd..5c07508 100644
--- a/inject/hk2/pom.xml
+++ b/inject/hk2/pom.xml
@@ -73,6 +73,18 @@
             <artifactId>hamcrest</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>jakarta.xml.bind</groupId>
+            <artifactId>jakarta.xml.bind-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>jakarta.annotation</groupId>
+            <artifactId>jakarta.annotation-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>jakarta.activation</groupId>
+            <artifactId>jakarta.activation-api</artifactId>
+        </dependency>
     </dependencies>
 
     <build>
@@ -94,6 +106,7 @@
                 <artifactId>build-helper-maven-plugin</artifactId>
                 <inherited>true</inherited>
             </plugin>
+	   <!-- Felix plugin -->
             <plugin>
                 <groupId>org.apache.felix</groupId>
                 <artifactId>maven-bundle-plugin</artifactId>
diff --git a/inject/hk2/src/main/java/module-info.java b/inject/hk2/src/main/java/module-info.java
new file mode 100644
index 0000000..a177113
--- /dev/null
+++ b/inject/hk2/src/main/java/module-info.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2022 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
+ */
+
+import org.glassfish.jersey.inject.hk2.Hk2InjectionManagerFactory;
+import org.glassfish.jersey.internal.inject.InjectionManagerFactory;
+
+module org.glassfish.jersey.inject.hk2 {
+
+    requires jakarta.annotation;
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+
+    requires java.logging;
+
+   //HK2 is not yet modularized
+    requires org.glassfish.hk2.api;
+    requires org.glassfish.hk2.locator;
+    requires org.glassfish.hk2.utilities;
+
+    requires org.glassfish.jersey.core.common;
+
+    exports org.glassfish.jersey.inject.hk2;
+    opens org.glassfish.jersey.inject.hk2;
+
+    provides InjectionManagerFactory
+            with Hk2InjectionManagerFactory;
+}
\ No newline at end of file
diff --git a/media/jaxb/pom.xml b/media/jaxb/pom.xml
index 2665950..16c9c93 100644
--- a/media/jaxb/pom.xml
+++ b/media/jaxb/pom.xml
@@ -30,6 +30,12 @@
     <packaging>jar</packaging>
     <name>jersey-media-jaxb</name>
 
+    <properties>
+        <surefire.security.argline>
+            --add-reads org.glassfish.jersey.media.jaxb=org.glassfish.jersey.inject.hk2
+        </surefire.security.argline>
+    </properties>
+
     <description>
         JAX-RS features based upon JAX-B.
     </description>
diff --git a/media/jaxb/src/main/java/module-info.java b/media/jaxb/src/main/java/module-info.java
new file mode 100644
index 0000000..a1fd383
--- /dev/null
+++ b/media/jaxb/src/main/java/module-info.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2022 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.jaxb {
+    requires java.logging;
+
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+    requires jakarta.xml.bind;
+
+    requires org.glassfish.jersey.core.common;
+
+    opens org.glassfish.jersey.jaxb.internal;
+
+    exports org.glassfish.jersey.jaxb;
+    exports org.glassfish.jersey.jaxb.internal;
+
+    provides org.glassfish.jersey.internal.spi.ForcedAutoDiscoverable
+            with org.glassfish.jersey.jaxb.internal.JaxbAutoDiscoverable;
+}
\ No newline at end of file
diff --git a/media/json-binding/pom.xml b/media/json-binding/pom.xml
index 1bb8c45..e2681e5 100644
--- a/media/json-binding/pom.xml
+++ b/media/json-binding/pom.xml
@@ -115,4 +115,12 @@
             <scope>test</scope>
         </dependency>
     </dependencies>
+
+    <properties>
+	<!-- JPMS relatest test config -->
+        <surefire.coverage.argline>
+            --add-reads org.glassfish.jersey.media.jsonb=org.glassfish.jersey.inject.hk2
+            --add-modules=ALL-MODULE-PATH
+        </surefire.coverage.argline>
+    </properties>
 </project>
diff --git a/media/json-binding/src/main/java/module-info.java b/media/json-binding/src/main/java/module-info.java
new file mode 100644
index 0000000..357206f
--- /dev/null
+++ b/media/json-binding/src/main/java/module-info.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2022, 2024 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.jsonb {
+    requires java.logging;
+
+    requires jakarta.annotation;
+    requires jakarta.inject;
+    requires jakarta.json.bind;
+    requires jakarta.ws.rs;
+
+    requires static osgi.resource.locator;
+
+    requires org.glassfish.jersey.core.common;
+
+    exports org.glassfish.jersey.jsonb;
+
+}
\ No newline at end of file
diff --git a/media/json-jackson/pom.xml b/media/json-jackson/pom.xml
index 8db091d..0fdeb2d 100644
--- a/media/json-jackson/pom.xml
+++ b/media/json-jackson/pom.xml
@@ -107,14 +107,6 @@
             <version>${project.version}</version>
         </dependency>
 
-        <!--<dependency>-->
-            <!--<groupId>com.fasterxml.jackson.jaxrs</groupId>-->
-            <!--<artifactId>jackson-jaxrs-base</artifactId>-->
-        <!--</dependency>-->
-        <!--<dependency>-->
-            <!--<groupId>com.fasterxml.jackson.jaxrs</groupId>-->
-            <!--<artifactId>jackson-jaxrs-json-provider</artifactId>-->
-        <!--</dependency>-->
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
             <artifactId>jackson-annotations</artifactId>
diff --git a/media/json-jackson/src/main/java/module-info.txt b/media/json-jackson/src/main/java/module-info.txt
new file mode 100644
index 0000000..bb32929
--- /dev/null
+++ b/media/json-jackson/src/main/java/module-info.txt
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2022 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 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;
+}
\ No newline at end of file
diff --git a/media/json-jackson/src/main/java/org/glassfish/jersey/jackson/internal/DefaultJacksonJaxbJsonProvider.java b/media/json-jackson/src/main/java/org/glassfish/jersey/jackson/internal/DefaultJacksonJaxbJsonProvider.java
index 0b9222c..4defc70 100644
--- a/media/json-jackson/src/main/java/org/glassfish/jersey/jackson/internal/DefaultJacksonJaxbJsonProvider.java
+++ b/media/json-jackson/src/main/java/org/glassfish/jersey/jackson/internal/DefaultJacksonJaxbJsonProvider.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020, 2024 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2020, 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
@@ -50,6 +50,7 @@
 public class DefaultJacksonJaxbJsonProvider extends JacksonJaxbJsonProvider {
     private Configuration commonConfig;
     private static final Logger LOGGER = Logger.getLogger(DefaultJacksonJaxbJsonProvider.class.getName());
+    private final boolean hasConfig;
 
     @Inject
     public DefaultJacksonJaxbJsonProvider(@Context Providers providers, @Context Configuration config) {
@@ -64,10 +65,18 @@
         this.commonConfig = config;
         _providers = providers;
 
-        Object jaxrsFeatureBag = config.getProperty(JaxrsFeatureBag.JAXRS_FEATURE);
-        if (jaxrsFeatureBag != null && (JaxrsFeatureBag.class.isInstance(jaxrsFeatureBag))) {
-            ((JaxrsFeatureBag) jaxrsFeatureBag).configureJaxrsFeatures(this);
+        boolean ex = true;
+        try {
+            Object jaxrsFeatureBag = config.getProperty(JaxrsFeatureBag.JAXRS_FEATURE);
+            if (jaxrsFeatureBag != null && (JaxrsFeatureBag.class.isInstance(jaxrsFeatureBag))) {
+                ((JaxrsFeatureBag) jaxrsFeatureBag).configureJaxrsFeatures(this);
+            }
+        } catch (RuntimeException e) {
+            // ignore - not configured
+            LOGGER.fine(LocalizationMessages.ERROR_CONFIGURING(e.getMessage()));
+            ex = false;
         }
+        hasConfig = ex;
     }
 
     @Override
@@ -82,7 +91,9 @@
     @Override
     protected JsonEndpointConfig _configForReading(ObjectReader reader, Annotation[] annotations) {
         try {
-            updateFactoryConstraints(reader.getFactory());
+            if (hasConfig) {
+                updateFactoryConstraints(reader.getFactory());
+            }
         } catch (Throwable t) {
             // A Jackson 14 would throw NoSuchMethodError, ClassNotFoundException, NoClassDefFoundError or similar
             // that should have been ignored
diff --git a/media/json-jackson/src/main/resources/org/glassfish/jersey/jackson/localization.properties b/media/json-jackson/src/main/resources/org/glassfish/jersey/jackson/localization.properties
index 1943306..1c66b9c 100644
--- a/media/json-jackson/src/main/resources/org/glassfish/jersey/jackson/localization.properties
+++ b/media/json-jackson/src/main/resources/org/glassfish/jersey/jackson/localization.properties
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2023, 2024 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
@@ -13,6 +13,7 @@
 #
 # SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
 #
+error.configuring=Error configuring the DefaultJacksonJaxbJsonProvider: {0}.
 error.jackson.streamreadconstraints=Error setting StreamReadConstraints: {0}. Possibly not Jackson 2.15?
 error.jackson.streamreadconstraints218=Error setting StreamReadConstraints: {0}. Possibly not Jackson 2.18?
 error.modules.not.loaded=Jackson modules could not be loaded: {0}
\ No newline at end of file
diff --git a/media/json-jettison/pom.xml b/media/json-jettison/pom.xml
index 8db5d88..a397fff 100644
--- a/media/json-jettison/pom.xml
+++ b/media/json-jettison/pom.xml
@@ -61,10 +61,7 @@
                         </Import-Package>
                     
                         <Export-Package>org.glassfish.jersey.jettison.*</Export-Package>
-                        
-                        <!--<Import-Package>
-                            com.sun.xml.bind.annotation;resolution:=optional,com.sun.xml.bind.v2.*;resolution:=optional, *
-                        </Import-Package>-->
+
                     </instructions>
                     <unpackBundle>true</unpackBundle>
                 </configuration>
diff --git a/media/json-jettison/src/main/java/module-info.java b/media/json-jettison/src/main/java/module-info.java
new file mode 100644
index 0000000..88ff954
--- /dev/null
+++ b/media/json-jettison/src/main/java/module-info.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2022, 2023 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.jettison {
+    requires java.logging;
+    requires java.xml;
+
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+    requires static jakarta.xml.bind;
+
+    requires jettison;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.media.jaxb;
+
+    exports org.glassfish.jersey.jettison;
+}
\ No newline at end of file
diff --git a/media/json-processing/pom.xml b/media/json-processing/pom.xml
index 3ea185d..31c1d08 100644
--- a/media/json-processing/pom.xml
+++ b/media/json-processing/pom.xml
@@ -112,4 +112,7 @@
             <scope>test</scope>
         </dependency>
     </dependencies>
+    <properties>
+        <surefire.coverage.argline>--add-modules=ALL-MODULE-PATH</surefire.coverage.argline>
+    </properties>
 </project>
diff --git a/media/json-processing/src/main/java/module-info.java b/media/json-processing/src/main/java/module-info.java
new file mode 100644
index 0000000..b509b21
--- /dev/null
+++ b/media/json-processing/src/main/java/module-info.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2022 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.processing {
+    requires jakarta.annotation;
+    requires jakarta.ws.rs;
+
+    requires org.eclipse.parsson.media;
+
+    requires org.glassfish.jersey.core.common;
+
+    exports org.glassfish.jersey.jsonp;
+    exports org.glassfish.jersey.jsonp.internal;
+}
\ No newline at end of file
diff --git a/media/json-processing/src/test/java/module-info.java b/media/json-processing/src/test/java/module-info.java
new file mode 100644
index 0000000..47b248e
--- /dev/null
+++ b/media/json-processing/src/test/java/module-info.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2023 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.media.json.processing.test {
+    requires jakarta.annotation;
+    requires jakarta.ws.rs;
+
+    requires org.eclipse.parsson.media;
+
+    requires org.junit.jupiter.api;
+
+    requires org.glassfish.jersey.media.json.processing;
+
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+
+    exports org.glassfish.jersey.jsonp.test;
+}
\ No newline at end of file
diff --git a/media/json-processing/src/test/java/org/glassfish/jersey/jsonp/JsonProcessingAutoDiscoverableClientTest.java b/media/json-processing/src/test/java/org/glassfish/jersey/jsonp/test/JsonProcessingAutoDiscoverableClientTest.java
similarity index 95%
rename from media/json-processing/src/test/java/org/glassfish/jersey/jsonp/JsonProcessingAutoDiscoverableClientTest.java
rename to media/json-processing/src/test/java/org/glassfish/jersey/jsonp/test/JsonProcessingAutoDiscoverableClientTest.java
index 2b57034..0cbe9e3 100644
--- a/media/json-processing/src/test/java/org/glassfish/jersey/jsonp/JsonProcessingAutoDiscoverableClientTest.java
+++ b/media/json-processing/src/test/java/org/glassfish/jersey/jsonp/test/JsonProcessingAutoDiscoverableClientTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2023 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.jsonp;
+package org.glassfish.jersey.jsonp.test;
 
 import java.io.IOException;
 
@@ -29,6 +29,7 @@
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.client.ClientProperties;
 
+import org.glassfish.jersey.jsonp.JsonProcessingFeature;
 import org.junit.jupiter.api.Test;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
diff --git a/media/json-processing/src/test/java/org/glassfish/jersey/jsonp/JsonProcessingAutoDiscoverableServerTest.java b/media/json-processing/src/test/java/org/glassfish/jersey/jsonp/test/JsonProcessingAutoDiscoverableServerTest.java
similarity index 96%
rename from media/json-processing/src/test/java/org/glassfish/jersey/jsonp/JsonProcessingAutoDiscoverableServerTest.java
rename to media/json-processing/src/test/java/org/glassfish/jersey/jsonp/test/JsonProcessingAutoDiscoverableServerTest.java
index 1fad557..254f33c 100644
--- a/media/json-processing/src/test/java/org/glassfish/jersey/jsonp/JsonProcessingAutoDiscoverableServerTest.java
+++ b/media/json-processing/src/test/java/org/glassfish/jersey/jsonp/test/JsonProcessingAutoDiscoverableServerTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2023 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.jsonp;
+package org.glassfish.jersey.jsonp.test;
 
 import java.io.IOException;
 import java.net.URI;
@@ -30,6 +30,7 @@
 
 import org.glassfish.jersey.CommonProperties;
 import org.glassfish.jersey.internal.MapPropertiesDelegate;
+import org.glassfish.jersey.jsonp.JsonProcessingFeature;
 import org.glassfish.jersey.server.ApplicationHandler;
 import org.glassfish.jersey.server.ContainerRequest;
 import org.glassfish.jersey.server.ResourceConfig;
diff --git a/media/moxy/pom.xml b/media/moxy/pom.xml
index febe144..5558c7b 100644
--- a/media/moxy/pom.xml
+++ b/media/moxy/pom.xml
@@ -47,7 +47,7 @@
                 <artifactId>build-helper-maven-plugin</artifactId>
                 <inherited>true</inherited>
             </plugin>
-
+	   <!-- Felix plugin -->
             <plugin>
                 <groupId>org.apache.felix</groupId>
                 <artifactId>maven-bundle-plugin</artifactId>
@@ -133,6 +133,12 @@
             <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>jakarta.activation</groupId>
+            <artifactId>jakarta.activation-api</artifactId>
+            <scope>provided</scope>
+            <optional>true</optional>
+        </dependency>
     </dependencies>
 
 </project>
\ No newline at end of file
diff --git a/media/moxy/src/main/java/module-info.java b/media/moxy/src/main/java/module-info.java
new file mode 100644
index 0000000..22e8b2f
--- /dev/null
+++ b/media/moxy/src/main/java/module-info.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2022, 2023 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.moxy {
+    requires java.logging;
+
+    requires jakarta.ws.rs;
+    requires jakarta.annotation;
+    requires jakarta.inject;
+
+    requires static jakarta.xml.bind;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.ext.entity.filtering;
+
+    requires org.eclipse.persistence.core;
+    requires org.eclipse.persistence.moxy;
+
+    exports org.glassfish.jersey.moxy.xml;
+    exports org.glassfish.jersey.moxy.json;
+    exports org.glassfish.jersey.moxy.json.internal;
+
+    opens org.glassfish.jersey.moxy.json.internal;
+}
\ No newline at end of file
diff --git a/media/multipart/pom.xml b/media/multipart/pom.xml
index 7aa98b1..5393fc3 100644
--- a/media/multipart/pom.xml
+++ b/media/multipart/pom.xml
@@ -34,6 +34,17 @@
         Jersey Multipart entity providers support module.
     </description>
 
+    <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
+        </surefire.coverage.argline>
+    </properties>
+
     <build>
         <plugins>
             <plugin>
@@ -101,6 +112,12 @@
             <version>${project.version}</version>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.media</groupId>
+            <artifactId>jersey-media-json-processing</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
 
         <dependency>
             <groupId>org.junit.jupiter</groupId>
diff --git a/media/multipart/src/main/java/module-info.java b/media/multipart/src/main/java/module-info.java
new file mode 100644
index 0000000..c131e16
--- /dev/null
+++ b/media/multipart/src/main/java/module-info.java
@@ -0,0 +1,35 @@
+/*
+ * 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.multipart {
+
+    requires java.logging;
+
+    requires jakarta.ws.rs;
+    requires jakarta.inject;
+
+    requires org.jvnet.mimepull;
+
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.core.common;
+
+    exports org.glassfish.jersey.media.multipart;
+    exports org.glassfish.jersey.media.multipart.internal;
+
+    opens org.glassfish.jersey.media.multipart;
+    opens org.glassfish.jersey.media.multipart.internal;
+}
\ No newline at end of file
diff --git a/media/multipart/src/main/java/org/glassfish/jersey/media/multipart/BodyPart.java b/media/multipart/src/main/java/org/glassfish/jersey/media/multipart/BodyPart.java
index 7287759..d672e1c 100644
--- a/media/multipart/src/main/java/org/glassfish/jersey/media/multipart/BodyPart.java
+++ b/media/multipart/src/main/java/org/glassfish/jersey/media/multipart/BodyPart.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2024 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,10 +16,13 @@
 
 package org.glassfish.jersey.media.multipart;
 
+import java.io.ByteArrayInputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
 import java.text.ParseException;
+import java.util.Arrays;
 
 import jakarta.ws.rs.ProcessingException;
 import jakarta.ws.rs.core.GenericType;
@@ -28,6 +31,7 @@
 import jakarta.ws.rs.ext.MessageBodyReader;
 import jakarta.ws.rs.ext.Providers;
 
+import org.glassfish.jersey.innate.spi.MessageBodyWorkersSettable;
 import org.glassfish.jersey.internal.util.collection.ImmutableMultivaluedMap;
 import org.glassfish.jersey.media.multipart.internal.LocalizationMessages;
 import org.glassfish.jersey.message.MessageBodyWorkers;
@@ -41,7 +45,7 @@
  * @author Paul Sandoz
  * @author Michal Gajdos
  */
-public class BodyPart {
+public class BodyPart implements MessageBodyWorkersSettable {
 
     protected ContentDisposition contentDisposition = null;
 
@@ -285,7 +289,15 @@
     }
 
     <T> T getEntityAs(final Class<T> type, Type genericType) {
-        if (entity == null || !(entity instanceof BodyPartEntity)) {
+        InputStream inputStream = null;
+        if (BodyPartEntity.class.isInstance(entity)) {
+            inputStream = ((BodyPartEntity) entity).getInputStream();
+        } else if (InputStream.class.isInstance(entity)) {
+            inputStream = (InputStream) entity;
+        } else if (byte[].class.isInstance(entity)) {
+            inputStream = new ByteArrayInputStream((byte[]) entity);
+        }
+        if (inputStream == null) {
             throw new IllegalStateException(LocalizationMessages.ENTITY_HAS_WRONG_TYPE());
         }
         if (type == BodyPartEntity.class) {
@@ -299,8 +311,7 @@
         }
 
         try {
-            return reader.readFrom(type, genericType, annotations, mediaType, headers,
-                    ((BodyPartEntity) entity).getInputStream());
+            return reader.readFrom(type, genericType, annotations, mediaType, headers, inputStream);
         } catch (final IOException ioe) {
             throw new ProcessingException(LocalizationMessages.ERROR_READING_ENTITY(String.class), ioe);
         }
diff --git a/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/ClientFilterTests.java b/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/ClientFilterTests.java
new file mode 100644
index 0000000..f7bfa53
--- /dev/null
+++ b/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/ClientFilterTests.java
@@ -0,0 +1,173 @@
+/*
+ * Copyright (c) 2024 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
+ */
+
+package org.glassfish.jersey.media.multipart;
+
+import jakarta.json.Json;
+import jakarta.json.JsonArray;
+import jakarta.json.JsonArrayBuilder;
+import jakarta.json.JsonObject;
+import jakarta.json.JsonObjectBuilder;
+import jakarta.json.JsonValue;
+import jakarta.ws.rs.BadRequestException;
+import jakarta.ws.rs.client.Client;
+import jakarta.ws.rs.client.ClientBuilder;
+import jakarta.ws.rs.client.ClientRequestContext;
+import jakarta.ws.rs.client.ClientRequestFilter;
+import jakarta.ws.rs.client.Entity;
+import jakarta.ws.rs.core.EntityPart;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UncheckedIOException;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * Tests in clientFilter before the multipart provider is invoked.
+ * Check the workers are set.
+ *
+ * Modified MP Rest Client TCK tests
+ */
+public class ClientFilterTests {
+    /**
+     * Tests that a single file is upload. The response is a simple JSON response with the file information.
+     *
+     * @throws Exception
+     *             if a test error occurs
+     */
+    @Test
+    public void uploadFile() throws Exception {
+        try (Client client = createClient()) {
+            final byte[] content;
+            try (InputStream in = ClientFilterTests.class.getResourceAsStream("/multipart/test-file1.txt")) {
+                Assertions.assertNotNull(in, "Could not find /multipart/test-file1.txt");
+                content = in.readAllBytes();
+            }
+            // Send in an InputStream to ensure it works with an InputStream
+            final List<EntityPart> files = List.of(EntityPart.withFileName("test-file1.txt")
+                    .content(new ByteArrayInputStream(content))
+                    .mediaType(MediaType.APPLICATION_OCTET_STREAM_TYPE)
+                    .build());
+            try (Response response = client.target("http://localhost").request()
+                    .post(Entity.entity(files, MediaType.MULTIPART_FORM_DATA))) {
+                Assertions.assertEquals(201, response.getStatus());
+                final JsonArray jsonArray = response.readEntity(JsonArray.class);
+                Assertions.assertNotNull(jsonArray);
+                Assertions.assertEquals(jsonArray.size(), 1);
+                final JsonObject json = jsonArray.getJsonObject(0);
+                Assertions.assertEquals(json.getString("name"), "test-file1.txt");
+                Assertions.assertEquals(json.getString("fileName"), "test-file1.txt");
+                Assertions.assertEquals(json.getString("content"), "This is a test file for file 1.");
+            }
+        }
+    }
+
+    /**
+     * Tests that two files are upload. The response is a simple JSON response with the file information.
+     *
+     * @throws Exception
+     *             if a test error occurs
+     */
+    @Test
+    public void uploadMultipleFiles() throws Exception {
+        try (Client client = createClient()) {
+            final Map<String, byte[]> entityPartContent = new LinkedHashMap<>(2);
+            try (InputStream in = ClientFilterTests.class.getResourceAsStream("/multipart/test-file1.txt")) {
+                Assertions.assertNotNull(in, "Could not find /multipart/test-file1.txt");
+                entityPartContent.put("test-file1.txt", in.readAllBytes());
+            }
+            try (InputStream in = ClientFilterTests.class.getResourceAsStream("/multipart/test-file2.txt")) {
+                Assertions.assertNotNull(in, "Could not find /multipart/test-file2.txt");
+                entityPartContent.put("test-file2.txt", in.readAllBytes());
+            }
+            final List<EntityPart> files = entityPartContent.entrySet()
+                    .stream()
+                    .map((entry) -> {
+                        try {
+                            return EntityPart.withName(entry.getKey())
+                                    .fileName(entry.getKey())
+                                    .content(entry.getValue())
+                                    .mediaType(MediaType.APPLICATION_OCTET_STREAM_TYPE)
+                                    .build();
+                        } catch (IOException e) {
+                            throw new UncheckedIOException(e);
+                        }
+                    })
+                    .collect(Collectors.toList());
+
+            try (Response response = client.target("http://localhost").request()
+                    .post(Entity.entity(files, MediaType.MULTIPART_FORM_DATA))) {
+                Assertions.assertEquals(201, response.getStatus());
+                final JsonArray jsonArray = response.readEntity(JsonArray.class);
+                Assertions.assertNotNull(jsonArray);
+                Assertions.assertEquals(jsonArray.size(), 2);
+                // Don't assume the results are in a specific order
+                for (JsonValue value : jsonArray) {
+                    final JsonObject json = value.asJsonObject();
+                    if (json.getString("name").equals("test-file1.txt")) {
+                        Assertions.assertEquals(json.getString("fileName"), "test-file1.txt");
+                        Assertions.assertEquals(json.getString("content"), "This is a test file for file 1.");
+                    } else if (json.getString("name").equals("test-file2.txt")) {
+                        Assertions.assertEquals(json.getString("fileName"), "test-file2.txt");
+                        Assertions.assertEquals(json.getString("content"), "This is a test file for file 2.");
+                    } else {
+                        Assertions.fail(String.format("Unexpected entry %s in JSON response: %n%s", json, jsonArray));
+                    }
+                }
+            }
+        }
+    }
+
+    private static Client createClient() {
+        return ClientBuilder.newClient().register(new FileManagerFilter());
+    }
+
+    public static class FileManagerFilter implements ClientRequestFilter {
+
+        @Override
+        public void filter(final ClientRequestContext requestContext) throws IOException {
+            if (requestContext.getMethod().equals("POST")) {
+                // Download the file
+                @SuppressWarnings("unchecked")
+                final List<EntityPart> entityParts = (List<EntityPart>) requestContext.getEntity();
+                final JsonArrayBuilder jsonBuilder = Json.createArrayBuilder();
+                for (EntityPart part : entityParts) {
+                    final JsonObjectBuilder jsonPartBuilder = Json.createObjectBuilder();
+                    jsonPartBuilder.add("name", part.getName());
+                    if (part.getFileName().isPresent()) {
+                        jsonPartBuilder.add("fileName", part.getFileName().get());
+                    } else {
+                        throw new BadRequestException("No file name for entity part " + part);
+                    }
+                    jsonPartBuilder.add("content", part.getContent(String.class));
+                    jsonBuilder.add(jsonPartBuilder);
+                }
+                requestContext.abortWith(Response.status(201).entity(jsonBuilder.build()).build());
+            } else {
+                requestContext
+                        .abortWith(Response.status(Response.Status.BAD_REQUEST).entity("Invalid request").build());
+            }
+        }
+    }
+}
diff --git a/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/internal/MultiPartHeaderModificationTest.java b/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/internal/MultiPartHeaderModificationTest.java
index abbd817..140b916 100644
--- a/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/internal/MultiPartHeaderModificationTest.java
+++ b/media/multipart/src/test/java/org/glassfish/jersey/media/multipart/internal/MultiPartHeaderModificationTest.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
diff --git a/media/multipart/src/test/resources/multipart/test-file1.txt b/media/multipart/src/test/resources/multipart/test-file1.txt
new file mode 100644
index 0000000..2ac045a
--- /dev/null
+++ b/media/multipart/src/test/resources/multipart/test-file1.txt
@@ -0,0 +1 @@
+This is a test file for file 1.
\ No newline at end of file
diff --git a/media/multipart/src/test/resources/multipart/test-file2.txt b/media/multipart/src/test/resources/multipart/test-file2.txt
new file mode 100644
index 0000000..ed72b76
--- /dev/null
+++ b/media/multipart/src/test/resources/multipart/test-file2.txt
@@ -0,0 +1 @@
+This is a test file for file 2.
\ No newline at end of file
diff --git a/media/sse/pom.xml b/media/sse/pom.xml
index 70291de..97db1e1 100644
--- a/media/sse/pom.xml
+++ b/media/sse/pom.xml
@@ -56,6 +56,12 @@
             <type>pom</type>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>jakarta.xml.bind</groupId>
+            <artifactId>jakarta.xml.bind-api</artifactId>
+            <scope>provided</scope>
+            <optional>true</optional>
+        </dependency>
     </dependencies>
 
     <build>
@@ -86,5 +92,14 @@
             </plugin>
         </plugins>
     </build>
-
+    <properties>
+        <surefire.coverage.argline>
+            --add-opens org.glassfish.jersey.core.common/org.glassfish.jersey.innate=ALL-UNNAMED
+            --add-opens org.glassfish.jersey.core.common/org.glassfish.jersey.innate.virtual=ALL-UNNAMED
+            --add-reads org.glassfish.jersey.media.sse=org.glassfish.jersey.inject.hk2
+            --add-opens org.glassfish.jersey.core.common/org.glassfish.jersey.innate.inject=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>
 </project>
diff --git a/media/sse/src/main/java/module-info.java b/media/sse/src/main/java/module-info.java
new file mode 100644
index 0000000..bf1a5fb
--- /dev/null
+++ b/media/sse/src/main/java/module-info.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2022 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.sse {
+    requires java.logging;
+
+    requires jakarta.annotation;
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+
+    requires static jakarta.xml.bind;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.core.server;
+
+    exports org.glassfish.jersey.media.sse;
+    exports org.glassfish.jersey.media.sse.internal;
+
+    opens org.glassfish.jersey.media.sse;
+    opens org.glassfish.jersey.media.sse.internal;
+
+    provides jakarta.ws.rs.sse.SseEventSource.Builder with
+            org.glassfish.jersey.media.sse.internal.JerseySseEventSource.Builder;
+}
\ No newline at end of file
diff --git a/media/sse/src/test/java/module-info.txt b/media/sse/src/test/java/module-info.txt
new file mode 100644
index 0000000..6d13930
--- /dev/null
+++ b/media/sse/src/test/java/module-info.txt
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2022 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.sse {
+    requires java.logging;
+
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+
+    requires jakarta.xml.bind; //it's test
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.core.server;
+
+    requires junit;
+    requires org.junit.jupiter.api;
+    requires org.junit.jupiter.engine;
+
+    requires org.glassfish.jersey.tests.framework.core;
+
+    exports org.glassfish.jersey.media.sse;
+    exports org.glassfish.jersey.media.sse.internal;
+    opens org.glassfish.jersey.media.sse;
+}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index e7bbf59..9dba7fc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -579,6 +579,7 @@
                         <configLocation>etc/config/checkstyle.xml</configLocation>
                         <suppressionsLocation>etc/config/checkstyle-suppressions.xml</suppressionsLocation>
                         <outputFile>${project.build.directory}/checkstyle/checkstyle-result.xml</outputFile>
+                        <excludes>**/module-info.java</excludes>
                     </configuration>
                     <dependencies>
                         <dependency>
@@ -890,6 +891,77 @@
 
     <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>
@@ -1854,6 +1926,11 @@
 
             <!-- Weld -->
             <dependency>
+                <groupId>org.jboss.weld</groupId>
+                <artifactId>weld-api</artifactId>
+                <version>${weld.api.version}</version>
+            </dependency>
+            <dependency>
                 <groupId>org.jboss.weld.se</groupId>
                 <artifactId>weld-se-core</artifactId>
                 <version>${weld.version}</version>
@@ -2081,7 +2158,7 @@
         <install.mvn.plugin.version>3.1.2</install.mvn.plugin.version>
         <istack.mvn.plugin.version>4.2.0</istack.mvn.plugin.version>
         <jar.mvn.plugin.version>3.4.2</jar.mvn.plugin.version>
-        <javadoc.mvn.plugin.version>3.8.0</javadoc.mvn.plugin.version>
+        <javadoc.mvn.plugin.version>3.11.2</javadoc.mvn.plugin.version>
         <jxr.mvn.plugin.version>3.4.0</jxr.mvn.plugin.version>
         <paxexam.mvn.plugin.version>1.2.4</paxexam.mvn.plugin.version>
         <project.info.reports.mvn.plugin.version>3.6.2</project.info.reports.mvn.plugin.version>
@@ -2123,7 +2200,7 @@
         <!--versions, extracted here due to maven-enforcer-plugin -->
         <!--        <commons.codec.version>1.15</commons.codec.version>-->
         <com.uber.jaeger.version>0.27.0</com.uber.jaeger.version>
-        <org.codehaus.gmavenplus.version>3.0.2</org.codehaus.gmavenplus.version>
+        <org.codehaus.gmavenplus.version>4.1.1</org.codehaus.gmavenplus.version>
         <!-- end of versions extracted here due to maven-enforcer-plugin -->
 
         <!-- micrometer -->
@@ -2132,9 +2209,11 @@
 
         <!-- microprofile -->
         <microprofile.config.version>3.0.3</microprofile.config.version>
-        <microprofile.rest.client.version>3.0.1</microprofile.rest.client.version>
+        <microprofile.rest.client3.version>3.0.1</microprofile.rest.client3.version>
+        <microprofile.rest.client.version>4.0</microprofile.rest.client.version>
         <helidon.config.version>3.2.8</helidon.config.version>
-        <helidon.jersey.connector.version>3.2.8</helidon.jersey.connector.version>
+        <helidon.connector.version>3.2.8</helidon.connector.version>
+        <helidon.config.11.version>1.4.14</helidon.config.11.version> <!-- JDK 11- support -->
         <smallrye.config.version>3.9.1</smallrye.config.version>
 
         <guava.version>33.3.0-jre</guava.version>
@@ -2146,7 +2225,7 @@
         <javassist.version>3.30.2-GA</javassist.version>
         <jettison.version>1.3.7</jettison.version> <!-- TODO: 1.3.8 doesn't work; AbstractJsonTest complexBeanWithAttributes -->
         <jboss.vfs.version>3.3.2.Final</jboss.vfs.version>
-        <jboss.logging.version>3.6.0.Final</jboss.logging.version>
+        <jboss.logging.version>3.6.1.Final</jboss.logging.version>
         <jmh.version>1.37</jmh.version>
         <jmockit.version>1.49</jmockit.version>
         <junit4.version>4.13.2</junit4.version>
@@ -2180,10 +2259,12 @@
         <testng6.version>6.14.3</testng6.version>
         <thymeleaf.version>3.1.2.RELEASE</thymeleaf.version>
         <!-- Jakartified, eligible for CQ -->
-        <weld.version>6.0.0.Beta4</weld.version>
+        <weld.api.version>6.0.Final</weld.api.version>
+        <weld.version>6.0.1.Final</weld.version>
         <validation.impl.version>8.0.1.Final</validation.impl.version>
         <!-- END of Jakartified, eligible for CQ -->
-        <wiremock.version>2.27.2</wiremock.version>
+        <wiremock.jetty9.version>2.27.2</wiremock.jetty9.version>
+        <wiremock.jetty11.version>3.10.0</wiremock.jetty11.version>
         <xerces.version>2.12.2</xerces.version>
 
         <!-- Graal VM       -->
@@ -2228,6 +2309,7 @@
         <jetty.osgi.version>org.eclipse.jetty.*;version="[11,15)"</jetty.osgi.version>
         <jetty.version>12.0.14</jetty.version>
         <jetty9.version>9.4.56.v20240826</jetty9.version>
+        <jetty.servlet.api.version>5.0.2</jetty.servlet.api.version>
         <jetty11.version>11.0.24</jetty11.version>
         <jetty.plugin.version>12.0.8</jetty.plugin.version>
         <jsonb.api.version>3.0.1</jsonb.api.version>
diff --git a/security/oauth1-client/src/main/java/module-info.java b/security/oauth1-client/src/main/java/module-info.java
new file mode 100644
index 0000000..db52226
--- /dev/null
+++ b/security/oauth1-client/src/main/java/module-info.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2022 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.security.oauth1.client {
+    requires java.logging;
+
+    requires jakarta.annotation;
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.security.oauth1.signature;
+
+    exports org.glassfish.jersey.client.oauth1;
+}
\ 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
new file mode 100644
index 0000000..48b82e9
--- /dev/null
+++ b/security/oauth1-server/src/main/java/module-info.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2022 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.security.oauth1.server {
+    requires java.logging;
+
+    requires jakarta.annotation;
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.security.oauth1.signature;
+
+    exports org.glassfish.jersey.server.oauth1;
+    exports org.glassfish.jersey.server.oauth1.internal;
+
+    opens org.glassfish.jersey.server.oauth1;
+}
\ 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
new file mode 100644
index 0000000..23af5eb
--- /dev/null
+++ b/security/oauth1-signature/src/main/java/module-info.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2022 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.security.oauth1.signature {
+    requires java.logging;
+
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+
+    requires org.glassfish.jersey.core.common;
+
+    exports org.glassfish.jersey.oauth1.signature;
+}
\ 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
new file mode 100644
index 0000000..dee4ae1
--- /dev/null
+++ b/security/oauth2-client/src/main/java/module-info.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2022 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.security.oauth2.client {
+    requires jakarta.annotation;
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+
+    requires org.glassfish.jersey.core.common;
+
+    exports org.glassfish.jersey.client.oauth2;
+}
\ No newline at end of file
diff --git a/test-framework/core/pom.xml b/test-framework/core/pom.xml
index 1f0468d..fc74385 100644
--- a/test-framework/core/pom.xml
+++ b/test-framework/core/pom.xml
@@ -38,6 +38,10 @@
             <artifactId>jakarta.xml.bind-api</artifactId>
         </dependency>
         <dependency>
+            <groupId>jakarta.persistence</groupId>
+            <artifactId>jakarta.persistence-api</artifactId>
+        </dependency>
+        <dependency>
             <groupId>jakarta.servlet</groupId>
             <artifactId>jakarta.servlet-api</artifactId>
         </dependency>
@@ -77,6 +81,35 @@
         </dependency>
     </dependencies>
 
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>default-compile</id>
+                        <configuration>
+                            <compilerArgs>
+                                <arg>--add-exports</arg>
+                                <arg>org.junit.platform.commons/org.junit.platform.commons.util=org.glassfish.jersey.tests.framework.core</arg>
+                            </compilerArgs>
+                            <release>11</release>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+    <properties>
+        <surefire.coverage.argline>
+            --add-exports org.junit.platform.commons/org.junit.platform.commons.util=ALL-UNNAMED
+            --add-exports org.junit.platform.commons/org.junit.platform.commons.logging=ALL-UNNAMED
+            --add-modules=ALL-MODULE-PATH
+        </surefire.coverage.argline>
+    </properties>
+
     <profiles>
         <profile>
             <id>sonar</id>
diff --git a/test-framework/core/src/main/java/module-info.java b/test-framework/core/src/main/java/module-info.java
new file mode 100644
index 0000000..c355860
--- /dev/null
+++ b/test-framework/core/src/main/java/module-info.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2022, 2023 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.framework.core {
+    requires jakarta.ws.rs;
+    requires jakarta.xml.bind;
+    requires static jakarta.servlet;
+    requires static jakarta.persistence;
+
+    requires java.logging;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.container.servlet.core;
+
+
+    requires static junit;
+    requires static org.junit.jupiter.api;
+
+    requires static testng;
+
+    exports org.glassfish.jersey.test;
+    exports org.glassfish.jersey.test.spi;
+    opens org.glassfish.jersey.test;
+    opens org.glassfish.jersey.test.spi;
+}
diff --git a/test-framework/core/src/main/java/org/glassfish/jersey/test/spi/TestHelper.java b/test-framework/core/src/main/java/org/glassfish/jersey/test/spi/TestHelper.java
index 0aabca5..38faa7a 100644
--- a/test-framework/core/src/main/java/org/glassfish/jersey/test/spi/TestHelper.java
+++ b/test-framework/core/src/main/java/org/glassfish/jersey/test/spi/TestHelper.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2024 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,7 +24,8 @@
 
 import org.junit.jupiter.api.DynamicContainer;
 import org.junit.jupiter.api.DynamicTest;
-import org.junit.platform.commons.util.ReflectionUtils;
+import org.junit.platform.commons.support.HierarchyTraversalMode;
+import org.junit.platform.commons.support.ReflectionSupport;
 
 /**
  * Helper class for Jersey Test Framework.
@@ -54,13 +55,16 @@
 
     public static DynamicContainer toTestContainer(Object test, String displayName) {
         Class<?> klass = test.getClass();
-        List<Method> testMethods = ReflectionUtils.findMethods(klass,
+        List<Method> testMethods = ReflectionSupport.findMethods(klass,
                 method -> method.isAnnotationPresent(org.junit.jupiter.api.Test.class)
-                && !method.isAnnotationPresent(org.junit.jupiter.api.Disabled.class));
-        List<Method> beforeEachMethods = ReflectionUtils.findMethods(klass,
-                method -> method.isAnnotationPresent(org.junit.jupiter.api.BeforeEach.class));
-        List<Method> afterEachMethods = ReflectionUtils.findMethods(klass,
-                method -> method.isAnnotationPresent(org.junit.jupiter.api.AfterEach.class));
+                && !method.isAnnotationPresent(org.junit.jupiter.api.Disabled.class),
+                HierarchyTraversalMode.TOP_DOWN);
+        List<Method> beforeEachMethods = ReflectionSupport.findMethods(klass,
+                method -> method.isAnnotationPresent(org.junit.jupiter.api.BeforeEach.class),
+                HierarchyTraversalMode.TOP_DOWN);
+        List<Method> afterEachMethods = ReflectionSupport.findMethods(klass,
+                method -> method.isAnnotationPresent(org.junit.jupiter.api.AfterEach.class),
+                HierarchyTraversalMode.TOP_DOWN);
         Collection<DynamicTest> children = new ArrayList<>();
         for (Method method : testMethods) {
             children.add(DynamicTest.dynamicTest(method.getName(), () -> {
diff --git a/test-framework/maven/container-runner-maven-plugin/pom.xml b/test-framework/maven/container-runner-maven-plugin/pom.xml
index 9cc0957..1dab9c0 100644
--- a/test-framework/maven/container-runner-maven-plugin/pom.xml
+++ b/test-framework/maven/container-runner-maven-plugin/pom.xml
@@ -36,10 +36,10 @@
     </description>
 
     <properties>
-        <groovy-eclipse-compiler.version>3.7.0</groovy-eclipse-compiler.version>
-        <groovy-eclipse-batch.version>3.0.8-01</groovy-eclipse-batch.version>
-        <maven.version>3.9.2</maven.version>
-        <maven-plugin.version>3.9.0</maven-plugin.version>
+        <groovy-eclipse-compiler.version>3.9.0</groovy-eclipse-compiler.version>
+        <groovy-eclipse-batch.version>4.0.26-01</groovy-eclipse-batch.version>
+        <maven.version>3.9.9</maven.version>
+        <maven-plugin.version>3.15.1</maven-plugin.version>
     </properties>
 
     <dependencies>
@@ -284,6 +284,13 @@
         </pluginManagement>
     </build>
 
+    <pluginRepositories>
+        <pluginRepository>
+            <id>groovy-plugins-release</id>
+            <url>https://groovy.jfrog.io/artifactory/plugins-release</url>
+        </pluginRepository>
+    </pluginRepositories>
+
     <profiles>
         <profile>
             <id>doesnt-work-on-windows</id>
diff --git a/test-framework/providers/external/src/main/java/module-info.java b/test-framework/providers/external/src/main/java/module-info.java
new file mode 100644
index 0000000..3a8a463
--- /dev/null
+++ b/test-framework/providers/external/src/main/java/module-info.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2022 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.framework.provider.external {
+    requires jakarta.ws.rs;
+    requires java.logging;
+
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.core.common;
+    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/pom.xml b/test-framework/providers/grizzly2/pom.xml
index e67336d..1617324 100644
--- a/test-framework/providers/grizzly2/pom.xml
+++ b/test-framework/providers/grizzly2/pom.xml
@@ -53,5 +53,10 @@
             <artifactId>jersey-container-grizzly2-servlet</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/grizzly2/src/main/java/module-info.java b/test-framework/providers/grizzly2/src/main/java/module-info.java
new file mode 100644
index 0000000..f5dab7a
--- /dev/null
+++ b/test-framework/providers/grizzly2/src/main/java/module-info.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2022, 2023 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.framework.provider.grizzly {
+    requires java.logging;
+
+    requires jakarta.servlet;
+    requires jakarta.ws.rs;
+
+    requires org.glassfish.grizzly;
+    requires org.glassfish.grizzly.http.server;
+    requires org.glassfish.grizzly.servlet;
+
+    requires org.glassfish.jersey.tests.framework.core;
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.container.grizzly2.http;
+    requires org.glassfish.jersey.container.grizzly2.servlet;
+
+    exports org.glassfish.jersey.test.grizzly;
+}
\ 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
new file mode 100644
index 0000000..e0f1309
--- /dev/null
+++ b/test-framework/providers/grizzly2/src/test/java/module-info.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2022, 2023 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.framework.provider.grizzly {
+    requires java.logging;
+
+    requires jakarta.inject;
+    requires jakarta.servlet;
+    requires jakarta.ws.rs;
+
+    requires org.glassfish.grizzly;
+    requires org.glassfish.grizzly.servlet;
+    requires org.glassfish.grizzly.http.server;
+
+    requires org.glassfish.jersey.tests.framework.core;
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.container.grizzly2.http;
+    requires org.glassfish.jersey.container.grizzly2.servlet;
+    requires org.glassfish.jersey.container.servlet.core;
+
+    exports org.glassfish.jersey.test.grizzly;
+    exports org.glassfish.jersey.test.grizzly.pckg;
+    exports org.glassfish.jersey.test.grizzly.web;
+    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;
+}
\ No newline at end of file
diff --git a/test-framework/providers/jetty-http2/pom.xml b/test-framework/providers/jetty-http2/pom.xml
index e5e15bb..99fd5ae 100644
--- a/test-framework/providers/jetty-http2/pom.xml
+++ b/test-framework/providers/jetty-http2/pom.xml
@@ -42,6 +42,11 @@
             <artifactId>jersey-container-jetty-http2</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
 </project>
\ 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
new file mode 100644
index 0000000..e38362e
--- /dev/null
+++ b/test-framework/providers/jetty-http2/src/main/java/module-info.java
@@ -0,0 +1,31 @@
+/*
+ * 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
+ * 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.framework.provider.jetty.http2 {
+    requires java.logging;
+
+    requires jakarta.servlet;
+    requires jakarta.ws.rs;
+
+    requires org.eclipse.jetty.server;
+
+    requires org.glassfish.jersey.tests.framework.core;
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.container.jetty.http2;
+
+    exports org.glassfish.jersey.test.jetty.http2;
+}
\ 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
new file mode 100644
index 0000000..b539bf2
--- /dev/null
+++ b/test-framework/providers/jetty-http2/src/test/java/module-info.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2023 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.framework.provider.jetty.http2 {
+    requires java.logging;
+
+    requires jakarta.ws.rs;
+
+    requires org.eclipse.jetty.server;
+
+    requires org.glassfish.jersey.tests.framework.core;
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.container.jetty.http;
+    requires org.glassfish.jersey.container.jetty.http2;
+    requires org.glassfish.jersey.inject.hk2;
+
+    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/pom.xml b/test-framework/providers/jetty/pom.xml
index e5cd888..34c0d04 100644
--- a/test-framework/providers/jetty/pom.xml
+++ b/test-framework/providers/jetty/pom.xml
@@ -47,6 +47,11 @@
             <artifactId>slf4j-api</artifactId>
             <version>${slf4j.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
 </project>
\ 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
new file mode 100644
index 0000000..693764c
--- /dev/null
+++ b/test-framework/providers/jetty/src/main/java/module-info.java
@@ -0,0 +1,30 @@
+/*
+ * 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
+ * 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.framework.provider.jetty {
+    requires java.logging;
+
+    requires jakarta.ws.rs;
+
+    requires org.eclipse.jetty.server;
+
+    requires org.glassfish.jersey.tests.framework.core;
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.container.jetty.http;
+
+    exports org.glassfish.jersey.test.jetty;
+}
\ No newline at end of file
diff --git a/test-framework/providers/jetty/src/main/java11/org/glassfish/jersey/test/jetty/JettyTestContainerFactory.java b/test-framework/providers/jetty/src/main/java11/org/glassfish/jersey/test/jetty/JettyTestContainerFactory.java
index 16be885..b487361 100644
--- a/test-framework/providers/jetty/src/main/java11/org/glassfish/jersey/test/jetty/JettyTestContainerFactory.java
+++ b/test-framework/providers/jetty/src/main/java11/org/glassfish/jersey/test/jetty/JettyTestContainerFactory.java
@@ -18,7 +18,7 @@
 
 import java.util.Map;
 import jakarta.ws.rs.ProcessingException;
-import org.glassfish.jersey.jetty.internal.LocalizationMessages;
+import org.glassfish.jersey.test.jetty.internal.LocalizationMessages;
 import org.glassfish.jersey.test.DeploymentContext;
 import org.glassfish.jersey.test.spi.TestContainer;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
diff --git a/test-framework/providers/jetty/src/test/java/module-info.java b/test-framework/providers/jetty/src/test/java/module-info.java
new file mode 100644
index 0000000..43485ec
--- /dev/null
+++ b/test-framework/providers/jetty/src/test/java/module-info.java
@@ -0,0 +1,41 @@
+/*
+ * 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
+ * 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.framework.provider.jetty {
+    requires java.logging;
+
+    requires jakarta.inject;
+    requires static jakarta.servlet;
+    requires jakarta.ws.rs;
+
+    requires org.eclipse.jetty.server;
+
+    requires org.glassfish.jersey.tests.framework.core;
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.container.jetty.http;
+    requires org.glassfish.jersey.inject.hk2;
+
+    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;
+    requires org.hamcrest;
+}
\ No newline at end of file
diff --git a/tests/e2e-tls/pom.xml b/tests/e2e-tls/pom.xml
index 7aa88b9..187b24d 100644
--- a/tests/e2e-tls/pom.xml
+++ b/tests/e2e-tls/pom.xml
@@ -146,5 +146,5 @@
             --add-opens java.base/sun.net.www.protocol.https=ALL-UNNAMED
         </http.patch.addopens>
     </properties>
-    
+
 </project>
diff --git a/tests/e2e-tls/src/test/java/org/glassfish/jersey/tests/e2e/tls/SniTest.java b/tests/e2e-tls/src/test/java/org/glassfish/jersey/tests/e2e/tls/SniTest.java
index 9c64c2d..7ac593f 100644
--- a/tests/e2e-tls/src/test/java/org/glassfish/jersey/tests/e2e/tls/SniTest.java
+++ b/tests/e2e-tls/src/test/java/org/glassfish/jersey/tests/e2e/tls/SniTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2023, 2024 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
diff --git a/tests/integration/JERSEY-2988/pom.xml b/tests/integration/JERSEY-2988/pom.xml
index ea11488..74c3db0 100644
--- a/tests/integration/JERSEY-2988/pom.xml
+++ b/tests/integration/JERSEY-2988/pom.xml
@@ -80,8 +80,9 @@
                 <artifactId>maven-failsafe-plugin</artifactId>
             </plugin>
             <plugin>
-                <groupId>org.mortbay.jetty</groupId>
+                <groupId>org.eclipse.jetty</groupId>
                 <artifactId>jetty-maven-plugin</artifactId>
+                <version>${jetty11.version}</version>
             </plugin>
         </plugins>
     </build>
diff --git a/tests/integration/async-jersey-filter/pom.xml b/tests/integration/async-jersey-filter/pom.xml
index 40f71e4..7c044c6 100644
--- a/tests/integration/async-jersey-filter/pom.xml
+++ b/tests/integration/async-jersey-filter/pom.xml
@@ -42,6 +42,11 @@
             <artifactId>jersey-container-servlet</artifactId>
         </dependency>
         <dependency>
+            <groupId>org.glassfish.jersey.test-framework</groupId>
+            <artifactId>jersey-test-framework-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.glassfish.jersey.test-framework.providers</groupId>
             <artifactId>jersey-test-framework-provider-external</artifactId>
             <scope>test</scope>
@@ -51,16 +56,27 @@
             <artifactId>jakarta.servlet-api</artifactId>
             <scope>provided</scope>
         </dependency>
+        <dependency>
+            <groupId>jakarta.xml.bind</groupId>
+            <artifactId>jakarta.xml.bind-api</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-api</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
         <plugins>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-failsafe-plugin</artifactId>
             </plugin>
             <plugin>
diff --git a/tests/integration/async-jersey-filter/src/main/java/module-info.java b/tests/integration/async-jersey-filter/src/main/java/module-info.java
new file mode 100644
index 0000000..9483986
--- /dev/null
+++ b/tests/integration/async-jersey-filter/src/main/java/module-info.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2022 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.integration.async.jersey.filter {
+    requires jakarta.inject;
+//    requires jakarta.persistence;
+    requires jakarta.servlet;
+    requires jakarta.ws.rs;
+
+    requires jakarta.xml.bind;
+
+    requires java.logging;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.container.servlet.core;
+
+    exports org.glassfish.jersey.tests.integration.async;
+    exports org.glassfish.jersey.tests.integration.jersey2730;
+    exports org.glassfish.jersey.tests.integration.jersey2812;
+
+    opens org.glassfish.jersey.tests.integration.async;
+    opens org.glassfish.jersey.tests.integration.jersey2812;
+    opens org.glassfish.jersey.tests.integration.jersey2730;
+}
\ No newline at end of file
diff --git a/tests/integration/async-jersey-filter/src/test/java/module-info.java b/tests/integration/async-jersey-filter/src/test/java/module-info.java
new file mode 100644
index 0000000..f6cc40c
--- /dev/null
+++ b/tests/integration/async-jersey-filter/src/test/java/module-info.java
@@ -0,0 +1,38 @@
+/*
+ * 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.tests.integration.async.jersey.filter {
+    requires java.logging;
+
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+    requires jakarta.servlet;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.container.servlet.core;
+    requires org.glassfish.jersey.tests.framework.core;
+    requires org.glassfish.jersey.tests.framework.provider.external;
+
+    requires org.junit.jupiter.api;
+    requires org.junit.jupiter.engine;
+    requires org.junit.platform.engine;
+
+    exports org.glassfish.jersey.tests.integration.async;
+    exports org.glassfish.jersey.tests.integration.jersey2730;
+    exports org.glassfish.jersey.tests.integration.jersey2812;
+
+}
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/cdi-beanvalidation-webapp/pom.xml b/tests/integration/cdi-integration/cdi-beanvalidation-webapp/pom.xml
index e2f395b..6e95223 100644
--- a/tests/integration/cdi-integration/cdi-beanvalidation-webapp/pom.xml
+++ b/tests/integration/cdi-integration/cdi-beanvalidation-webapp/pom.xml
@@ -31,6 +31,16 @@
 
     <description>Jersey CDI/Bean Validation test web application</description>
 
+    <properties>
+        <surefire.coverage.argline>
+            --add-reads org.jboss.logging=weld.core.impl
+            --add-reads org.jboss.logging=weld.environment.common
+            --add-reads org.jboss.logging=weld.se.core
+            --add-reads org.jboss.logging=org.hibernate.validator
+            --add-modules=ALL-MODULE-PATH
+        </surefire.coverage.argline>
+    </properties>
+
     <dependencies>
         <dependency>
             <groupId>jakarta.ws.rs</groupId>
@@ -73,7 +83,25 @@
         <dependency>
             <groupId>org.jboss.weld.se</groupId>
             <artifactId>weld-se-core</artifactId>
-            <scope>provided</scope>
+<!--            <scope>provided</scope>-->
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.weld.environment</groupId>
+            <artifactId>weld-environment-common</artifactId>
+            <version>${weld.version}</version>
+<!--            <scope>provided</scope>-->
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <version>${slf4j.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.logging</groupId>
+            <artifactId>jboss-logging</artifactId>
+            <version>${jboss.logging.version}</version>
+            <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.glassfish.jersey.ext.cdi</groupId>
@@ -90,9 +118,28 @@
         </dependency>
 
         <dependency>
+            <groupId>org.glassfish.jersey.test-framework</groupId>
+            <artifactId>jersey-test-framework-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.glassfish.jersey.test-framework.providers</groupId>
-            <artifactId>jersey-test-framework-provider-bundle</artifactId>
-            <type>pom</type>
+            <artifactId>jersey-test-framework-provider-external</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
+            <artifactId>jersey-test-framework-provider-grizzly2</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.containers</groupId>
+            <artifactId>jersey-container-grizzly2-http</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-engine</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/main/java/module-info.java b/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/main/java/module-info.java
new file mode 100644
index 0000000..23445df
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/main/java/module-info.java
@@ -0,0 +1,34 @@
+/*
+ * 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.tests.integration.cdi.beanvalidation.webapp {
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+    requires jakarta.xml.bind;
+    requires jakarta.cdi;
+    requires jakarta.validation;
+
+    requires weld.api;
+    requires weld.core.impl;
+
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.inject.hk2;
+    requires org.glassfish.jersey.ext.cdi1x;
+
+    exports org.glassfish.jersey.tests.cdi.bv;
+    opens org.glassfish.jersey.tests.cdi.bv;
+}
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/module-info.java b/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/module-info.java
new file mode 100644
index 0000000..6082573
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/module-info.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2022, 2024 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.integration.cdi.beanvalidation.webapp.test {
+    requires jakarta.cdi;
+    requires jakarta.inject;
+    requires jakarta.validation;
+    requires jakarta.ws.rs;
+
+    requires weld.core.impl;
+    requires weld.environment.common;
+    requires weld.se.core;
+
+    requires org.glassfish.grizzly.http.server;
+    requires org.hibernate.validator;
+    requires org.hibernate.validator.cdi;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.inject.hk2;
+    requires org.glassfish.jersey.container.grizzly2.http;
+    requires org.glassfish.jersey.ext.weld2.se;
+
+    requires org.glassfish.jersey.tests.integration.cdi.beanvalidation.webapp;
+
+    requires org.junit.jupiter.api;
+    requires org.hamcrest;
+
+    requires org.glassfish.jersey.tests.framework.core;
+    requires org.glassfish.jersey.tests.framework.provider.external;
+    requires org.glassfish.jersey.tests.framework.provider.grizzly;
+
+    exports org.glassfish.jersey.tests.cdi.bv.test;
+    opens org.glassfish.jersey.tests.cdi.bv.test;
+}
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/BaseValidationTest.java b/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/test/BaseValidationTest.java
similarity index 98%
rename from tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/BaseValidationTest.java
rename to tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/test/BaseValidationTest.java
index 0a1141c..527012b 100644
--- a/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/BaseValidationTest.java
+++ b/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/test/BaseValidationTest.java
@@ -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.bv;
+package org.glassfish.jersey.tests.cdi.bv.test;
 
 import java.net.URI;
 
diff --git a/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/CombinedTest.java b/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/test/CombinedTest.java
similarity index 97%
rename from tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/CombinedTest.java
rename to tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/test/CombinedTest.java
index 2b04f74..1ca9945 100644
--- a/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/CombinedTest.java
+++ b/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/test/CombinedTest.java
@@ -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.bv;
+package org.glassfish.jersey.tests.cdi.bv.test;
 
 import java.io.IOException;
 import java.net.URI;
@@ -34,6 +34,8 @@
 import org.glassfish.grizzly.http.server.HttpHandler;
 import org.glassfish.grizzly.http.server.HttpServer;
 
+import org.glassfish.jersey.tests.cdi.bv.CdiApplication;
+import org.glassfish.jersey.tests.cdi.bv.Hk2Application;
 import org.jboss.weld.environment.se.Weld;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assumptions;
diff --git a/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/RawCdiTest.java b/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/test/RawCdiTest.java
similarity index 96%
rename from tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/RawCdiTest.java
rename to tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/test/RawCdiTest.java
index dfb2340..2733c38 100644
--- a/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/RawCdiTest.java
+++ b/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/test/RawCdiTest.java
@@ -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.bv;
+package org.glassfish.jersey.tests.cdi.bv.test;
 
 import jakarta.ws.rs.core.Application;
 
@@ -22,6 +22,7 @@
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.external.ExternalTestContainerFactory;
 
+import org.glassfish.jersey.tests.cdi.bv.CdiApplication;
 import org.jboss.weld.environment.se.Weld;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assumptions;
diff --git a/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/RawHk2Test.java b/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/test/RawHk2Test.java
similarity index 90%
rename from tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/RawHk2Test.java
rename to tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/test/RawHk2Test.java
index 1998e9a..e50591e 100644
--- a/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/RawHk2Test.java
+++ b/tests/integration/cdi-integration/cdi-beanvalidation-webapp/src/test/java/org/glassfish/jersey/tests/cdi/bv/test/RawHk2Test.java
@@ -14,14 +14,13 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.tests.cdi.bv;
+package org.glassfish.jersey.tests.cdi.bv.test;
 
 import jakarta.ws.rs.core.Application;
 
 import org.glassfish.jersey.server.ResourceConfig;
 
-import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.Test;
+import org.glassfish.jersey.tests.cdi.bv.Hk2Application;
 
 /**
  * Validation result test for raw HK2 environment.
diff --git a/tests/integration/cdi-integration/cdi-client-on-server/pom.xml b/tests/integration/cdi-integration/cdi-client-on-server/pom.xml
index 4d532de..81d39f3 100644
--- a/tests/integration/cdi-integration/cdi-client-on-server/pom.xml
+++ b/tests/integration/cdi-integration/cdi-client-on-server/pom.xml
@@ -31,6 +31,10 @@
 
     <description>CDI works on a client on a server resource</description>
 
+    <properties>
+        <surefire.coverage.argline>--add-reads org.jboss.logging=java.logging --add-modules=ALL-MODULE-PATH</surefire.coverage.argline>
+    </properties>
+
     <dependencies>
         <dependency>
             <groupId>jakarta.ws.rs</groupId>
@@ -55,14 +59,23 @@
         </dependency>
         <dependency>
             <groupId>org.glassfish.jersey.test-framework.providers</groupId>
-            <artifactId>jersey-test-framework-provider-bundle</artifactId>
-            <type>pom</type>
+            <artifactId>jersey-test-framework-provider-external</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
+            <artifactId>jersey-test-framework-provider-grizzly2</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.test-framework</groupId>
+            <artifactId>jersey-test-framework-core</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.glassfish.jersey.test-framework</groupId>
             <artifactId>jersey-test-framework-util</artifactId>
-            <scope>provided</scope>
+            <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.glassfish.jersey.ext.cdi</groupId>
@@ -80,6 +93,32 @@
             <version>${project.version}</version>
             <scope>provided</scope>
         </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.core</groupId>
+            <artifactId>jersey-server</artifactId>
+            <version>${project.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.testng</groupId>
+            <artifactId>testng</artifactId>
+            <scope>test</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>aopalliance</groupId>
+                    <artifactId>aopalliance</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.weld</groupId>
+            <artifactId>weld-api</artifactId>
+        </dependency>
     </dependencies>
 
     <profiles>
diff --git a/tests/integration/cdi-integration/cdi-client-on-server/src/main/java/module-info.java b/tests/integration/cdi-integration/cdi-client-on-server/src/main/java/module-info.java
new file mode 100644
index 0000000..73bf1df
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-client-on-server/src/main/java/module-info.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2022, 2024 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.integration.cdi.client.on.server {
+    requires jakarta.ws.rs;
+    requires jakarta.xml.bind;
+    requires jakarta.inject;
+    requires jakarta.cdi;
+    requires weld.api;
+
+    requires org.glassfish.jersey.core.server;
+
+    opens org.glassfish.jersey.tests.cdi.client;
+    exports org.glassfish.jersey.tests.cdi.client;
+}
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/cdi-client-on-server/src/main/java/org/glassfish/jersey/tests/cdi/client/CdiEnabledClientOnServerApplication.java b/tests/integration/cdi-integration/cdi-client-on-server/src/main/java/org/glassfish/jersey/tests/cdi/client/CdiEnabledClientOnServerApplication.java
index c3f92a6..b87db4d 100644
--- a/tests/integration/cdi-integration/cdi-client-on-server/src/main/java/org/glassfish/jersey/tests/cdi/client/CdiEnabledClientOnServerApplication.java
+++ b/tests/integration/cdi-integration/cdi-client-on-server/src/main/java/org/glassfish/jersey/tests/cdi/client/CdiEnabledClientOnServerApplication.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2024 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,8 +18,8 @@
 
 import org.glassfish.jersey.server.ResourceConfig;
 
-class CdiEnabledClientOnServerApplication extends ResourceConfig {
-    CdiEnabledClientOnServerApplication() {
+public class CdiEnabledClientOnServerApplication extends ResourceConfig {
+    public CdiEnabledClientOnServerApplication() {
         register(CdiEnabledClientOnServerResource.class);
     }
 }
diff --git a/tests/integration/cdi-integration/cdi-client-on-server/src/test/java/module-info.java b/tests/integration/cdi-integration/cdi-client-on-server/src/test/java/module-info.java
new file mode 100644
index 0000000..3cd2440
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-client-on-server/src/test/java/module-info.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2022, 2024 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.integration.cdi.client.on.server.test {
+
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+    requires jakarta.cdi;
+
+    requires weld.core.impl;
+    requires weld.environment.common;
+    requires weld.se.core;
+    requires org.jboss.logging;
+
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.inject.hk2;
+
+    requires org.glassfish.jersey.tests.framework.core;
+    requires org.glassfish.jersey.tests.framework.provider.external;
+    requires org.glassfish.jersey.tests.framework.provider.grizzly;
+
+    requires org.glassfish.jersey.tests.integration.cdi.client.on.server;
+
+    requires org.junit.jupiter.api;
+    requires org.junit.jupiter.engine;
+
+    exports org.glassfish.jersey.tests.cdi.client.test to org.junit.platform.commons;
+}
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/cdi-client-on-server/src/test/java/org/glassfish/jersey/tests/cdi/client/BeanManagerInjectedOnClientTest.java b/tests/integration/cdi-integration/cdi-client-on-server/src/test/java/org/glassfish/jersey/tests/cdi/client/test/BeanManagerInjectedOnClientTest.java
similarity index 92%
rename from tests/integration/cdi-integration/cdi-client-on-server/src/test/java/org/glassfish/jersey/tests/cdi/client/BeanManagerInjectedOnClientTest.java
rename to tests/integration/cdi-integration/cdi-client-on-server/src/test/java/org/glassfish/jersey/tests/cdi/client/test/BeanManagerInjectedOnClientTest.java
index f25ee90..6a2f4fd 100644
--- a/tests/integration/cdi-integration/cdi-client-on-server/src/test/java/org/glassfish/jersey/tests/cdi/client/BeanManagerInjectedOnClientTest.java
+++ b/tests/integration/cdi-integration/cdi-client-on-server/src/test/java/org/glassfish/jersey/tests/cdi/client/test/BeanManagerInjectedOnClientTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2024 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,12 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.tests.cdi.client;
+package org.glassfish.jersey.tests.cdi.client.test;
 
 import org.glassfish.jersey.inject.hk2.Hk2InjectionManagerFactory;
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.external.ExternalTestContainerFactory;
+import org.glassfish.jersey.tests.cdi.client.CdiEnabledClientOnServerApplication;
 import org.jboss.weld.environment.se.Weld;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
diff --git a/tests/integration/cdi-integration/cdi-client/pom.xml b/tests/integration/cdi-integration/cdi-client/pom.xml
index e689257..f02878e 100644
--- a/tests/integration/cdi-integration/cdi-client/pom.xml
+++ b/tests/integration/cdi-integration/cdi-client/pom.xml
@@ -49,6 +49,19 @@
         <dependency>
             <groupId>org.jboss.weld.se</groupId>
             <artifactId>weld-se-core</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.jboss.logging</groupId>
+                    <artifactId>jboss-logging</artifactId>
+                </exclusion>
+            </exclusions>
+            <scope>provided</scope>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.logging</groupId>
+            <artifactId>jboss-logging</artifactId>
+            <version>${jboss.logging.version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
@@ -74,8 +87,18 @@
                 <artifactId>maven-surefire-plugin</artifactId>
                 <configuration>
                     <skipTests>${skip.tests}</skipTests>
+
                 </configuration>
             </plugin>
         </plugins>
     </build>
+    <properties>
+        <surefire.coverage.argline>
+            --add-opens weld.core.impl/org.jboss.weld.logging=org.jboss.logging
+            --add-reads org.jboss.logging=weld.core.impl
+            --add-reads org.jboss.logging=weld.environment.common
+            --add-reads org.jboss.logging=weld.se.core
+            --add-modules=ALL-MODULE-PATH
+        </surefire.coverage.argline>
+    </properties>
 </project>
diff --git a/tests/integration/cdi-integration/cdi-client/src/main/java/module-info.java b/tests/integration/cdi-integration/cdi-client/src/main/java/module-info.java
new file mode 100644
index 0000000..0b98f14
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-client/src/main/java/module-info.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2022, 2024 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.integration.cdi.client {
+    requires jakarta.cdi;
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+
+
+    requires weld.api;
+
+    opens org.glassfish.jersey.tests.cdi.client;
+    exports org.glassfish.jersey.tests.cdi.client;
+}
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/cdi-client/src/test/java/module-info.java b/tests/integration/cdi-integration/cdi-client/src/test/java/module-info.java
new file mode 100644
index 0000000..0567a2c
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-client/src/test/java/module-info.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2022, 2024 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.integration.cdi.client.test {
+
+    requires jakarta.activation;
+    requires jakarta.el;
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+
+    requires weld.environment.common;
+    requires weld.core.impl;
+    requires weld.se.core;
+
+    requires org.jboss.logging;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.inject.hk2;
+    requires org.glassfish.jersey.ext.cdi1x ;
+
+    requires org.junit.jupiter.api;
+    requires org.junit.jupiter.engine;
+    requires org.glassfish.jersey.tests.integration.cdi.client;
+
+    exports org.glassfish.jersey.tests.cdi.client.test;
+    opens org.glassfish.jersey.tests.cdi.client.test;
+}
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/cdi-client/src/test/java/org/glassfish/jersey/tests/cdi/client/BeanManagerInjectedOnClientTest.java b/tests/integration/cdi-integration/cdi-client/src/test/java/org/glassfish/jersey/tests/cdi/client/test/BeanManagerInjectedOnClientTest.java
similarity index 89%
rename from tests/integration/cdi-integration/cdi-client/src/test/java/org/glassfish/jersey/tests/cdi/client/BeanManagerInjectedOnClientTest.java
rename to tests/integration/cdi-integration/cdi-client/src/test/java/org/glassfish/jersey/tests/cdi/client/test/BeanManagerInjectedOnClientTest.java
index bec10aa..62697e8 100644
--- a/tests/integration/cdi-integration/cdi-client/src/test/java/org/glassfish/jersey/tests/cdi/client/BeanManagerInjectedOnClientTest.java
+++ b/tests/integration/cdi-integration/cdi-client/src/test/java/org/glassfish/jersey/tests/cdi/client/test/BeanManagerInjectedOnClientTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 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,10 +14,12 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.tests.cdi.client;
+package org.glassfish.jersey.tests.cdi.client.test;
 
 import org.glassfish.jersey.inject.hk2.Hk2InjectionManagerFactory;
 import org.glassfish.jersey.internal.util.ReflectionHelper;
+import org.glassfish.jersey.tests.cdi.client.CdiClientFilter;
+import org.glassfish.jersey.tests.cdi.client.CdiLowerPriorityClientFilter;
 import org.jboss.weld.environment.se.Weld;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.Assertions;
diff --git a/tests/integration/cdi-integration/cdi-ejb-test-webapp/src/main/java/module-info.java b/tests/integration/cdi-integration/cdi-ejb-test-webapp/src/main/java/module-info.java
new file mode 100644
index 0000000..20d2723
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-ejb-test-webapp/src/main/java/module-info.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2022, 2023 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.integration.cdi.ejb.test.webapp {
+    requires jakarta.ws.rs;
+    requires jakarta.xml.bind;
+    requires jakarta.inject;
+    requires jakarta.cdi;
+    requires jakarta.annotation;
+    requires jakarta.ejb;
+
+    opens org.glassfish.jersey.tests.cdi.resources;
+}
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/cdi-iface-with-non-jaxrs-impl-test-webapp/pom.xml b/tests/integration/cdi-integration/cdi-iface-with-non-jaxrs-impl-test-webapp/pom.xml
index 61a67a0..b4232ae 100644
--- a/tests/integration/cdi-integration/cdi-iface-with-non-jaxrs-impl-test-webapp/pom.xml
+++ b/tests/integration/cdi-integration/cdi-iface-with-non-jaxrs-impl-test-webapp/pom.xml
@@ -42,11 +42,18 @@
             <artifactId>jakarta.enterprise.cdi-api</artifactId>
             <scope>provided</scope>
         </dependency>
-
-         <dependency>
-            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
-            <artifactId>jersey-test-framework-provider-bundle</artifactId>
-            <type>pom</type>
+        <dependency>
+            <groupId>org.glassfish.jersey.test-framework</groupId>
+            <artifactId>jersey-test-framework-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-api</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.hamcrest</groupId>
+            <artifactId>hamcrest</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/tests/integration/cdi-integration/cdi-iface-with-non-jaxrs-impl-test-webapp/src/main/java/module-info.java b/tests/integration/cdi-integration/cdi-iface-with-non-jaxrs-impl-test-webapp/src/main/java/module-info.java
new file mode 100644
index 0000000..be4d227
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-iface-with-non-jaxrs-impl-test-webapp/src/main/java/module-info.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2022 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.integration.cdi.iface {
+    requires jakarta.ws.rs;
+    requires jakarta.inject;
+
+    opens org.glassfish.jersey.tests.cdi.resources;
+}
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/cdi-iface-with-non-jaxrs-impl-test-webapp/src/test/java/module-info.java b/tests/integration/cdi-integration/cdi-iface-with-non-jaxrs-impl-test-webapp/src/test/java/module-info.java
new file mode 100644
index 0000000..ec65e8a
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-iface-with-non-jaxrs-impl-test-webapp/src/test/java/module-info.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2022, 2023 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.integration.cdi.iface {
+    requires java.logging;
+
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+
+    requires org.junit.jupiter.api;
+    requires org.hamcrest;
+    requires org.glassfish.jersey.tests.framework.core;
+}
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/cdi-log-check/pom.xml b/tests/integration/cdi-integration/cdi-log-check/pom.xml
index b645823..34fe7ed 100644
--- a/tests/integration/cdi-integration/cdi-log-check/pom.xml
+++ b/tests/integration/cdi-integration/cdi-log-check/pom.xml
@@ -55,8 +55,17 @@
         </dependency>
         <dependency>
             <groupId>org.glassfish.jersey.test-framework.providers</groupId>
-            <artifactId>jersey-test-framework-provider-bundle</artifactId>
-            <type>pom</type>
+            <artifactId>jersey-test-framework-provider-external</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
+            <artifactId>jersey-test-framework-provider-grizzly2</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.test-framework</groupId>
+            <artifactId>jersey-test-framework-core</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
@@ -72,6 +81,19 @@
         <dependency>
             <groupId>org.jboss.weld.se</groupId>
             <artifactId>weld-se-core</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.jboss.logging</groupId>
+                    <artifactId>jboss-logging</artifactId>
+                </exclusion>
+            </exclusions>
+            <scope>provided</scope>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.logging</groupId>
+            <artifactId>jboss-logging</artifactId>
+            <version>${jboss.logging.version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
@@ -80,6 +102,22 @@
             <version>${project.version}</version>
             <scope>provided</scope>
         </dependency>
+        <dependency>
+            <groupId>org.testng</groupId>
+            <artifactId>testng</artifactId>
+            <scope>test</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>aopalliance</groupId>
+                    <artifactId>aopalliance</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/tests/integration/cdi-integration/cdi-log-check/src/main/java/module-info.java b/tests/integration/cdi-integration/cdi-log-check/src/main/java/module-info.java
new file mode 100644
index 0000000..d3d61b4
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-log-check/src/main/java/module-info.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2022, 2024 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.integration.cdi.log.check {
+    requires jakarta.ws.rs;
+    requires jakarta.annotation;
+    requires jakarta.inject;
+    requires jakarta.interceptor;
+    requires jakarta.cdi;
+
+    requires java.logging;
+    requires weld.api;
+//    requires static weld.core.impl;
+
+    requires org.glassfish.jersey.core.server;
+
+    opens org.glassfish.jersey.tests.cdi.resources;
+    exports org.glassfish.jersey.tests.cdi.resources;
+}
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/cdi-log-check/src/test/java/module-info.java b/tests/integration/cdi-integration/cdi-log-check/src/test/java/module-info.java
new file mode 100644
index 0000000..f3233c1
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-log-check/src/test/java/module-info.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2022, 2024 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.integration.cdi.log.check.test {
+    requires java.logging;
+
+    requires jakarta.cdi;
+    requires jakarta.el;
+    requires jakarta.inject;
+    requires jakarta.interceptor;
+    requires jakarta.ws.rs;
+
+    requires weld.core.impl;
+    requires weld.environment.common;
+    requires weld.se.core;
+    requires org.jboss.logging;
+
+    requires org.glassfish.jersey.tests.integration.cdi.log.check;
+
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.inject.hk2;
+
+    requires org.glassfish.jersey.tests.framework.core;
+    requires org.glassfish.jersey.tests.framework.provider.external;
+    requires org.glassfish.jersey.tests.framework.provider.grizzly;
+
+    requires org.junit.jupiter.api;
+    requires org.junit.jupiter.engine;
+
+    exports org.glassfish.jersey.tests.cdi.resources.test;
+    opens org.glassfish.jersey.tests.cdi.resources.test;
+}
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/cdi-log-check/src/test/java/org/glassfish/jersey/tests/cdi/resources/CdiComponentProviderWarningTest.java b/tests/integration/cdi-integration/cdi-log-check/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/CdiComponentProviderWarningTest.java
similarity index 91%
rename from tests/integration/cdi-integration/cdi-log-check/src/test/java/org/glassfish/jersey/tests/cdi/resources/CdiComponentProviderWarningTest.java
rename to tests/integration/cdi-integration/cdi-log-check/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/CdiComponentProviderWarningTest.java
index e2de3ea..964f420 100644
--- a/tests/integration/cdi-integration/cdi-log-check/src/test/java/org/glassfish/jersey/tests/cdi/resources/CdiComponentProviderWarningTest.java
+++ b/tests/integration/cdi-integration/cdi-log-check/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/CdiComponentProviderWarningTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019, 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2023 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,15 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.tests.cdi.resources;
+package org.glassfish.jersey.tests.cdi.resources.test;
 
 import org.glassfish.jersey.inject.hk2.Hk2InjectionManagerFactory;
 import org.glassfish.jersey.server.internal.LocalizationMessages;
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 import org.glassfish.jersey.test.external.ExternalTestContainerFactory;
+import org.glassfish.jersey.tests.cdi.resources.EchoResource;
+import org.glassfish.jersey.tests.cdi.resources.MyApplication;
 import org.jboss.weld.environment.se.Weld;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
@@ -75,7 +77,7 @@
     @Test
     public void testWarning() {
         String echo = target("echo").request().get(String.class);
-        assertEquals(echo, EchoResource.OK);
+        Assertions.assertEquals(echo, EchoResource.OK);
 
         String resource = target("warning").request().get(String.class);
         assertEquals(resource, EchoResource.class.getName());
diff --git a/tests/integration/cdi-integration/cdi-manually-bound/pom.xml b/tests/integration/cdi-integration/cdi-manually-bound/pom.xml
index 9b93e1e..d32f56a 100644
--- a/tests/integration/cdi-integration/cdi-manually-bound/pom.xml
+++ b/tests/integration/cdi-integration/cdi-manually-bound/pom.xml
@@ -47,8 +47,35 @@
             <artifactId>jersey-cdi1x</artifactId>
         </dependency>
         <dependency>
+            <groupId>org.jboss.weld</groupId>
+            <artifactId>weld-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.weld</groupId>
+            <artifactId>weld-core-impl</artifactId>
+            <version>${weld.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.core</groupId>
+            <artifactId>jersey-server</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
             <groupId>org.jboss.weld.se</groupId>
             <artifactId>weld-se-core</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.jboss.logging</groupId>
+                    <artifactId>jboss-logging</artifactId>
+                </exclusion>
+            </exclusions>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.logging</groupId>
+            <artifactId>jboss-logging</artifactId>
+            <version>${jboss.logging.version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
@@ -57,9 +84,23 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.glassfish.jersey.test-framework</groupId>
+            <artifactId>jersey-test-framework-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.glassfish.jersey.test-framework.providers</groupId>
-            <artifactId>jersey-test-framework-provider-bundle</artifactId>
-            <type>pom</type>
+            <artifactId>jersey-test-framework-provider-external</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
+            <artifactId>jersey-test-framework-provider-grizzly2</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.containers</groupId>
+            <artifactId>jersey-container-grizzly2-http</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
@@ -77,5 +118,21 @@
             </exclusions>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
+
+    <properties>
+        <surefire.coverage.argline>
+            --add-opens weld.core.impl/org.jboss.weld.logging=org.jboss.logging
+            --add-reads org.jboss.logging=weld.core.impl
+            --add-reads org.jboss.logging=weld.environment.common
+            --add-reads org.jboss.logging=weld.se.core
+            --add-modules=ALL-MODULE-PATH
+        </surefire.coverage.argline>
+    </properties>
+
 </project>
diff --git a/tests/integration/cdi-integration/cdi-manually-bound/src/main/java/module-info.java b/tests/integration/cdi-integration/cdi-manually-bound/src/main/java/module-info.java
new file mode 100644
index 0000000..bfe1f73
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-manually-bound/src/main/java/module-info.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2022, 2024 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.integration.cdi.manually.bound {
+    requires jakarta.ws.rs;
+    requires jakarta.inject;
+    requires jakarta.cdi;
+    requires jakarta.xml.bind;
+
+    requires weld.api;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.inject.hk2;
+    requires org.glassfish.jersey.ext.cdi1x;
+
+    opens org.glassfish.jersey.tests.cdi.manuallybound;
+    exports org.glassfish.jersey.tests.cdi.manuallybound;
+}
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/cdi-manually-bound/src/main/resources/META-INF/beans.xml b/tests/integration/cdi-integration/cdi-manually-bound/src/main/resources/META-INF/beans.xml
index 1fb9c84..cfe3c46 100644
--- a/tests/integration/cdi-integration/cdi-manually-bound/src/main/resources/META-INF/beans.xml
+++ b/tests/integration/cdi-integration/cdi-manually-bound/src/main/resources/META-INF/beans.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
 
-    Copyright (c) 2019 Oracle and/or its affiliates. All rights reserved.
+    Copyright (c) 2019, 2024 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,9 +18,8 @@
 -->
 
 
-<beans
-        xmlns="http://java.sun.com/xml/ns/javaee"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
-        http://java.sun.com/xml/ns/javaee/beans_1_0.xsd" bean-discovery-mode="none">
+<beans xmlns="https://jakarta.ee/xml/ns/jakartaee"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/beans_4_0.xsd"
+       version="4.0" bean-discovery-mode="none">
 </beans>
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/cdi-manually-bound/src/test/java/module-info.java b/tests/integration/cdi-integration/cdi-manually-bound/src/test/java/module-info.java
new file mode 100644
index 0000000..4365145
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-manually-bound/src/test/java/module-info.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2022, 2024 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.integration.cdi.manually.bound.test {
+    requires jakarta.el;
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+
+    requires weld.environment.common;
+    requires weld.core.impl;
+    requires weld.se.core;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.inject.hk2;
+    requires org.glassfish.jersey.ext.cdi1x;
+    requires org.glassfish.jersey.ext.weld2.se;
+    requires org.glassfish.jersey.container.grizzly2.http;
+
+    requires org.glassfish.jersey.tests.integration.cdi.manually.bound;
+
+    requires org.junit.jupiter.api;
+    requires org.junit.jupiter.engine;
+    requires org.junit.platform.engine;
+
+    requires org.glassfish.jersey.tests.framework.core;
+    requires org.glassfish.jersey.tests.framework.provider.external;
+    requires org.glassfish.jersey.tests.framework.provider.grizzly;
+
+    exports org.glassfish.jersey.tests.cdi.manuallybound.test;
+}
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/cdi-manually-bound/src/test/java/org/glassfish/jersey/tests/cdi/manuallybound/CdiServiceInjectTest.java b/tests/integration/cdi-integration/cdi-manually-bound/src/test/java/org/glassfish/jersey/tests/cdi/manuallybound/test/CdiServiceInjectTest.java
similarity index 89%
rename from tests/integration/cdi-integration/cdi-manually-bound/src/test/java/org/glassfish/jersey/tests/cdi/manuallybound/CdiServiceInjectTest.java
rename to tests/integration/cdi-integration/cdi-manually-bound/src/test/java/org/glassfish/jersey/tests/cdi/manuallybound/test/CdiServiceInjectTest.java
index 29e4d77..45d75fd 100644
--- a/tests/integration/cdi-integration/cdi-manually-bound/src/test/java/org/glassfish/jersey/tests/cdi/manuallybound/CdiServiceInjectTest.java
+++ b/tests/integration/cdi-integration/cdi-manually-bound/src/test/java/org/glassfish/jersey/tests/cdi/manuallybound/test/CdiServiceInjectTest.java
@@ -14,12 +14,15 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.tests.cdi.manuallybound;
+package org.glassfish.jersey.tests.cdi.manuallybound.test;
 
 import org.glassfish.jersey.inject.hk2.Hk2InjectionManagerFactory;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.external.ExternalTestContainerFactory;
+import org.glassfish.jersey.tests.cdi.manuallybound.CdiServiceImpl;
+import org.glassfish.jersey.tests.cdi.manuallybound.NoBeanDefiningAnnotationContainerFilter;
+import org.glassfish.jersey.tests.cdi.manuallybound.Resource;
 import org.jboss.weld.environment.se.Weld;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
diff --git a/tests/integration/cdi-integration/cdi-manually-bound/src/test/java/org/glassfish/jersey/tests/cdi/manuallybound/HK2ServiceInjectTest.java b/tests/integration/cdi-integration/cdi-manually-bound/src/test/java/org/glassfish/jersey/tests/cdi/manuallybound/test/HK2ServiceInjectTest.java
similarity index 88%
rename from tests/integration/cdi-integration/cdi-manually-bound/src/test/java/org/glassfish/jersey/tests/cdi/manuallybound/HK2ServiceInjectTest.java
rename to tests/integration/cdi-integration/cdi-manually-bound/src/test/java/org/glassfish/jersey/tests/cdi/manuallybound/test/HK2ServiceInjectTest.java
index 9d0039f..2581891 100644
--- a/tests/integration/cdi-integration/cdi-manually-bound/src/test/java/org/glassfish/jersey/tests/cdi/manuallybound/HK2ServiceInjectTest.java
+++ b/tests/integration/cdi-integration/cdi-manually-bound/src/test/java/org/glassfish/jersey/tests/cdi/manuallybound/test/HK2ServiceInjectTest.java
@@ -14,12 +14,16 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.tests.cdi.manuallybound;
+package org.glassfish.jersey.tests.cdi.manuallybound.test;
 
 import org.glassfish.jersey.inject.hk2.Hk2InjectionManagerFactory;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.external.ExternalTestContainerFactory;
+import org.glassfish.jersey.tests.cdi.manuallybound.HK2Binder;
+import org.glassfish.jersey.tests.cdi.manuallybound.HK2InjectedFilter;
+import org.glassfish.jersey.tests.cdi.manuallybound.HK2ServiceImpl;
+import org.glassfish.jersey.tests.cdi.manuallybound.Resource;
 import org.jboss.weld.environment.se.Weld;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
diff --git a/tests/integration/cdi-integration/cdi-multipart-webapp/pom.xml b/tests/integration/cdi-integration/cdi-multipart-webapp/pom.xml
index 734289e..6935be9 100644
--- a/tests/integration/cdi-integration/cdi-multipart-webapp/pom.xml
+++ b/tests/integration/cdi-integration/cdi-multipart-webapp/pom.xml
@@ -53,9 +53,8 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
-            <artifactId>jersey-test-framework-provider-bundle</artifactId>
-            <type>pom</type>
+            <groupId>org.glassfish.jersey.test-framework</groupId>
+            <artifactId>jersey-test-framework-core</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/tests/integration/cdi-integration/cdi-multipart-webapp/src/main/java/module-info.java b/tests/integration/cdi-integration/cdi-multipart-webapp/src/main/java/module-info.java
new file mode 100644
index 0000000..e43e796
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-multipart-webapp/src/main/java/module-info.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2022 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.integration.cdi.multipart.webapp {
+    requires jakarta.ws.rs;
+    requires jakarta.cdi;
+
+    requires org.glassfish.jersey.media.multipart;
+
+    opens org.glassfish.jersey.tests.cdi.resources;
+}
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/cdi-multipart-webapp/src/test/java/module-info.java b/tests/integration/cdi-integration/cdi-multipart-webapp/src/test/java/module-info.java
new file mode 100644
index 0000000..b6b6ab3
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-multipart-webapp/src/test/java/module-info.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2022, 2023 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.integration.cdi.multipart.webapp {
+    requires jakarta.cdi;
+    requires jakarta.ws.rs;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.media.multipart;
+
+    requires org.junit.jupiter.api;
+    requires org.junit.jupiter.params;
+    requires org.hamcrest;
+
+    requires org.glassfish.jersey.tests.framework.core;
+}
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/cdi-resource-with-at-context/pom.xml b/tests/integration/cdi-integration/cdi-resource-with-at-context/pom.xml
index dedcad7..81493ac 100644
--- a/tests/integration/cdi-integration/cdi-resource-with-at-context/pom.xml
+++ b/tests/integration/cdi-integration/cdi-resource-with-at-context/pom.xml
@@ -65,6 +65,18 @@
         <dependency>
             <groupId>org.jboss.weld.se</groupId>
             <artifactId>weld-se-core</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.jboss.logging</groupId>
+                    <artifactId>jboss-logging</artifactId>
+                </exclusion>
+            </exclusions>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.logging</groupId>
+            <artifactId>jboss-logging</artifactId>
+            <version>${jboss.logging.version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
@@ -83,6 +95,21 @@
             <groupId>org.glassfish.jersey.containers</groupId>
             <artifactId>jersey-container-servlet-core</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
+    <properties>
+        <surefire.coverage.argline>
+            --add-opens weld.core.impl/org.jboss.weld.logging=org.jboss.logging
+            --add-reads org.jboss.logging=weld.core.impl
+            --add-reads org.jboss.logging=weld.environment.common
+            --add-reads org.jboss.logging=weld.se.core
+            --add-modules=ALL-MODULE-PATH
+        </surefire.coverage.argline>
+    </properties>
+
 </project>
diff --git a/tests/integration/cdi-integration/cdi-resource-with-at-context/src/main/java/module-info.java b/tests/integration/cdi-integration/cdi-resource-with-at-context/src/main/java/module-info.java
new file mode 100644
index 0000000..3599091
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-resource-with-at-context/src/main/java/module-info.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2022 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.integration.cdi.resource.context {
+    requires jakarta.ws.rs;
+    requires jakarta.xml.bind;
+    requires jakarta.inject;
+    requires jakarta.cdi;
+
+    requires org.glassfish.jersey.core.server;
+
+    exports org.glassfish.jersey.tests.cdi.resourceatcontext;
+    opens org.glassfish.jersey.tests.cdi.resourceatcontext;
+}
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/cdi-resource-with-at-context/src/test/java/module-info.java b/tests/integration/cdi-integration/cdi-resource-with-at-context/src/test/java/module-info.java
new file mode 100644
index 0000000..d3276bf
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-resource-with-at-context/src/test/java/module-info.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2022, 2024 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.integration.cdi.resource.context.test {
+    requires jakarta.el;
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+
+    requires org.glassfish.jersey.inject.hk2;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.ext.cdi1x;
+    requires org.glassfish.jersey.ext.weld2.se;
+    requires org.glassfish.jersey.container.servlet.core;
+    requires org.glassfish.jersey.container.grizzly2.http;
+
+    requires weld.core.impl;
+    requires weld.environment.common;
+    requires weld.se.core;
+
+    requires org.junit.jupiter.api;
+    requires org.junit.jupiter.engine;
+    requires org.junit.platform.engine;
+
+    requires org.glassfish.jersey.tests.framework.core;
+    requires org.glassfish.jersey.tests.integration.cdi.resource.context;
+    requires org.glassfish.jersey.tests.framework.provider.grizzly;
+
+    exports org.glassfish.jersey.tests.cdi.resourceatcontext.test;
+}
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/cdi-resource-with-at-context/src/test/java/org/glassfish/jersey/tests/cdi/resourceatcontext/ResourceWithConstructorTest.java b/tests/integration/cdi-integration/cdi-resource-with-at-context/src/test/java/org/glassfish/jersey/tests/cdi/resourceatcontext/test/ResourceWithConstructorTest.java
similarity index 95%
rename from tests/integration/cdi-integration/cdi-resource-with-at-context/src/test/java/org/glassfish/jersey/tests/cdi/resourceatcontext/ResourceWithConstructorTest.java
rename to tests/integration/cdi-integration/cdi-resource-with-at-context/src/test/java/org/glassfish/jersey/tests/cdi/resourceatcontext/test/ResourceWithConstructorTest.java
index 1f846f3..1464c81 100644
--- a/tests/integration/cdi-integration/cdi-resource-with-at-context/src/test/java/org/glassfish/jersey/tests/cdi/resourceatcontext/ResourceWithConstructorTest.java
+++ b/tests/integration/cdi-integration/cdi-resource-with-at-context/src/test/java/org/glassfish/jersey/tests/cdi/resourceatcontext/test/ResourceWithConstructorTest.java
@@ -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.resourceatcontext;
+package org.glassfish.jersey.tests.cdi.resourceatcontext.test;
 
 import org.glassfish.jersey.inject.hk2.Hk2InjectionManagerFactory;
 import org.glassfish.jersey.server.ResourceConfig;
@@ -25,6 +25,7 @@
 import org.glassfish.jersey.test.grizzly.GrizzlyWebTestContainerFactory;
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
+import org.glassfish.jersey.tests.cdi.resourceatcontext.App;
 import org.jboss.weld.environment.se.Weld;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
diff --git a/tests/integration/cdi-integration/cdi-singleton/pom.xml b/tests/integration/cdi-integration/cdi-singleton/pom.xml
index 1857e57..13d9d2e 100644
--- a/tests/integration/cdi-integration/cdi-singleton/pom.xml
+++ b/tests/integration/cdi-integration/cdi-singleton/pom.xml
@@ -49,6 +49,18 @@
         <dependency>
             <groupId>org.jboss.weld.se</groupId>
             <artifactId>weld-se-core</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.jboss.logging</groupId>
+                    <artifactId>jboss-logging</artifactId>
+                </exclusion>
+            </exclusions>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.logging</groupId>
+            <artifactId>jboss-logging</artifactId>
+            <version>${jboss.logging.version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
@@ -57,9 +69,23 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.glassfish.jersey.test-framework</groupId>
+            <artifactId>jersey-test-framework-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.glassfish.jersey.test-framework.providers</groupId>
-            <artifactId>jersey-test-framework-provider-bundle</artifactId>
-            <type>pom</type>
+            <artifactId>jersey-test-framework-provider-external</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
+            <artifactId>jersey-test-framework-provider-grizzly2</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.containers</groupId>
+            <artifactId>jersey-container-grizzly2-http</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
@@ -73,6 +99,11 @@
             </exclusions>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
 </project>
diff --git a/tests/integration/cdi-integration/cdi-singleton/src/main/java/module-info.java b/tests/integration/cdi-integration/cdi-singleton/src/main/java/module-info.java
new file mode 100644
index 0000000..39c136d
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-singleton/src/main/java/module-info.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2022 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.integration.cdi.singleton {
+    requires jakarta.ws.rs;
+    requires jakarta.inject;
+
+    opens org.glassfish.jersey.tests.cdi.singleton;
+    exports org.glassfish.jersey.tests.cdi.singleton;
+}
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/cdi-singleton/src/main/java/org/glassfish/jersey/tests/cdi/singleton/SingletonTestApp.java b/tests/integration/cdi-integration/cdi-singleton/src/main/java/org/glassfish/jersey/tests/cdi/singleton/SingletonTestApp.java
index 3578328..67a39fe 100644
--- a/tests/integration/cdi-integration/cdi-singleton/src/main/java/org/glassfish/jersey/tests/cdi/singleton/SingletonTestApp.java
+++ b/tests/integration/cdi-integration/cdi-singleton/src/main/java/org/glassfish/jersey/tests/cdi/singleton/SingletonTestApp.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 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
@@ -22,7 +22,7 @@
 
 public class SingletonTestApp extends Application {
 
-    static final SingletonResource[] SINGLETON_RESOURCES = new SingletonResource[3];
+    public static final SingletonResource[] SINGLETON_RESOURCES = new SingletonResource[3];
 
     @Override
     public Set<Class<?>> getClasses() {
diff --git a/tests/integration/cdi-integration/cdi-singleton/src/test/java/module-info.java b/tests/integration/cdi-integration/cdi-singleton/src/test/java/module-info.java
new file mode 100644
index 0000000..fdb0bc3
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-singleton/src/test/java/module-info.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2022, 2024 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.integration.cdi.singleton.test {
+    requires jakarta.el;
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+
+    requires org.glassfish.jersey.inject.hk2;
+    requires org.glassfish.jersey.container.grizzly2.http;
+    requires org.glassfish.jersey.ext.weld2.se;
+    requires org.glassfish.jersey.tests.integration.cdi.singleton;
+
+    requires weld.core.impl;
+    requires weld.environment.common;
+    requires weld.se.core;
+
+    requires org.glassfish.jersey.tests.framework.core;
+    requires org.glassfish.jersey.tests.framework.provider.external;
+    requires org.glassfish.jersey.tests.framework.provider.grizzly;
+    requires org.junit.jupiter.api;
+    requires org.junit.jupiter.engine;
+    requires org.junit.platform.engine;
+
+    exports org.glassfish.jersey.tests.cdi.singleton.test;
+}
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/cdi-singleton/src/test/java/org/glassfish/jersey/tests/cdi/singleton/SingletonTest.java b/tests/integration/cdi-integration/cdi-singleton/src/test/java/org/glassfish/jersey/tests/cdi/singleton/test/SingletonTest.java
similarity index 92%
rename from tests/integration/cdi-integration/cdi-singleton/src/test/java/org/glassfish/jersey/tests/cdi/singleton/SingletonTest.java
rename to tests/integration/cdi-integration/cdi-singleton/src/test/java/org/glassfish/jersey/tests/cdi/singleton/test/SingletonTest.java
index 8e39986..3928527 100644
--- a/tests/integration/cdi-integration/cdi-singleton/src/test/java/org/glassfish/jersey/tests/cdi/singleton/SingletonTest.java
+++ b/tests/integration/cdi-integration/cdi-singleton/src/test/java/org/glassfish/jersey/tests/cdi/singleton/test/SingletonTest.java
@@ -14,11 +14,13 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.tests.cdi.singleton;
+package org.glassfish.jersey.tests.cdi.singleton.test;
 
 import org.glassfish.jersey.inject.hk2.Hk2InjectionManagerFactory;
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.external.ExternalTestContainerFactory;
+import org.glassfish.jersey.tests.cdi.singleton.SingletonResource;
+import org.glassfish.jersey.tests.cdi.singleton.SingletonTestApp;
 import org.jboss.weld.environment.se.Weld;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
diff --git a/tests/integration/cdi-integration/cdi-skipping-analyzer/src/main/resources/META-INF/beans.xml b/tests/integration/cdi-integration/cdi-skipping-analyzer/src/main/resources/META-INF/beans.xml
index 56ad04f..0850fd8 100644
--- a/tests/integration/cdi-integration/cdi-skipping-analyzer/src/main/resources/META-INF/beans.xml
+++ b/tests/integration/cdi-integration/cdi-skipping-analyzer/src/main/resources/META-INF/beans.xml
@@ -18,7 +18,8 @@
 -->
 
 
-<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_2_0.xsd"
-       bean-discovery-mode="annotated" version="2.0">
+<beans xmlns="https://jakarta.ee/xml/ns/jakartaee"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/beans_4_0.xsd"
+       version="4.0" bean-discovery-mode="annotated">
 </beans>
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/cdi-skipping-analyzer/src/main/webapp/WEB-INF/web.xml b/tests/integration/cdi-integration/cdi-skipping-analyzer/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index e038a3a..0000000
--- a/tests/integration/cdi-integration/cdi-skipping-analyzer/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2024 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
-
--->
-
-<web-app xmlns="http://java.sun.com/xml/ns/javaee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
-         version="3.0">
-</web-app>
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/pom.xml b/tests/integration/cdi-integration/cdi-test-webapp/pom.xml
index 76d844b..880adc1 100644
--- a/tests/integration/cdi-integration/cdi-test-webapp/pom.xml
+++ b/tests/integration/cdi-integration/cdi-test-webapp/pom.xml
@@ -48,9 +48,23 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
+            <groupId>org.glassfish.jersey.test-framework</groupId>
+            <artifactId>jersey-test-framework-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.glassfish.jersey.test-framework.providers</groupId>
-            <artifactId>jersey-test-framework-provider-bundle</artifactId>
-            <type>pom</type>
+            <artifactId>jersey-test-framework-provider-external</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
+            <artifactId>jersey-test-framework-provider-grizzly2</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.containers</groupId>
+            <artifactId>jersey-container-grizzly2-http</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
@@ -59,8 +73,29 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.jboss.weld</groupId>
+            <artifactId>weld-api</artifactId>
+        </dependency>
+        <dependency>
             <groupId>org.jboss.weld.se</groupId>
             <artifactId>weld-se-core</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.jboss.logging</groupId>
+                    <artifactId>jboss-logging</artifactId>
+                </exclusion>
+            </exclusions>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.logging</groupId>
+            <artifactId>jboss-logging</artifactId>
+            <version>${jboss.logging.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-engine</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/src/main/java/module-info.java b/tests/integration/cdi-integration/cdi-test-webapp/src/main/java/module-info.java
new file mode 100644
index 0000000..d2987e2
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-test-webapp/src/main/java/module-info.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2022, 2023 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.integration.cdi.test.webapp {
+    requires jakarta.annotation;
+    requires jakarta.ws.rs;
+    requires jakarta.inject;
+    requires jakarta.cdi;
+
+    requires java.logging;
+    requires static weld.api;
+
+    opens org.glassfish.jersey.tests.cdi.resources;
+    exports org.glassfish.jersey.tests.cdi.resources;
+}
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/module-info.java b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/module-info.java
new file mode 100644
index 0000000..00ac6c5
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/module-info.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2022, 2024 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.integration.cdi.test.webapp.test {
+    requires java.logging;
+
+    requires jakarta.annotation;
+    requires jakarta.el;
+    requires jakarta.cdi;
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+
+    requires weld.api;
+    requires weld.core.impl;
+    requires weld.environment.common;
+    requires weld.se.core;
+
+    requires org.hamcrest;
+
+    requires org.glassfish.grizzly.http.server;
+
+    requires org.glassfish.jersey.tests.integration.cdi.test.webapp;
+
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.inject.hk2;
+    requires org.glassfish.jersey.ext.weld2.se;
+    requires org.glassfish.jersey.ext.cdi1x;
+    requires org.glassfish.jersey.container.grizzly2.http;
+
+
+    requires org.glassfish.jersey.tests.framework.core;
+    requires org.glassfish.jersey.tests.framework.provider.external;
+    requires org.glassfish.jersey.tests.framework.provider.grizzly;
+
+    requires org.junit.jupiter.api;
+    requires org.junit.jupiter.engine;
+    requires org.junit.jupiter.params;
+    requires org.junit.platform.engine;
+
+    exports org.glassfish.jersey.tests.cdi.resources.test;
+
+    opens org.glassfish.jersey.tests.cdi.resources.test;
+}
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CdiComponentProviderTest.java b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/CdiComponentProviderTest.java
similarity index 94%
rename from tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CdiComponentProviderTest.java
rename to tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/CdiComponentProviderTest.java
index 8fdd9be..aeca5d6 100644
--- a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CdiComponentProviderTest.java
+++ b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/CdiComponentProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2023 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.resources;
+package org.glassfish.jersey.tests.cdi.resources.test;
 
 import org.glassfish.jersey.ext.cdi1x.internal.CdiComponentProvider;
 import org.glassfish.jersey.server.ResourceConfig;
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CdiTest.java b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/CdiTest.java
similarity index 93%
rename from tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CdiTest.java
rename to tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/CdiTest.java
index d4523ad..657bf6c 100644
--- a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CdiTest.java
+++ b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/CdiTest.java
@@ -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.resources;
+package org.glassfish.jersey.tests.cdi.resources.test;
 
 import java.net.URI;
 
@@ -23,6 +23,7 @@
 
 import org.glassfish.jersey.test.JerseyTest;
 
+import org.glassfish.jersey.tests.cdi.resources.MainApplication;
 import org.jboss.weld.environment.se.Weld;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/ConstructorInjectionTest.java b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/ConstructorInjectionTest.java
similarity index 97%
rename from tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/ConstructorInjectionTest.java
rename to tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/ConstructorInjectionTest.java
index fe0edde..bb31406 100644
--- a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/ConstructorInjectionTest.java
+++ b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/ConstructorInjectionTest.java
@@ -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.resources;
+package org.glassfish.jersey.tests.cdi.resources.test;
 
 import jakarta.ws.rs.client.WebTarget;
 import jakarta.ws.rs.core.Response;
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CounterTest.java b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/CounterTest.java
similarity index 96%
rename from tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CounterTest.java
rename to tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/CounterTest.java
index 392d639..fa1ec43 100644
--- a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/CounterTest.java
+++ b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/CounterTest.java
@@ -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.resources;
+package org.glassfish.jersey.tests.cdi.resources.test;
 
 import jakarta.ws.rs.client.WebTarget;
 import jakarta.ws.rs.core.Response;
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/JaxRsInjectedCdiBeanTest.java b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/JaxRsInjectedCdiBeanTest.java
similarity index 96%
rename from tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/JaxRsInjectedCdiBeanTest.java
rename to tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/JaxRsInjectedCdiBeanTest.java
index b00475c..6640e4c 100644
--- a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/JaxRsInjectedCdiBeanTest.java
+++ b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/JaxRsInjectedCdiBeanTest.java
@@ -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.resources;
+package org.glassfish.jersey.tests.cdi.resources.test;
 
 import jakarta.ws.rs.client.WebTarget;
 import jakarta.ws.rs.core.Response;
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/NonJaxRsBeanJaxRsInjectionTest.java b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/NonJaxRsBeanJaxRsInjectionTest.java
similarity index 96%
rename from tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/NonJaxRsBeanJaxRsInjectionTest.java
rename to tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/NonJaxRsBeanJaxRsInjectionTest.java
index 3d577f4..a22ad08 100644
--- a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/NonJaxRsBeanJaxRsInjectionTest.java
+++ b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/NonJaxRsBeanJaxRsInjectionTest.java
@@ -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.resources;
+package org.glassfish.jersey.tests.cdi.resources.test;
 
 import java.io.IOException;
 import java.net.URI;
@@ -34,6 +34,8 @@
 import org.glassfish.grizzly.http.server.HttpHandler;
 import org.glassfish.grizzly.http.server.HttpServer;
 
+import org.glassfish.jersey.tests.cdi.resources.MainApplication;
+import org.glassfish.jersey.tests.cdi.resources.SecondaryApplication;
 import org.jboss.weld.environment.se.Weld;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assumptions;
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/PerRequestBeanTest.java b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/PerRequestBeanTest.java
similarity index 97%
rename from tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/PerRequestBeanTest.java
rename to tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/PerRequestBeanTest.java
index 6865a66..c3e24b8 100644
--- a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/PerRequestBeanTest.java
+++ b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/PerRequestBeanTest.java
@@ -15,7 +15,7 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.tests.cdi.resources;
+package org.glassfish.jersey.tests.cdi.resources.test;
 
 import java.util.List;
 import java.util.stream.Stream;
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/PerRequestDependentBeanTest.java b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/PerRequestDependentBeanTest.java
similarity index 96%
rename from tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/PerRequestDependentBeanTest.java
rename to tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/PerRequestDependentBeanTest.java
index 4954859..1970c6b 100644
--- a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/PerRequestDependentBeanTest.java
+++ b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/PerRequestDependentBeanTest.java
@@ -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.resources;
+package org.glassfish.jersey.tests.cdi.resources.test;
 
 import java.util.stream.Stream;
 
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/ProducerTest.java b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/ProducerTest.java
similarity index 96%
rename from tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/ProducerTest.java
rename to tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/ProducerTest.java
index ed9dc7e..7460ec8 100644
--- a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/ProducerTest.java
+++ b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/ProducerTest.java
@@ -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.resources;
+package org.glassfish.jersey.tests.cdi.resources.test;
 
 import jakarta.ws.rs.client.WebTarget;
 import jakarta.ws.rs.core.Response;
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/QualifiedInjectionSetGetTest.java b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/QualifiedInjectionSetGetTest.java
similarity index 96%
rename from tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/QualifiedInjectionSetGetTest.java
rename to tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/QualifiedInjectionSetGetTest.java
index 04570fb..558204f 100644
--- a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/QualifiedInjectionSetGetTest.java
+++ b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/QualifiedInjectionSetGetTest.java
@@ -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.resources;
+package org.glassfish.jersey.tests.cdi.resources.test;
 
 import jakarta.inject.Qualifier;
 import jakarta.ws.rs.client.Entity;
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/ReverseEchoTest.java b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/ReverseEchoTest.java
similarity index 96%
rename from tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/ReverseEchoTest.java
rename to tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/ReverseEchoTest.java
index 4f57650..f901338 100644
--- a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/ReverseEchoTest.java
+++ b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/ReverseEchoTest.java
@@ -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.resources;
+package org.glassfish.jersey.tests.cdi.resources.test;
 
 import java.util.stream.Stream;
 
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/SecondJaxRsInjectedCdiBeanTest.java b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/SecondJaxRsInjectedCdiBeanTest.java
similarity index 95%
rename from tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/SecondJaxRsInjectedCdiBeanTest.java
rename to tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/SecondJaxRsInjectedCdiBeanTest.java
index 7d33b41..d3be5a8 100644
--- a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/SecondJaxRsInjectedCdiBeanTest.java
+++ b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/SecondJaxRsInjectedCdiBeanTest.java
@@ -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.resources;
+package org.glassfish.jersey.tests.cdi.resources.test;
 
 import java.net.URI;
 
@@ -25,6 +25,7 @@
 
 import org.glassfish.jersey.test.JerseyTest;
 
+import org.glassfish.jersey.tests.cdi.resources.SecondaryApplication;
 import org.jboss.weld.environment.se.Weld;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/SingletonBeanTest.java b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/SingletonBeanTest.java
similarity index 98%
rename from tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/SingletonBeanTest.java
rename to tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/SingletonBeanTest.java
index 045d742..caf412f 100644
--- a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/SingletonBeanTest.java
+++ b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/SingletonBeanTest.java
@@ -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.resources;
+package org.glassfish.jersey.tests.cdi.resources.test;
 
 import java.util.stream.Stream;
 
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/SingletonDependentBeanTest.java b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/SingletonDependentBeanTest.java
similarity index 98%
rename from tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/SingletonDependentBeanTest.java
rename to tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/SingletonDependentBeanTest.java
index 19a7033..5180d00 100644
--- a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/SingletonDependentBeanTest.java
+++ b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/SingletonDependentBeanTest.java
@@ -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.resources;
+package org.glassfish.jersey.tests.cdi.resources.test;
 
 import java.util.stream.Stream;
 
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/StutterEchoTest.java b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/StutterEchoTest.java
similarity index 96%
rename from tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/StutterEchoTest.java
rename to tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/StutterEchoTest.java
index ba2d1fd..9621562 100644
--- a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/StutterEchoTest.java
+++ b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/StutterEchoTest.java
@@ -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.resources;
+package org.glassfish.jersey.tests.cdi.resources.test;
 
 import java.util.stream.Stream;
 
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/TimerTest.java b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/TimerTest.java
similarity index 97%
rename from tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/TimerTest.java
rename to tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/TimerTest.java
index fa7dcb2..0bcc3bb 100644
--- a/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/TimerTest.java
+++ b/tests/integration/cdi-integration/cdi-test-webapp/src/test/java/org/glassfish/jersey/tests/cdi/resources/test/TimerTest.java
@@ -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.resources;
+package org.glassfish.jersey.tests.cdi.resources.test;
 
 import java.util.logging.Level;
 import java.util.logging.Logger;
diff --git a/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-cfg-webapp/pom.xml b/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-cfg-webapp/pom.xml
index 14a3642..700fff4 100644
--- a/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-cfg-webapp/pom.xml
+++ b/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-cfg-webapp/pom.xml
@@ -67,9 +67,8 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
-            <artifactId>jersey-test-framework-provider-bundle</artifactId>
-            <type>pom</type>
+            <groupId>org.glassfish.jersey.test-framework</groupId>
+            <artifactId>jersey-test-framework-core</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-cfg-webapp/src/main/java/module-info.java b/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-cfg-webapp/src/main/java/module-info.java
new file mode 100644
index 0000000..c89f60b
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-cfg-webapp/src/main/java/module-info.java
@@ -0,0 +1,29 @@
+/*
+ * 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.tests.integration.cdi.injection.cfg {
+    requires jakarta.ws.rs;
+    requires jakarta.xml.bind;
+    requires jakarta.inject;
+    requires jakarta.cdi;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.inject.hk2;
+    requires org.glassfish.jersey.ext.cdi1x;
+
+    opens org.glassfish.jersey.tests.cdi.resources;
+}
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-cfg-webapp/src/test/java/module-info.java b/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-cfg-webapp/src/test/java/module-info.java
new file mode 100644
index 0000000..6b9c6bf
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-cfg-webapp/src/test/java/module-info.java
@@ -0,0 +1,30 @@
+/*
+ * 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.tests.integration.cdi.injection.cfg {
+    requires jakarta.cdi;
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.inject.hk2;
+
+    requires org.junit.jupiter.api;
+    requires org.junit.jupiter.params;
+    requires org.glassfish.jersey.tests.framework.core;
+    requires org.hamcrest;
+}
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-hk2-banned-webapp/pom.xml b/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-hk2-banned-webapp/pom.xml
index bb4dbdd..e76c5f9 100644
--- a/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-hk2-banned-webapp/pom.xml
+++ b/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-hk2-banned-webapp/pom.xml
@@ -81,9 +81,8 @@
         </dependency>
 
         <dependency>
-            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
-            <artifactId>jersey-test-framework-provider-bundle</artifactId>
-            <type>pom</type>
+            <groupId>org.glassfish.jersey.test-framework</groupId>
+            <artifactId>jersey-test-framework-core</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-hk2-banned-webapp/src/main/java/module-info.java b/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-hk2-banned-webapp/src/main/java/module-info.java
new file mode 100644
index 0000000..7e80de2
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-hk2-banned-webapp/src/main/java/module-info.java
@@ -0,0 +1,28 @@
+/*
+ * 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.tests.integration.cdi.injection.hk2.banned {
+    requires jakarta.ws.rs;
+    requires jakarta.xml.bind;
+    requires jakarta.inject;
+    requires jakarta.cdi;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.inject.hk2;
+
+    opens org.glassfish.jersey.tests.cdi.resources;
+}
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-hk2-banned-webapp/src/test/java/module-info.java b/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-hk2-banned-webapp/src/test/java/module-info.java
new file mode 100644
index 0000000..efa5d3d
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-with-jersey-injection-custom-hk2-banned-webapp/src/test/java/module-info.java
@@ -0,0 +1,30 @@
+/*
+ * 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.tests.integration.cdi.injection.hk2.banned {
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+    requires jakarta.cdi;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.inject.hk2;
+
+    requires org.junit.jupiter.api;
+    requires org.hamcrest;
+
+    requires org.glassfish.jersey.tests.framework.core;
+}
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/cdi-with-jersey-injection-webapp/pom.xml b/tests/integration/cdi-integration/cdi-with-jersey-injection-webapp/pom.xml
index 7c96fe8..efd732f 100644
--- a/tests/integration/cdi-integration/cdi-with-jersey-injection-webapp/pom.xml
+++ b/tests/integration/cdi-integration/cdi-with-jersey-injection-webapp/pom.xml
@@ -58,9 +58,8 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
-            <artifactId>jersey-test-framework-provider-bundle</artifactId>
-            <type>pom</type>
+            <groupId>org.glassfish.jersey.test-framework</groupId>
+            <artifactId>jersey-test-framework-core</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/tests/integration/cdi-integration/cdi-with-jersey-injection-webapp/src/main/java/module-info.java b/tests/integration/cdi-integration/cdi-with-jersey-injection-webapp/src/main/java/module-info.java
new file mode 100644
index 0000000..0ebdca9
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-with-jersey-injection-webapp/src/main/java/module-info.java
@@ -0,0 +1,29 @@
+/*
+ * 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.tests.integration.cdi.injection.webapp {
+    requires jakarta.ws.rs;
+    requires jakarta.xml.bind;
+    requires jakarta.inject;
+    requires jakarta.cdi;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.inject.hk2;
+    requires org.glassfish.jersey.ext.cdi1x;
+
+    opens org.glassfish.jersey.tests.cdi.resources;
+}
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/cdi-with-jersey-injection-webapp/src/test/java/module-info.java b/tests/integration/cdi-integration/cdi-with-jersey-injection-webapp/src/test/java/module-info.java
new file mode 100644
index 0000000..555fcca
--- /dev/null
+++ b/tests/integration/cdi-integration/cdi-with-jersey-injection-webapp/src/test/java/module-info.java
@@ -0,0 +1,30 @@
+/*
+ * 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.tests.integration.cdi.injection.webapp {
+    requires jakarta.inject;
+    requires jakarta.cdi;
+    requires jakarta.ws.rs;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.inject.hk2;
+
+    requires org.glassfish.jersey.tests.framework.core;
+
+    requires org.junit.jupiter.params;
+    requires org.hamcrest;
+}
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/context-inject-on-server/pom.xml b/tests/integration/cdi-integration/context-inject-on-server/pom.xml
index f716b11..77dac4f 100644
--- a/tests/integration/cdi-integration/context-inject-on-server/pom.xml
+++ b/tests/integration/cdi-integration/context-inject-on-server/pom.xml
@@ -56,8 +56,24 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.jboss.weld</groupId>
+            <artifactId>weld-api</artifactId>
+        </dependency>
+        <dependency>
             <groupId>org.jboss.weld.se</groupId>
             <artifactId>weld-se-core</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.jboss.logging</groupId>
+                    <artifactId>jboss-logging</artifactId>
+                </exclusion>
+            </exclusions>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.logging</groupId>
+            <artifactId>jboss-logging</artifactId>
+            <version>${jboss.logging.version}</version>
             <scope>test</scope>
         </dependency>
        <dependency>
@@ -68,6 +84,11 @@
             <groupId>org.glassfish.jersey.containers</groupId>
             <artifactId>jersey-container-servlet-core</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
     <profiles>
         <profile>
diff --git a/tests/integration/cdi-integration/context-inject-on-server/src/main/java/module-info.java b/tests/integration/cdi-integration/context-inject-on-server/src/main/java/module-info.java
new file mode 100644
index 0000000..fd8b025
--- /dev/null
+++ b/tests/integration/cdi-integration/context-inject-on-server/src/main/java/module-info.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2022, 2023 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.integration.cdi.inject.server {
+    requires jakarta.annotation;
+    requires jakarta.ws.rs;
+    requires jakarta.xml.bind;
+    requires jakarta.inject;
+    requires jakarta.cdi;
+    requires jakarta.servlet;
+//    requires jakarta.persistence;
+
+    requires static weld.api;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.container.servlet.core;
+
+    opens org.glassfish.jersey.tests.cdi.inject;
+    exports org.glassfish.jersey.tests.cdi.inject;
+}
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/context-inject-on-server/src/main/java/org/glassfish/jersey/tests/cdi/inject/InjectionChecker.java b/tests/integration/cdi-integration/context-inject-on-server/src/main/java/org/glassfish/jersey/tests/cdi/inject/InjectionChecker.java
index 2d18f7c..9f0561c 100644
--- a/tests/integration/cdi-integration/context-inject-on-server/src/main/java/org/glassfish/jersey/tests/cdi/inject/InjectionChecker.java
+++ b/tests/integration/cdi-integration/context-inject-on-server/src/main/java/org/glassfish/jersey/tests/cdi/inject/InjectionChecker.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2021, 2022 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
@@ -42,10 +42,10 @@
 import java.lang.annotation.Annotation;
 import java.util.Iterator;
 
-class InjectionChecker {
-    static final String APPLICATION_PROPERTY = "ApplicationProperty";
-    static final String HEADER = "HttpHeader";
-    static final String ROOT = "resource";
+public class InjectionChecker {
+    public static final String APPLICATION_PROPERTY = "ApplicationProperty";
+    public static final String HEADER = "HttpHeader";
+    public static final String ROOT = "resource";
 
     static boolean checkApplication(Application application, StringBuilder sb) {
         if (application == null) {
diff --git a/tests/integration/cdi-integration/context-inject-on-server/src/main/java/org/glassfish/jersey/tests/cdi/inject/ServletApplication.java b/tests/integration/cdi-integration/context-inject-on-server/src/main/java/org/glassfish/jersey/tests/cdi/inject/ServletApplication.java
index dddd0bd..7affe91 100644
--- a/tests/integration/cdi-integration/context-inject-on-server/src/main/java/org/glassfish/jersey/tests/cdi/inject/ServletApplication.java
+++ b/tests/integration/cdi-integration/context-inject-on-server/src/main/java/org/glassfish/jersey/tests/cdi/inject/ServletApplication.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2023 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
@@ -22,7 +22,7 @@
 
 @ApplicationScoped
 public class ServletApplication extends ResourceConfig {
-    ServletApplication() {
+    public ServletApplication() {
         super(ServletExceptionMapper.class,
                 ServletResponseFilter.class,
                 ServletRequestFilter.class,
diff --git a/tests/integration/cdi-integration/context-inject-on-server/src/test/java/module-info.java b/tests/integration/cdi-integration/context-inject-on-server/src/test/java/module-info.java
new file mode 100644
index 0000000..ac34e67
--- /dev/null
+++ b/tests/integration/cdi-integration/context-inject-on-server/src/test/java/module-info.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2022, 2024 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.integration.cdi.inject.server.test {
+    requires jakarta.annotation;
+    requires jakarta.el;
+    requires jakarta.cdi;
+    requires jakarta.inject;
+    requires jakarta.servlet;
+    requires jakarta.ws.rs;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.inject.hk2;
+    requires org.glassfish.jersey.container.servlet.core;
+    requires org.glassfish.jersey.container.grizzly2.http;
+    requires org.glassfish.jersey.ext.weld2.se;
+    requires org.glassfish.jersey.ext.cdi.rs.inject;
+
+    requires org.glassfish.jersey.tests.integration.cdi.inject.server;
+
+    requires weld.environment.common;
+    requires weld.core.impl;
+    requires weld.se.core;
+
+    requires org.glassfish.jersey.media.sse;
+    requires org.glassfish.jersey.ext.cdi1x;
+
+    requires org.junit.jupiter.api;
+    requires org.junit.platform.engine;
+    requires org.glassfish.jersey.tests.framework.core;
+    requires org.glassfish.jersey.tests.framework.provider.grizzly;
+
+    exports org.glassfish.jersey.tests.cdi.inject.test;
+    opens org.glassfish.jersey.tests.cdi.inject.test;
+}
\ No newline at end of file
diff --git a/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/NonScopedApplicationInjectTest.java b/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/test/NonScopedApplicationInjectTest.java
similarity index 94%
rename from tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/NonScopedApplicationInjectTest.java
rename to tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/test/NonScopedApplicationInjectTest.java
index 2b25463..1614615 100644
--- a/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/NonScopedApplicationInjectTest.java
+++ b/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/test/NonScopedApplicationInjectTest.java
@@ -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.inject;
+package org.glassfish.jersey.tests.cdi.inject.test;
 
 import org.glassfish.jersey.inject.hk2.Hk2InjectionManagerFactory;
 import org.glassfish.jersey.servlet.ServletProperties;
@@ -24,6 +24,8 @@
 import org.glassfish.jersey.test.grizzly.GrizzlyWebTestContainerFactory;
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
+import org.glassfish.jersey.tests.cdi.inject.InjectionChecker;
+import org.glassfish.jersey.tests.cdi.inject.NonScopedApplicationInject;
 import org.jboss.weld.environment.se.Weld;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
diff --git a/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/NonScopedInjectionTest.java b/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/test/NonScopedInjectionTest.java
similarity index 96%
rename from tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/NonScopedInjectionTest.java
rename to tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/test/NonScopedInjectionTest.java
index c1339f5..a0f051e 100644
--- a/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/NonScopedInjectionTest.java
+++ b/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/test/NonScopedInjectionTest.java
@@ -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.inject;
+package org.glassfish.jersey.tests.cdi.inject.test;
 
 import org.glassfish.jersey.inject.hk2.Hk2InjectionManagerFactory;
 import org.glassfish.jersey.servlet.ServletProperties;
@@ -24,6 +24,8 @@
 import org.glassfish.jersey.test.grizzly.GrizzlyWebTestContainerFactory;
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
+import org.glassfish.jersey.tests.cdi.inject.InjectionChecker;
+import org.glassfish.jersey.tests.cdi.inject.NonScopedApplication;
 import org.jboss.weld.environment.se.Weld;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
diff --git a/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/ScopedApplicationInjectTest.java b/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/test/ScopedApplicationInjectTest.java
similarity index 94%
rename from tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/ScopedApplicationInjectTest.java
rename to tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/test/ScopedApplicationInjectTest.java
index 9c2f15d..384f17c 100644
--- a/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/ScopedApplicationInjectTest.java
+++ b/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/test/ScopedApplicationInjectTest.java
@@ -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.inject;
+package org.glassfish.jersey.tests.cdi.inject.test;
 
 import org.glassfish.jersey.inject.hk2.Hk2InjectionManagerFactory;
 import org.glassfish.jersey.servlet.ServletProperties;
@@ -24,6 +24,8 @@
 import org.glassfish.jersey.test.grizzly.GrizzlyWebTestContainerFactory;
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
+import org.glassfish.jersey.tests.cdi.inject.InjectionChecker;
+import org.glassfish.jersey.tests.cdi.inject.ScopedApplicationInject;
 import org.jboss.weld.environment.se.Weld;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
diff --git a/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/ScopedInjectionTest.java b/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/test/ScopedInjectionTest.java
similarity index 96%
rename from tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/ScopedInjectionTest.java
rename to tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/test/ScopedInjectionTest.java
index 85ebed0..6affbd2 100644
--- a/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/ScopedInjectionTest.java
+++ b/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/test/ScopedInjectionTest.java
@@ -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.inject;
+package org.glassfish.jersey.tests.cdi.inject.test;
 
 import org.glassfish.jersey.inject.hk2.Hk2InjectionManagerFactory;
 import org.glassfish.jersey.servlet.ServletProperties;
@@ -24,6 +24,8 @@
 import org.glassfish.jersey.test.grizzly.GrizzlyWebTestContainerFactory;
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
+import org.glassfish.jersey.tests.cdi.inject.InjectionChecker;
+import org.glassfish.jersey.tests.cdi.inject.ScopedApplication;
 import org.jboss.weld.environment.se.Weld;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
diff --git a/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/ServletTest.java b/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/test/ServletTest.java
similarity index 92%
rename from tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/ServletTest.java
rename to tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/test/ServletTest.java
index d847ac1..815c7f7 100644
--- a/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/ServletTest.java
+++ b/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/test/ServletTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2022, 2023 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.inject;
+package org.glassfish.jersey.tests.cdi.inject.test;
 
 import org.glassfish.jersey.inject.hk2.Hk2InjectionManagerFactory;
 import org.glassfish.jersey.servlet.ServletProperties;
@@ -24,6 +24,8 @@
 import org.glassfish.jersey.test.grizzly.GrizzlyWebTestContainerFactory;
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
+import org.glassfish.jersey.tests.cdi.inject.InjectionChecker;
+import org.glassfish.jersey.tests.cdi.inject.ServletApplication;
 import org.jboss.weld.environment.se.Weld;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
diff --git a/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/SseTest.java b/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/test/SseTest.java
similarity index 96%
rename from tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/SseTest.java
rename to tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/test/SseTest.java
index 6fc8952..1d8a993 100644
--- a/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/SseTest.java
+++ b/tests/integration/cdi-integration/context-inject-on-server/src/test/java/org/glassfish/jersey/tests/cdi/inject/test/SseTest.java
@@ -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.inject;
+package org.glassfish.jersey.tests.cdi.inject.test;
 
 import org.glassfish.jersey.inject.hk2.Hk2InjectionManagerFactory;
 import org.glassfish.jersey.servlet.ServletProperties;
@@ -24,6 +24,8 @@
 import org.glassfish.jersey.test.grizzly.GrizzlyWebTestContainerFactory;
 import org.glassfish.jersey.test.spi.TestContainerException;
 import org.glassfish.jersey.test.spi.TestContainerFactory;
+import org.glassfish.jersey.tests.cdi.inject.InjectionChecker;
+import org.glassfish.jersey.tests.cdi.inject.SseAplication;
 import org.jboss.weld.environment.se.Weld;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
diff --git a/tests/integration/cdi-integration/pom.xml b/tests/integration/cdi-integration/pom.xml
index 1dd6bd2..82c4289 100644
--- a/tests/integration/cdi-integration/pom.xml
+++ b/tests/integration/cdi-integration/pom.xml
@@ -31,6 +31,18 @@
     <groupId>org.glassfish.jersey.tests.integration.cdi</groupId>
     <artifactId>cdi-integration-project</artifactId>
     <name>cdi-integration-project</name>
+
+    <properties>
+        <surefire.coverage.argline>
+            --add-opens weld.core.impl/org.jboss.weld.logging=org.jboss.logging
+            --add-reads org.jboss.logging=weld.core.impl
+            --add-reads org.jboss.logging=weld.environment.common
+            --add-reads org.jboss.logging=weld.se.core
+            --add-modules=ALL-MODULE-PATH
+        </surefire.coverage.argline>
+    </properties>
+
+
     <modules>
         <module>cdi-beanvalidation-webapp</module>
         <module>cdi-client</module>
@@ -67,7 +79,7 @@
         <profile>
             <id>gf-inject</id>
             <activation>
-                <jdk>[11,)</jdk>
+                <jdk>[11,24)</jdk>
             </activation>
             <modules>
                 <module>gf-cdi-inject</module>
diff --git a/tests/integration/client-connector-provider/pom.xml b/tests/integration/client-connector-provider/pom.xml
index 0ff5620..aca7b12 100644
--- a/tests/integration/client-connector-provider/pom.xml
+++ b/tests/integration/client-connector-provider/pom.xml
@@ -48,9 +48,18 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
+            <groupId>org.glassfish.jersey.test-framework</groupId>
+            <artifactId>jersey-test-framework-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.glassfish.jersey.test-framework.providers</groupId>
-            <artifactId>jersey-test-framework-provider-bundle</artifactId>
-            <type>pom</type>
+            <artifactId>jersey-test-framework-provider-grizzly2</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-engine</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/tests/integration/client-connector-provider/src/main/java/module-info.java b/tests/integration/client-connector-provider/src/main/java/module-info.java
new file mode 100644
index 0000000..59e9460
--- /dev/null
+++ b/tests/integration/client-connector-provider/src/main/java/module-info.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2022 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.integration.client.connector.provider {
+    requires jakarta.ws.rs;
+
+    requires org.glassfish.jersey.core.client;
+
+    exports org.glassfish.jersey.tests.integration.client.connector.provider;
+}
\ No newline at end of file
diff --git a/tests/integration/client-connector-provider/src/test/java/module-info.java b/tests/integration/client-connector-provider/src/test/java/module-info.java
new file mode 100644
index 0000000..6981a38
--- /dev/null
+++ b/tests/integration/client-connector-provider/src/test/java/module-info.java
@@ -0,0 +1,32 @@
+/*
+ * 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
+ * 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.integration.client.connector.provider.test {
+    requires jakarta.ws.rs;
+
+    requires org.glassfish.jersey.tests.integration.client.connector.provider;
+
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.core.server;
+
+    requires org.junit.jupiter.api;
+    requires org.junit.jupiter.engine;
+    requires org.junit.platform.engine;
+    requires org.glassfish.jersey.tests.framework.core;
+    requires org.glassfish.jersey.tests.framework.provider.grizzly;
+
+    exports org.glassfish.jersey.tests.integration.client.connector.provider.test;
+}
\ No newline at end of file
diff --git a/tests/integration/client-connector-provider/src/test/java/org/glassfish/jersey/tests/integration/client/connector/provider/CustomConnectorProviderTest.java b/tests/integration/client-connector-provider/src/test/java/org/glassfish/jersey/tests/integration/client/connector/provider/test/CustomConnectorProviderTest.java
similarity index 79%
rename from tests/integration/client-connector-provider/src/test/java/org/glassfish/jersey/tests/integration/client/connector/provider/CustomConnectorProviderTest.java
rename to tests/integration/client-connector-provider/src/test/java/org/glassfish/jersey/tests/integration/client/connector/provider/test/CustomConnectorProviderTest.java
index 71ccc04..ee5498a 100644
--- a/tests/integration/client-connector-provider/src/test/java/org/glassfish/jersey/tests/integration/client/connector/provider/CustomConnectorProviderTest.java
+++ b/tests/integration/client-connector-provider/src/test/java/org/glassfish/jersey/tests/integration/client/connector/provider/test/CustomConnectorProviderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2023 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,16 +14,18 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.tests.integration.client.connector.provider;
+package org.glassfish.jersey.tests.integration.client.connector.provider.test;
 
 import jakarta.ws.rs.core.Response;
 
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
+import org.glassfish.jersey.tests.integration.client.connector.provider.CustomConnectorProvider;
+import org.glassfish.jersey.tests.integration.client.connector.provider.TestResource;
+import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
@@ -38,7 +40,7 @@
 
     @Test
     public void testInvoked() {
-        assertFalse(CustomConnectorProvider.invoked);
+        Assertions.assertFalse(CustomConnectorProvider.invoked);
 
         Response response = target().path("test").request("text/plain").get();
         assertEquals(200, response.getStatus());
diff --git a/tests/integration/ejb-multimodule/lib/pom.xml b/tests/integration/ejb-multimodule/lib/pom.xml
index b821b0f..ae8ca07 100644
--- a/tests/integration/ejb-multimodule/lib/pom.xml
+++ b/tests/integration/ejb-multimodule/lib/pom.xml
@@ -47,6 +47,11 @@
             <artifactId>jakarta.annotation-api</artifactId>
             <scope>provided</scope>
         </dependency>
+        <dependency>
+            <groupId>jakarta.enterprise</groupId>
+            <artifactId>jakarta.enterprise.cdi-api</artifactId>
+            <scope>provided</scope>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/tests/integration/ejb-multimodule/lib/src/main/java/module-info.java b/tests/integration/ejb-multimodule/lib/src/main/java/module-info.java
new file mode 100644
index 0000000..ff74d10
--- /dev/null
+++ b/tests/integration/ejb-multimodule/lib/src/main/java/module-info.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2022, 2023 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.integration.ejb.multimodule.lib {
+    requires jakarta.ws.rs;
+    requires jakarta.ejb;
+
+    exports org.glassfish.jersey.tests.integration.multimodule.ejb.lib;
+}
\ No newline at end of file
diff --git a/tests/integration/ejb-multimodule/war/pom.xml b/tests/integration/ejb-multimodule/war/pom.xml
index 00070e3..150ac23 100644
--- a/tests/integration/ejb-multimodule/war/pom.xml
+++ b/tests/integration/ejb-multimodule/war/pom.xml
@@ -38,6 +38,11 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
+            <groupId>jakarta.enterprise</groupId>
+            <artifactId>jakarta.enterprise.cdi-api</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
             <groupId>${project.groupId}</groupId>
             <artifactId>ejb-multimodule-lib</artifactId>
             <version>${project.version}</version>
diff --git a/tests/integration/ejb-multimodule/war/src/main/java/module-info.java b/tests/integration/ejb-multimodule/war/src/main/java/module-info.java
new file mode 100644
index 0000000..e4cad14
--- /dev/null
+++ b/tests/integration/ejb-multimodule/war/src/main/java/module-info.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2022, 2023 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.integration.ejb.multimodule.war {
+    requires jakarta.ws.rs;
+    requires jakarta.ejb;
+
+    requires org.glassfish.jersey.tests.integration.ejb.multimodule.lib;
+
+    exports org.glassfish.jersey.tests.integration.multimodule.ejb.web1;
+}
\ No newline at end of file
diff --git a/tests/integration/ejb-test-webapp/pom.xml b/tests/integration/ejb-test-webapp/pom.xml
index ac870a0..90da4f0 100644
--- a/tests/integration/ejb-test-webapp/pom.xml
+++ b/tests/integration/ejb-test-webapp/pom.xml
@@ -53,6 +53,11 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
+            <groupId>jakarta.enterprise</groupId>
+            <artifactId>jakarta.enterprise.cdi-api</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
             <groupId>org.glassfish.jersey.test-framework.providers</groupId>
             <artifactId>jersey-test-framework-provider-bundle</artifactId>
             <type>pom</type>
diff --git a/tests/integration/ejb-test-webapp/src/main/java/module-info.java b/tests/integration/ejb-test-webapp/src/main/java/module-info.java
new file mode 100644
index 0000000..f86647b
--- /dev/null
+++ b/tests/integration/ejb-test-webapp/src/main/java/module-info.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2022, 2023 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.integration.ejb.test.webapp {
+    requires jakarta.ws.rs;
+    requires jakarta.ejb;
+    requires jakarta.servlet;
+
+    requires java.logging;
+
+    exports org.glassfish.jersey.tests.ejb.resources;
+}
\ No newline at end of file
diff --git a/tests/integration/jaxrs-component-inject/src/main/java/module-info.java b/tests/integration/jaxrs-component-inject/src/main/java/module-info.java
new file mode 100644
index 0000000..f7c3fa9
--- /dev/null
+++ b/tests/integration/jaxrs-component-inject/src/main/java/module-info.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2022 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.integration.jaxrs.component.inject {
+    requires jakarta.ws.rs;
+    requires jakarta.xml.bind;
+
+    requires org.glassfish.jersey.core.common;
+
+    exports org.glassfish.jersey.tests.jaxrs.inject;
+}
\ No newline at end of file
diff --git a/tests/integration/jersey-1107/src/main/java/module-info.java b/tests/integration/jersey-1107/src/main/java/module-info.java
new file mode 100644
index 0000000..cbdb86d
--- /dev/null
+++ b/tests/integration/jersey-1107/src/main/java/module-info.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2022 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.integration.jersey_1107 {
+    requires jakarta.ws.rs;
+    requires jakarta.xml.bind;
+
+    requires org.glassfish.jersey.core.server;
+}
\ No newline at end of file
diff --git a/tests/integration/jersey-1223/src/main/java/module-info.java b/tests/integration/jersey-1223/src/main/java/module-info.java
new file mode 100644
index 0000000..15fcf36
--- /dev/null
+++ b/tests/integration/jersey-1223/src/main/java/module-info.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2022 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.integration.jersey1223 {
+    requires jakarta.ws.rs;
+    requires jakarta.xml.bind;
+
+    requires org.glassfish.jersey.core.server;
+}
\ No newline at end of file
diff --git a/tests/integration/jersey-1604/pom.xml b/tests/integration/jersey-1604/pom.xml
index cb0f12c..91cd5b1 100644
--- a/tests/integration/jersey-1604/pom.xml
+++ b/tests/integration/jersey-1604/pom.xml
@@ -72,4 +72,9 @@
             </plugin>
         </plugins>
     </build>
+    <properties>
+        <failsafe.coverage.argline>
+            --add-opens org.glassfish.jersey.core.client/org.glassfish.jersey.client.innate=ALL-UNNAMED
+            --add-exports org.glassfish.jersey.core.common/org.glassfish.jersey.innate.io=ALL-UNNAMED --add-modules=ALL-MODULE-PATH</failsafe.coverage.argline>
+    </properties>
 </project>
diff --git a/tests/integration/jersey-1604/src/main/java/module-info.java b/tests/integration/jersey-1604/src/main/java/module-info.java
new file mode 100644
index 0000000..b339487
--- /dev/null
+++ b/tests/integration/jersey-1604/src/main/java/module-info.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2022 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.integration.jersey_1604 {
+    requires jakarta.ws.rs;
+    requires jakarta.xml.bind;
+
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.core.client;
+}
\ No newline at end of file
diff --git a/tests/integration/jersey-1667/src/main/java/module-info.java b/tests/integration/jersey-1667/src/main/java/module-info.java
new file mode 100644
index 0000000..a2f3b00
--- /dev/null
+++ b/tests/integration/jersey-1667/src/main/java/module-info.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2022 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.integration.jersey_1667 {
+    requires jakarta.ws.rs;
+    requires jakarta.xml.bind;
+
+    requires org.glassfish.jersey.core.client;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.media.multipart;
+}
\ No newline at end of file
diff --git a/tests/integration/jersey-1883/src/main/java/module-info.java b/tests/integration/jersey-1883/src/main/java/module-info.java
new file mode 100644
index 0000000..3c742ae
--- /dev/null
+++ b/tests/integration/jersey-1883/src/main/java/module-info.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2022 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.integration.jersey_1883 {
+    requires jakarta.annotation;
+    requires jakarta.ws.rs;
+    requires jakarta.inject;
+    requires jakarta.xml.bind;
+
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.inject.hk2;
+}
\ No newline at end of file
diff --git a/tests/integration/jersey-1928/src/main/java/module-info.java b/tests/integration/jersey-1928/src/main/java/module-info.java
new file mode 100644
index 0000000..383097a
--- /dev/null
+++ b/tests/integration/jersey-1928/src/main/java/module-info.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2022 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.integration.jersey1928 {
+    requires jakarta.ws.rs;
+    requires jakarta.xml.bind;
+
+    requires org.glassfish.jersey.core.server;
+}
\ No newline at end of file
diff --git a/tests/integration/jersey-1960/src/main/java/module-info.java b/tests/integration/jersey-1960/src/main/java/module-info.java
new file mode 100644
index 0000000..b9714eb
--- /dev/null
+++ b/tests/integration/jersey-1960/src/main/java/module-info.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2022 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.integration.jersey_1960 {
+    requires jakarta.ws.rs;
+    requires jakarta.servlet;
+    requires jakarta.xml.bind;
+
+    requires org.glassfish.jersey.core.common;
+}
\ No newline at end of file
diff --git a/tests/integration/jersey-2031/pom.xml b/tests/integration/jersey-2031/pom.xml
index 33583c3..a140118 100644
--- a/tests/integration/jersey-2031/pom.xml
+++ b/tests/integration/jersey-2031/pom.xml
@@ -53,6 +53,12 @@
             <artifactId>jersey-test-framework-provider-external</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>jakarta.servlet.jsp</groupId>
+            <artifactId>jakarta.servlet.jsp-api</artifactId>
+            <version>${jsp.version}</version>
+            <scope>provided</scope>
+        </dependency>
     </dependencies>
 
     <build>
@@ -102,4 +108,4 @@
         </plugins>
     </build>
 
-</project>
+</project>
\ No newline at end of file
diff --git a/tests/integration/jersey-2031/src/main/java/module-info.java b/tests/integration/jersey-2031/src/main/java/module-info.java
new file mode 100644
index 0000000..b46433a
--- /dev/null
+++ b/tests/integration/jersey-2031/src/main/java/module-info.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2022 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.integration.jersey_2031 {
+    requires jakarta.ws.rs;
+    requires jakarta.xml.bind;
+    requires jakarta.servlet.jsp;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.ext.mvc;
+    requires org.glassfish.jersey.ext.mvc.jsp;
+}
\ No newline at end of file
diff --git a/tests/integration/jersey-2136/src/main/java/module-info.java b/tests/integration/jersey-2136/src/main/java/module-info.java
new file mode 100644
index 0000000..324dc62
--- /dev/null
+++ b/tests/integration/jersey-2136/src/main/java/module-info.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2022 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.integration.jersey_2136 {
+    requires jakarta.ws.rs;
+    requires jakarta.xml.bind;
+    requires org.glassfish.jersey.core.server;
+}
\ No newline at end of file
diff --git a/tests/integration/jersey-2137/src/main/java/module-info.java b/tests/integration/jersey-2137/src/main/java/module-info.java
new file mode 100644
index 0000000..f35db2e
--- /dev/null
+++ b/tests/integration/jersey-2137/src/main/java/module-info.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2022 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.integration.jersey_2137 {
+    requires jakarta.persistence;
+    requires jakarta.cdi;
+    requires jakarta.transaction;
+    requires jakarta.ws.rs;
+}
\ No newline at end of file
diff --git a/tests/integration/jersey-2154/src/main/java/module-info.java b/tests/integration/jersey-2154/src/main/java/module-info.java
new file mode 100644
index 0000000..b295a3a
--- /dev/null
+++ b/tests/integration/jersey-2154/src/main/java/module-info.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2022, 2023 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.integration.jersey_2154 {
+    requires jakarta.ejb;
+    requires jakarta.cdi;
+    requires jakarta.ws.rs;
+}
\ No newline at end of file
diff --git a/tests/integration/jersey-2160/src/main/java/module-info.java b/tests/integration/jersey-2160/src/main/java/module-info.java
new file mode 100644
index 0000000..15779d5
--- /dev/null
+++ b/tests/integration/jersey-2160/src/main/java/module-info.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2022 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.integration.jersey_2160 {
+    requires jakarta.servlet;
+    requires jakarta.ws.rs;
+    requires jakarta.xml.bind;
+    requires org.glassfish.hk2.api;
+}
\ No newline at end of file
diff --git a/tests/integration/jersey-2164/src/main/java/module-info.java b/tests/integration/jersey-2164/src/main/java/module-info.java
new file mode 100644
index 0000000..c6dd33e
--- /dev/null
+++ b/tests/integration/jersey-2164/src/main/java/module-info.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2022 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.integration.async.jersey2164 {
+    requires jakarta.ws.rs;
+    requires jakarta.xml.bind;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+}
\ No newline at end of file
diff --git a/tests/integration/jersey-2167/src/main/java/module-info.txt b/tests/integration/jersey-2167/src/main/java/module-info.txt
new file mode 100644
index 0000000..5e49c90
--- /dev/null
+++ b/tests/integration/jersey-2167/src/main/java/module-info.txt
@@ -0,0 +1,27 @@
+/*
+ * 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.tests.integration.jersey_2167 {
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+    requires jakarta.xml.bind;
+
+    requires java.logging;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.inject.hk2;
+}
\ No newline at end of file
diff --git a/tests/integration/jersey-2176/src/main/java/module-info.java b/tests/integration/jersey-2176/src/main/java/module-info.java
new file mode 100644
index 0000000..791d9d9
--- /dev/null
+++ b/tests/integration/jersey-2176/src/main/java/module-info.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2022 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.integration.jersey_2176 {
+    requires jakarta.ws.rs;
+    requires jakarta.servlet;
+    requires jakarta.xml.bind;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+}
\ No newline at end of file
diff --git a/tests/integration/jersey-2184/src/main/java/module-info.java b/tests/integration/jersey-2184/src/main/java/module-info.java
new file mode 100644
index 0000000..17571be
--- /dev/null
+++ b/tests/integration/jersey-2184/src/main/java/module-info.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2022 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.integration.jersey_2184 {
+    requires jakarta.servlet;
+    requires jakarta.ws.rs;
+    requires jakarta.xml.bind;
+
+    requires org.glassfish.jersey.inject.hk2;
+}
\ No newline at end of file
diff --git a/tests/integration/jersey-2255/pom.xml b/tests/integration/jersey-2255/pom.xml
index 64adc17..0e90826 100644
--- a/tests/integration/jersey-2255/pom.xml
+++ b/tests/integration/jersey-2255/pom.xml
@@ -51,6 +51,17 @@
             <artifactId>jersey-test-framework-provider-external</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>com.sun.xml.bind</groupId>
+            <artifactId>jaxb-xjc</artifactId>
+            <version>${jaxb.ri.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
@@ -69,5 +80,7 @@
             </plugin>
         </plugins>
     </build>
-
+    <properties>
+        <failsafe.coverage.argline>--add-opens org.eclipse.persistence.moxy/org.eclipse.persistence.jaxb.rs=org.glassfish.hk2.utilities  --add-modules=ALL-MODULE-PATH</failsafe.coverage.argline>
+    </properties>
 </project>
diff --git a/tests/integration/jersey-2255/src/main/java/module-info.java b/tests/integration/jersey-2255/src/main/java/module-info.java
new file mode 100644
index 0000000..c9d1889
--- /dev/null
+++ b/tests/integration/jersey-2255/src/main/java/module-info.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2022 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.integration.jersey_2255 {
+    requires jakarta.ws.rs;
+    requires jakarta.xml.bind;
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.ext.entity.filtering;
+
+    opens org.glassfish.jersey.tests.integration.jersey2255;
+}
\ No newline at end of file
diff --git a/tests/integration/jersey-2255/src/test/java/module-info.java b/tests/integration/jersey-2255/src/test/java/module-info.java
new file mode 100644
index 0000000..57c76c2
--- /dev/null
+++ b/tests/integration/jersey-2255/src/test/java/module-info.java
@@ -0,0 +1,34 @@
+/*
+ * 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
+ * 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.integration.jersey_2255 {
+    requires jakarta.ws.rs;
+    requires jakarta.xml.bind;
+
+    requires org.junit.jupiter.api;
+    requires org.junit.platform.engine;
+    requires org.hamcrest;
+    requires org.glassfish.jersey.tests.framework.core;
+    requires org.glassfish.jersey.tests.framework.provider.external;
+
+    requires org.eclipse.persistence.moxy;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.ext.entity.filtering;
+
+    opens org.glassfish.jersey.tests.integration.jersey2255;
+}
\ No newline at end of file
diff --git a/tests/integration/jersey-2322/src/main/java/module-info.txt b/tests/integration/jersey-2322/src/main/java/module-info.txt
new file mode 100644
index 0000000..2bcefdc
--- /dev/null
+++ b/tests/integration/jersey-2322/src/main/java/module-info.txt
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2022 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
+ */
+//TODO - fixme as soon as json-jackson module is modularized
+module org.glassfish.jersey.tests.integration.jersey_2322 {
+    requires com.fasterxml.jackson.databind;
+
+    requires jakarta.ws.rs;
+
+    requires org.glassfish.jersey.core.server;
+}
\ No newline at end of file
diff --git a/tests/integration/jersey-2335/src/main/java/module-info.txt b/tests/integration/jersey-2335/src/main/java/module-info.txt
new file mode 100644
index 0000000..902ee54
--- /dev/null
+++ b/tests/integration/jersey-2335/src/main/java/module-info.txt
@@ -0,0 +1,25 @@
+/*
+ * 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.tests.integration.jersey_2335 {
+    requires jakarta.ws.rs;
+    requires jakarta.xml.bind;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+
+    opens org.glassfish.jersey.tests.integration.jersey2335;
+}
\ No newline at end of file
diff --git a/tests/integration/jersey-2551/src/main/java/module-info.java b/tests/integration/jersey-2551/src/main/java/module-info.java
new file mode 100644
index 0000000..346a629
--- /dev/null
+++ b/tests/integration/jersey-2551/src/main/java/module-info.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2022 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.integration.jersey_2551 {
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+    requires jakarta.xml.bind;
+
+    requires org.glassfish.hk2.api;
+    requires org.glassfish.hk2.locator;
+
+    requires org.glassfish.jersey.core.server;
+}
\ No newline at end of file
diff --git a/tests/integration/jersey-2612/src/main/java/module-info.java b/tests/integration/jersey-2612/src/main/java/module-info.java
new file mode 100644
index 0000000..9e3eaf7
--- /dev/null
+++ b/tests/integration/jersey-2612/src/main/java/module-info.java
@@ -0,0 +1,25 @@
+/*
+ * 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.tests.integration.jersey_2612 {
+    requires jakarta.inject;
+    requires jakarta.ws.rs;
+    requires jakarta.xml.bind;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+    requires org.glassfish.jersey.inject.hk2;
+}
\ No newline at end of file
diff --git a/tests/integration/jersey-2637/src/main/java/module-info.java b/tests/integration/jersey-2637/src/main/java/module-info.java
new file mode 100644
index 0000000..1568de5
--- /dev/null
+++ b/tests/integration/jersey-2637/src/main/java/module-info.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2022 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.integration.jersey_2637 {
+    requires jakarta.servlet;
+    requires jakarta.ws.rs;
+    requires jakarta.xml.bind;
+
+    requires org.glassfish.jersey.core.server;
+}
\ No newline at end of file
diff --git a/tests/integration/jersey-2654/src/main/java/module-info.java b/tests/integration/jersey-2654/src/main/java/module-info.java
new file mode 100644
index 0000000..c2d5306
--- /dev/null
+++ b/tests/integration/jersey-2654/src/main/java/module-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2022 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.integration.jersey_2654 {
+    requires jakarta.ws.rs;
+//    requires jakarta.xml.bind;
+}
\ No newline at end of file
diff --git a/tests/integration/jersey-2704/pom.xml b/tests/integration/jersey-2704/pom.xml
index 482e939..f6e2e92 100644
--- a/tests/integration/jersey-2704/pom.xml
+++ b/tests/integration/jersey-2704/pom.xml
@@ -69,4 +69,4 @@
         </plugins>
     </build>
 
-</project>
+</project>
\ No newline at end of file
diff --git a/tests/integration/jersey-2704/src/main/java/module-info.java b/tests/integration/jersey-2704/src/main/java/module-info.java
new file mode 100644
index 0000000..b99b1f7
--- /dev/null
+++ b/tests/integration/jersey-2704/src/main/java/module-info.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2022 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.integration.jersey_2704 {
+    requires jakarta.inject;
+//    requires jakarta.persistence;
+    requires jakarta.servlet;
+    requires jakarta.ws.rs;
+    requires jakarta.xml.bind;
+
+    requires org.glassfish.hk2.api;
+
+    requires org.glassfish.jersey.core.common;
+    requires org.glassfish.jersey.core.server;
+
+    requires org.glassfish.jersey.container.servlet.core;
+}
\ No newline at end of file
diff --git a/tests/integration/jersey-4099/pom.xml b/tests/integration/jersey-4099/pom.xml
index 327c36b..f0c0b82 100644
--- a/tests/integration/jersey-4099/pom.xml
+++ b/tests/integration/jersey-4099/pom.xml
@@ -42,9 +42,13 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.glassfish.jersey.test-framework</groupId>
+            <artifactId>jersey-test-framework-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.glassfish.jersey.test-framework.providers</groupId>
-            <artifactId>jersey-test-framework-provider-bundle</artifactId>
-            <type>pom</type>
+            <artifactId>jersey-test-framework-provider-grizzly2</artifactId>
             <scope>test</scope>
         </dependency>
 
@@ -81,7 +85,11 @@
             <groupId>org.glassfish.jersey.ext.cdi</groupId>
             <artifactId>jersey-cdi1x</artifactId>
         </dependency>
-
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
@@ -92,4 +100,13 @@
             </plugin>
         </plugins>
     </build>
+    <properties>
+        <surefire.coverage.argline>
+            --add-opens weld.core.impl/org.jboss.weld.logging=org.jboss.logging
+            --add-reads org.jboss.logging=weld.core.impl
+            --add-reads org.jboss.logging=weld.environment.common
+            --add-reads org.jboss.logging=weld.se.core
+            --add-modules=ALL-MODULE-PATH
+        </surefire.coverage.argline>
+    </properties>
 </project>
diff --git a/tests/integration/jersey-4099/src/main/java/module-info.java b/tests/integration/jersey-4099/src/main/java/module-info.java
new file mode 100644
index 0000000..35c3a3e
--- /dev/null
+++ b/tests/integration/jersey-4099/src/main/java/module-info.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2022, 2023 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.integration.jersey4099 {
+    requires jakarta.ws.rs;
+    requires jakarta.annotation;
+
+    requires jakarta.cdi;
+
+}
\ No newline at end of file
diff --git a/tests/integration/jersey-4099/src/test/java/module-info.java b/tests/integration/jersey-4099/src/test/java/module-info.java
new file mode 100644
index 0000000..7135e70
--- /dev/null
+++ b/tests/integration/jersey-4099/src/test/java/module-info.java
@@ -0,0 +1,34 @@
+/*
+ * 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
+ * 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.integration.jersey4099 {
+    requires jakarta.ws.rs;
+    requires jakarta.annotation;
+
+    requires jakarta.cdi;
+    requires weld.se.core;
+
+    requires jakarta.xml.bind;
+
+    requires org.glassfish.jersey.core.server;
+
+    requires org.junit.jupiter.api;
+    requires org.junit.platform.engine;
+    requires org.glassfish.jersey.tests.framework.core;
+    requires org.glassfish.jersey.tests.framework.provider.grizzly;
+
+    exports org.glassfish.jersey.tests.integration.jersey4099;
+}
\ No newline at end of file
diff --git a/tests/integration/jersey-5087/pom.xml b/tests/integration/jersey-5087/pom.xml
index 2e92f37..0d24ccf 100644
--- a/tests/integration/jersey-5087/pom.xml
+++ b/tests/integration/jersey-5087/pom.xml
@@ -73,6 +73,12 @@
         <dependency>
             <groupId>org.glassfish.jersey.connectors</groupId>
             <artifactId>jersey-jetty-connector</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>slf4j-api</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
         <dependency>
             <groupId>org.glassfish.jersey.connectors</groupId>
@@ -310,4 +316,15 @@
         <maven.test.skip>true</maven.test.skip> <!-- do not run any tests here, it's useless,
         dependencies clash is being tested even before compilation. -->
     </properties>
+    <profiles>
+        <profile>
+            <id>jdk_11_17</id>
+            <activation>
+                <jdk>[11,17)</jdk>
+            </activation>
+            <properties>
+                <slf4j.version>2.0.13</slf4j.version>
+            </properties>
+        </profile>
+    </profiles>
 </project>
\ No newline at end of file
diff --git a/tests/integration/jersey-780/pom.xml b/tests/integration/jersey-780/pom.xml
index 0593fea..504c5b2 100644
--- a/tests/integration/jersey-780/pom.xml
+++ b/tests/integration/jersey-780/pom.xml
@@ -43,6 +43,28 @@
             <artifactId>jersey-test-framework-provider-external</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.test-framework</groupId>
+            <artifactId>jersey-test-framework-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.testng</groupId>
+            <artifactId>testng</artifactId>
+            <scope>test</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>aopalliance</groupId>
+                    <artifactId>aopalliance</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
@@ -61,5 +83,10 @@
             </plugin>
         </plugins>
     </build>
-
+    <properties>
+        <failsafe.coverage.argline>
+            --add-reads org.glassfish.jersey.tests.integration.jersey_780=ALL-UNNAMED
+            --add-modules=ALL-MODULE-PATH
+        </failsafe.coverage.argline>
+    </properties>
 </project>
diff --git a/tests/integration/microprofile/pom.xml b/tests/integration/microprofile/pom.xml
index e3da6bd..284d717 100644
--- a/tests/integration/microprofile/pom.xml
+++ b/tests/integration/microprofile/pom.xml
@@ -34,6 +34,7 @@
         <module>config</module>
         <module>rest-client</module>
         <module>rest-client-tck</module>
+        <module>rest-client-tck3</module>
     </modules>
 
     <build>
diff --git a/tests/integration/microprofile/rest-client-tck/pom.xml b/tests/integration/microprofile/rest-client-tck/pom.xml
index 907f4f0..b2ccaae 100644
--- a/tests/integration/microprofile/rest-client-tck/pom.xml
+++ b/tests/integration/microprofile/rest-client-tck/pom.xml
@@ -35,6 +35,24 @@
             <artifactId>jersey-mp-rest-client</artifactId>
             <version>${project.version}</version>
             <scope>test</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.eclipse.microprofile.rest.client</groupId>
+                    <artifactId>microprofile-rest-client-api</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.microprofile.rest.client</groupId>
+            <artifactId>microprofile-rest-client-api</artifactId>
+            <version>${microprofile.rest.client.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.microprofile.rest.client</groupId>
+            <artifactId>microprofile-rest-client-tck</artifactId>
+            <version>${microprofile.rest.client.version}</version>
+            <scope>test</scope>
         </dependency>
         <!-- Overrides CDI from parent pom -->
         <dependency>
@@ -51,9 +69,8 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>javax.servlet-api</artifactId>
-            <version>4.0.1</version>
+            <groupId>jakarta.servlet</groupId>
+            <artifactId>jakarta.servlet-api</artifactId>
         </dependency>
         <dependency>
             <groupId>io.smallrye.config</groupId>
@@ -62,21 +79,15 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.eclipse.microprofile.rest.client</groupId>
-            <artifactId>microprofile-rest-client-tck</artifactId>
-            <version>${microprofile.rest.client.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
             <groupId>org.testng</groupId>
             <artifactId>testng</artifactId>
-            <version>${testng6.version}</version>
+            <version>${testng.version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>com.github.tomakehurst</groupId>
+            <groupId>org.wiremock</groupId>
             <artifactId>wiremock</artifactId>
-            <version>${wiremock.version}</version>
+            <version>${wiremock.jetty11.version}</version>
             <scope>test</scope>
             <exclusions>
                 <exclusion>
@@ -171,6 +182,11 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.glassfish.jersey.media</groupId>
+            <artifactId>jersey-media-multipart</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.glassfish.jersey.ext.cdi</groupId>
             <artifactId>jersey-weld2-se</artifactId>
             <scope>test</scope>
@@ -239,11 +255,20 @@
                 </plugins>
             </build>
         </profile>
+        <profile>
+            <id>securityOff</id>
+            <activation>
+                <jdk>[24,)</jdk>
+            </activation>
+            <properties>
+                <surefire.security.argline />
+            </properties>
+        </profile>
     </profiles>
 
     <properties>
         <surefire.security.argline>-Djava.security.manager -Djava.security.policy=${project.build.directory}/test-classes/server.policy</surefire.security.argline>
-        <jetty.version>${jetty9.version}</jetty.version>
+        <jetty.version>${jetty11.version}</jetty.version>
     </properties>
 
 
diff --git a/tests/integration/microprofile/rest-client-tck3/pom.xml b/tests/integration/microprofile/rest-client-tck3/pom.xml
new file mode 100644
index 0000000..4dab56c
--- /dev/null
+++ b/tests/integration/microprofile/rest-client-tck3/pom.xml
@@ -0,0 +1,262 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Copyright (c) 2019, 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
+
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>microprofile-integration-project</artifactId>
+        <groupId>org.glassfish.jersey.tests.integration.microprofile</groupId>
+        <version>4.0.99-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>jersey-rest-client-tck3</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.glassfish.jersey.ext.microprofile</groupId>
+            <artifactId>jersey-mp-rest-client</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <!-- Overrides CDI from parent pom -->
+        <dependency>
+            <groupId>jakarta.enterprise</groupId>
+            <artifactId>jakarta.enterprise.cdi-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>jakarta.ejb</groupId>
+            <artifactId>jakarta.ejb-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.weld.se</groupId>
+            <artifactId>weld-se-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>javax.servlet-api</artifactId>
+            <version>4.0.1</version>
+        </dependency>
+        <dependency>
+            <groupId>io.smallrye.config</groupId>
+            <artifactId>smallrye-config</artifactId>
+            <version>${smallrye.config.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.microprofile.rest.client</groupId>
+            <artifactId>microprofile-rest-client-tck</artifactId>
+            <version>${microprofile.rest.client.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.testng</groupId>
+            <artifactId>testng</artifactId>
+            <version>${testng6.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.github.tomakehurst</groupId>
+            <artifactId>wiremock</artifactId>
+            <version>${wiremock.jetty9.version}</version>
+            <scope>test</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.eclipse.jetty</groupId>
+                    <artifactId>jetty-server</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.eclipse.jetty</groupId>
+                    <artifactId>jetty-servlet</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.eclipse.jetty</groupId>
+                    <artifactId>jetty-servlets</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.eclipse.jetty</groupId>
+                    <artifactId>jetty-webapp</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.eclipse.jetty</groupId>
+                    <artifactId>jetty-proxy</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+            <version>${guava.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-server</artifactId>
+            <version>${jetty.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-servlet</artifactId>
+            <version>${jetty.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-servlets</artifactId>
+            <version>${jetty.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-webapp</artifactId>
+            <version>${jetty.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-proxy</artifactId>
+            <version>${jetty.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.arquillian.testng</groupId>
+            <artifactId>arquillian-testng-container</artifactId>
+            <version>${arquillian.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.arquillian.container</groupId>
+            <artifactId>arquillian-container-test-spi</artifactId>
+            <version>${arquillian.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.arquillian.container</groupId>
+            <artifactId>arquillian-weld-embedded</artifactId>
+            <version>${arquillian.weld.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.test-framework</groupId>
+            <artifactId>jersey-test-framework-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
+            <artifactId>jersey-test-framework-provider-bundle</artifactId>
+            <type>pom</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.connectors</groupId>
+            <artifactId>jersey-apache5-connector</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.ext.cdi</groupId>
+            <artifactId>jersey-weld2-se</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>${junit4.version}</version>
+        </dependency>
+    </dependencies>
+
+    <profiles>
+        <profile>
+            <id>testRunner</id>
+<!-- DO NOT ACTIVATE BY DEFAULT, tests are run by rest-client-tck (4) -->
+<!-- Kept for case of an error found in version 3 -->
+<!--            <activation>-->
+<!--                <property>-->
+<!--                    <name>skipTests</name>-->
+<!--                    <value>!true</value>-->
+<!--                </property>-->
+<!--                <jdk>[17,)</jdk>-->
+<!--            </activation>-->
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-surefire-plugin</artifactId>
+                        <dependencies>
+                            <dependency>
+                                <groupId>org.apache.maven.surefire</groupId>
+                                <artifactId>surefire-junit47</artifactId>
+                                <version>${surefire.mvn.plugin.version}</version>
+                            </dependency>
+                            <dependency>
+                                <groupId>org.apache.maven.surefire</groupId>
+                                <artifactId>surefire-testng</artifactId>
+                                <version>${surefire.mvn.plugin.version}</version>
+                            </dependency>
+                        </dependencies>
+                        <configuration>
+                            <threadCount>1</threadCount>
+                            <suiteXmlFiles>
+                                <suiteXmlFile>tck-suite.xml</suiteXmlFile>
+                            </suiteXmlFiles>
+<!--                            <argLine>-verbose:class</argLine>-->
+                        </configuration>
+                    </plugin>
+                    <plugin>
+                        <groupId>uk.co.deliverymind</groupId>
+                        <artifactId>wiremock-maven-plugin</artifactId>
+                        <version>${wiremock.mvn.plugin.version}</version>
+                        <executions>
+                            <execution>
+                                <phase>test-compile</phase>
+                                <goals>
+                                    <goal>run</goal>
+                                </goals>
+                                <configuration>
+                                    <dir>target/classes</dir>
+                                    <params>--port=8765</params>
+                                    <!-- Enable verbose for more detailed output-->
+                                    <!-- <params>&#45;&#45;verbose</params>-->
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        <profile>
+            <id>securityOff</id>
+            <activation>
+                <jdk>[24,)</jdk>
+            </activation>
+            <properties>
+                <surefire.security.argline />
+            </properties>
+        </profile>
+    </profiles>
+
+    <properties>
+        <surefire.security.argline>-Djava.security.manager -Djava.security.policy=${project.build.directory}/test-classes/server.policy</surefire.security.argline>
+        <jetty.version>${jetty9.version}</jetty.version>
+        <microprofile.rest.client.version>${microprofile.rest.client3.version}</microprofile.rest.client.version>
+    </properties>
+
+
+</project>
diff --git a/tests/integration/microprofile/rest-client-tck3/src/test/resources/arquillian.xml b/tests/integration/microprofile/rest-client-tck3/src/test/resources/arquillian.xml
new file mode 100644
index 0000000..fffd8c9
--- /dev/null
+++ b/tests/integration/microprofile/rest-client-tck3/src/test/resources/arquillian.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Copyright (c) 2019, 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
+
+-->
+
+<arquillian xmlns="http://jboss.org/schema/arquillian"
+            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+            xsi:schemaLocation="
+        http://jboss.org/schema/arquillian
+        http://jboss.org/schema/arquillian/arquillian_1_0.xsd">
+
+    <engine>
+        <property name="deploymentExportPath">target/deployments</property>
+    </engine>
+</arquillian>
diff --git a/tests/integration/microprofile/rest-client-tck3/src/test/resources/server.policy b/tests/integration/microprofile/rest-client-tck3/src/test/resources/server.policy
new file mode 100644
index 0000000..d448842
--- /dev/null
+++ b/tests/integration/microprofile/rest-client-tck3/src/test/resources/server.policy
@@ -0,0 +1,19 @@
+/*
+ * Copyright (c) 2019, 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
+ */
+
+grant {
+  permission java.security.AllPermission;
+};
diff --git a/tests/integration/microprofile/rest-client-tck3/tck-suite.xml b/tests/integration/microprofile/rest-client-tck3/tck-suite.xml
new file mode 100644
index 0000000..c83fae3
--- /dev/null
+++ b/tests/integration/microprofile/rest-client-tck3/tck-suite.xml
@@ -0,0 +1,29 @@
+<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
+<!--
+
+    Copyright (c) 2019, 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
+
+-->
+
+<suite name="microprofile-rest-client-TCK" verbose="2" configfailurepolicy="continue">
+
+    <test name="microprofile-rest-client TCK">
+        <packages>
+            <package name="org.eclipse.microprofile.rest.client.tck.*">
+            </package>
+        </packages>
+    </test>
+
+</suite>
diff --git a/tests/integration/microprofile/rest-client/src/test/java/org/glassfish/jersey/test/microprofile/restclient/HttpHeaderTest.java b/tests/integration/microprofile/rest-client/src/test/java/org/glassfish/jersey/test/microprofile/restclient/HttpHeaderTest.java
new file mode 100644
index 0000000..fd31fe8
--- /dev/null
+++ b/tests/integration/microprofile/rest-client/src/test/java/org/glassfish/jersey/test/microprofile/restclient/HttpHeaderTest.java
@@ -0,0 +1,131 @@
+/*
+ * 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
+ */
+
+package org.glassfish.jersey.test.microprofile.restclient;
+
+import jakarta.json.Json;
+import jakarta.json.JsonArray;
+import jakarta.json.JsonArrayBuilder;
+import jakarta.json.JsonObject;
+import jakarta.json.JsonObjectBuilder;
+import jakarta.json.JsonString;
+import jakarta.json.JsonValue;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.HeaderParam;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.client.ClientRequestContext;
+import jakarta.ws.rs.client.ClientRequestFilter;
+import jakarta.ws.rs.core.MultivaluedMap;
+import jakarta.ws.rs.core.Response;
+import org.eclipse.microprofile.rest.client.RestClientBuilder;
+import org.eclipse.microprofile.rest.client.annotation.ClientHeaderParam;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public class HttpHeaderTest {
+    @Path("/")
+    public interface HeaderResource {
+        @GET
+        public String get();
+    }
+
+    @Test
+    public void restclientBuilderWithHeadersTest() {
+        String headerName = "BUILDER_HEADER";
+        String headerValue = "BUILDER_VALUE";
+        HeaderResource resource = RestClientBuilder.newBuilder()
+                .baseUri("http://localhost:8080")
+                .register(new ClientRequestFilter() {
+                    @Override
+                    public void filter(ClientRequestContext requestContext) throws IOException {
+                        if (requestContext.getHeaders().containsKey(headerName)) {
+                            requestContext.abortWith(Response.ok(requestContext.getHeaders().getFirst(headerName)).build());
+                        } else {
+                            requestContext.abortWith(Response.ok("no_header").build());
+                        }
+                    }
+                })
+                .header(headerName, headerValue)
+                .build(HeaderResource.class);
+        Assertions.assertEquals(headerValue, resource.get());
+    }
+
+    @ClientHeaderParam(name = "InterfaceAndBuilderHeader", value = "interface")
+    @Path("/")
+    public interface ClientBuilderHeaderClient {
+
+        @GET
+        JsonObject getAllHeaders(@HeaderParam("HeaderParam") String param);
+    }
+
+    public static class ReturnWithAllDuplicateClientHeadersFilter implements ClientRequestFilter {
+
+        @Override
+        public void filter(ClientRequestContext clientRequestContext) throws IOException {
+            JsonObjectBuilder allClientHeaders = Json.createObjectBuilder();
+            MultivaluedMap<String, Object> clientHeaders = clientRequestContext.getHeaders();
+            for (String headerName : clientHeaders.keySet()) {
+                List<Object> header = clientHeaders.get(headerName);
+                final JsonArrayBuilder headerValues = Json.createArrayBuilder();
+                header.forEach(h -> headerValues.add(h.toString()));
+                allClientHeaders.add(headerName, headerValues);
+            }
+            clientRequestContext.abortWith(Response.ok(allClientHeaders.build()).build());
+        }
+
+    }
+
+    @Test
+    public void testHeaderBuilderInterface() {
+
+        RestClientBuilder builder = RestClientBuilder.newBuilder().baseUri("http://localhost:8080/");
+        builder.register(ReturnWithAllDuplicateClientHeadersFilter.class);
+        builder.header("InterfaceAndBuilderHeader", "builder");
+        ClientBuilderHeaderClient client = builder.build(ClientBuilderHeaderClient.class);
+
+        checkHeaders(client.getAllHeaders("headerparam"), "interface");
+    }
+
+    private static void checkHeaders(final JsonObject headers, final String clientHeaderParamName) {
+        final List<String> clientRequestHeaders = headerValues(headers, "InterfaceAndBuilderHeader");
+
+        assertTrue(clientRequestHeaders.contains("builder"),
+                "Header InterfaceAndBuilderHeader did not container \"builder\": " + clientRequestHeaders);
+        assertTrue(clientRequestHeaders.contains(clientHeaderParamName),
+                "Header InterfaceAndBuilderHeader did not container \"" + clientHeaderParamName + "\": "
+                        + clientRequestHeaders);
+
+        final List<String> headerParamHeaders = headerValues(headers, "HeaderParam");
+        assertTrue(headerParamHeaders.contains("headerparam"),
+                "Header HeaderParam did not container \"headerparam\": " + headerParamHeaders);
+    }
+
+    private static List<String> headerValues(final JsonObject headers, final String headerName) {
+        final JsonArray headerValues = headers.getJsonArray(headerName);
+        Assertions.assertNotNull(headerValues,
+                String.format("Expected header '%s' to be present in %s", headerName, headers));
+        return headerValues.stream().map(
+                        v -> (v.getValueType() == JsonValue.ValueType.STRING ? ((JsonString) v).getString() : v.toString()))
+                .collect(Collectors.toList());
+    }
+
+}
diff --git a/tests/integration/resteasy-client/pom.xml b/tests/integration/resteasy-client/pom.xml
new file mode 100644
index 0000000..a4be16e
--- /dev/null
+++ b/tests/integration/resteasy-client/pom.xml
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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
+
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.glassfish.jersey.tests.integration</groupId>
+        <artifactId>project</artifactId>
+        <version>3.5.99-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>spring-boot</artifactId>
+
+    <packaging>war</packaging>
+    <name>jersey-tests-integration-spring6</name>
+
+    <description>
+        Jersey tests for Spring.Boot / Resteasy integration
+    </description>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.jboss.resteasy</groupId>
+            <artifactId>resteasy-client</artifactId>
+            <version>6.2.11.Final</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>commons-logging</artifactId>
+                    <groupId>commons-logging</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <dependency>
+            <groupId>org.glassfish.jersey.test-framework</groupId>
+            <artifactId>jersey-test-framework-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.glassfish.jersey.containers</groupId>
+            <artifactId>jersey-container-servlet</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
+            <artifactId>jersey-test-framework-provider-external</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
+            <artifactId>jersey-test-framework-provider-grizzly2</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.media</groupId>
+            <artifactId>jersey-media-json-jackson</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-failsafe-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/tests/integration/resteasy-client/src/test/java/org/glassfish/jersey/tests/springboot/RestEasyClientTest.java b/tests/integration/resteasy-client/src/test/java/org/glassfish/jersey/tests/springboot/RestEasyClientTest.java
new file mode 100644
index 0000000..de1461f
--- /dev/null
+++ b/tests/integration/resteasy-client/src/test/java/org/glassfish/jersey/tests/springboot/RestEasyClientTest.java
@@ -0,0 +1,91 @@
+/*
+ * 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
+ */
+
+package org.glassfish.jersey.tests.springboot;
+
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.client.Entity;
+import jakarta.ws.rs.core.Application;
+import jakarta.ws.rs.core.Configuration;
+import jakarta.ws.rs.core.Context;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.MultivaluedMap;
+import jakarta.ws.rs.core.Response;
+import jakarta.ws.rs.ext.Providers;
+import org.glassfish.jersey.jackson.internal.DefaultJacksonJaxbJsonProvider;
+import org.glassfish.jersey.server.ResourceConfig;
+import org.glassfish.jersey.test.JerseyTest;
+import org.jboss.resteasy.client.jaxrs.ResteasyClient;
+import org.jboss.resteasy.client.jaxrs.internal.ResteasyClientBuilderImpl;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+import java.util.concurrent.CountDownLatch;
+
+public class RestEasyClientTest extends JerseyTest {
+
+    private static final CountDownLatch readFromLatch = new CountDownLatch(1);
+
+    @Path("/")
+    public static class RestEasyClientTestResource {
+        @POST
+        @Path("/test")
+        @Produces(MediaType.APPLICATION_JSON)
+        public String testPost(String echo) {
+            return echo;
+        }
+    }
+
+    @Override
+    protected Application configure() {
+        return new ResourceConfig(RestEasyClientTestResource.class);
+    }
+
+    @Test
+    public void test() throws InterruptedException {
+        try (final ResteasyClient client = new ResteasyClientBuilderImpl().build()) {
+            client.register(TestDefaultJacksonJaxbJsonProvider.class);
+
+            try (final Response r = client.target(target().getUri()).path("/test")
+                    .request().post(Entity.entity("{\"test\": \"test\"}", MediaType.APPLICATION_JSON))) {
+                Object o = r.readEntity(Object.class);
+                Assertions.assertTrue(o.toString().contains("test"));
+                readFromLatch.await();
+                Assertions.assertEquals(0, readFromLatch.getCount(), "DefaultJacksonJaxbJsonProvider has not been used");
+            }
+        }
+    }
+
+    public static class TestDefaultJacksonJaxbJsonProvider extends DefaultJacksonJaxbJsonProvider {
+        public TestDefaultJacksonJaxbJsonProvider(@Context Providers providers, @Context Configuration config) {
+            super(providers, config);
+        }
+
+        @Override
+        public Object readFrom(Class<Object> type, Type genericType, Annotation[] annotations, MediaType mediaType,
+                               MultivaluedMap<String, String> httpHeaders, InputStream entityStream) throws IOException {
+            readFromLatch.countDown();
+            return super.readFrom(type, genericType, annotations, mediaType, httpHeaders, entityStream);
+        }
+    }
+
+}