Jakartified jetty (11.0.0.beta2)

Signed-off-by: Maxim Nesen <maxim.nesen@oracle.com>
diff --git a/bom/pom.xml b/bom/pom.xml
index 5fcbaca..0096d6e 100644
--- a/bom/pom.xml
+++ b/bom/pom.xml
@@ -75,11 +75,6 @@
             </dependency>
             <dependency>
                 <groupId>org.glassfish.jersey.connectors</groupId>
-                <artifactId>jersey-jetty-connector</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.glassfish.jersey.connectors</groupId>
                 <artifactId>jersey-jdk-connector</artifactId>
                 <version>${project.version}</version>
             </dependency>
@@ -90,11 +85,6 @@
             </dependency>
             <dependency>
                 <groupId>org.glassfish.jersey.containers</groupId>
-                <artifactId>jersey-container-jetty-http</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.glassfish.jersey.containers</groupId>
                 <artifactId>jersey-container-grizzly2-http</artifactId>
                 <version>${project.version}</version>
             </dependency>
@@ -105,11 +95,6 @@
             </dependency>
             <dependency>
                 <groupId>org.glassfish.jersey.containers</groupId>
-                <artifactId>jersey-container-jetty-servlet</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.glassfish.jersey.containers</groupId>
                 <artifactId>jersey-container-jdk-http</artifactId>
                 <version>${project.version}</version>
             </dependency>
@@ -370,11 +355,6 @@
                 <version>${project.version}</version>
             </dependency>
             <dependency>
-                <groupId>org.glassfish.jersey.test-framework.providers</groupId>
-                <artifactId>jersey-test-framework-provider-jetty</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
                 <groupId>org.glassfish.jersey.test-framework</groupId>
                 <artifactId>jersey-test-framework-util</artifactId>
                 <version>${project.version}</version>
@@ -413,5 +393,33 @@
                 </site>
             </distributionManagement>
         </profile>
+        <profile>
+            <id>Jetty11</id>
+            <activation>
+                <jdk>[11,)</jdk>
+            </activation>
+            <dependencies>
+                <dependency>
+                    <groupId>org.glassfish.jersey.connectors</groupId>
+                    <artifactId>jersey-jetty-connector</artifactId>
+                    <version>${project.version}</version>
+                </dependency>
+                <dependency>
+                    <groupId>org.glassfish.jersey.containers</groupId>
+                    <artifactId>jersey-container-jetty-http</artifactId>
+                    <version>${project.version}</version>
+                </dependency>
+                <dependency>
+                    <groupId>org.glassfish.jersey.containers</groupId>
+                    <artifactId>jersey-container-jetty-servlet</artifactId>
+                    <version>${project.version}</version>
+                </dependency>
+                <dependency>
+                    <groupId>org.glassfish.jersey.test-framework.providers</groupId>
+                    <artifactId>jersey-test-framework-provider-jetty</artifactId>
+                    <version>${project.version}</version>
+                </dependency>
+            </dependencies>
+        </profile>
     </profiles>
 </project>
diff --git a/connectors/jetty-connector/pom.xml b/connectors/jetty-connector/pom.xml
index fa6d9c0..9d799b6 100644
--- a/connectors/jetty-connector/pom.xml
+++ b/connectors/jetty-connector/pom.xml
@@ -41,7 +41,10 @@
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-client</artifactId>
         </dependency>
-
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-util</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.glassfish.jersey.containers</groupId>
             <artifactId>jersey-container-jetty-http</artifactId>
diff --git a/connectors/jetty-connector/src/main/java/org/glassfish/jersey/jetty/connector/JettyConnector.java b/connectors/jetty-connector/src/main/java/org/glassfish/jersey/jetty/connector/JettyConnector.java
index 1c94e21..94d7ec4 100644
--- a/connectors/jetty-connector/src/main/java/org/glassfish/jersey/jetty/connector/JettyConnector.java
+++ b/connectors/jetty-connector/src/main/java/org/glassfish/jersey/jetty/connector/JettyConnector.java
@@ -23,6 +23,7 @@
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.net.CookieStore;
+import java.net.InetSocketAddress;
 import java.net.URI;
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
@@ -35,16 +36,27 @@
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicReference;
+import java.util.function.Consumer;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import jakarta.ws.rs.ProcessingException;
 import jakarta.ws.rs.client.Client;
 import jakarta.ws.rs.core.Configuration;
+import jakarta.ws.rs.core.HttpHeaders;
 import jakarta.ws.rs.core.MultivaluedMap;
 
 import javax.net.ssl.SSLContext;
 
+import org.eclipse.jetty.client.ConnectionPool;
+import org.eclipse.jetty.client.HttpClientTransport;
+import org.eclipse.jetty.client.HttpDestination;
+import org.eclipse.jetty.client.HttpRequest;
+import org.eclipse.jetty.client.Origin;
+import org.eclipse.jetty.client.http.HttpClientTransportOverHTTP;
+import org.eclipse.jetty.io.ClientConnector;
+import org.eclipse.jetty.io.Connection;
+import org.eclipse.jetty.io.EndPoint;
 import org.glassfish.jersey.client.ClientProperties;
 import org.glassfish.jersey.client.ClientRequest;
 import org.glassfish.jersey.client.ClientResponse;
@@ -149,9 +161,12 @@
         }
         if (httpClient == null) {
             final SSLContext sslContext = jaxrsClient.getSslContext();
-            final SslContextFactory sslContextFactory = new SslContextFactory();
+            final SslContextFactory.Client sslContextFactory = new SslContextFactory.Client();
             sslContextFactory.setSslContext(sslContext);
-            httpClient = new HttpClient(sslContextFactory);
+            final ClientConnector connector = new ClientConnector();
+            connector.setSslContextFactory(sslContextFactory);
+            final HttpClientTransport transport = new HttpClientTransportOverHTTP(connector);
+            httpClient = new HttpClient(transport);
         }
         this.client = httpClient;
 
@@ -240,6 +255,7 @@
 
     @Override
     public ClientResponse apply(final ClientRequest jerseyRequest) throws ProcessingException {
+        applyUserAgentHeader(jerseyRequest.getHeaders());
         final Request jettyRequest = translateRequest(jerseyRequest);
         final Map<String, String> clientHeadersSnapshot = writeOutBoundHeaders(jerseyRequest.getHeaders(), jettyRequest);
         final ContentProvider entity = getBytesProvider(jerseyRequest);
@@ -308,14 +324,34 @@
         return request;
     }
 
+    /**
+     * Re-write User-agent header set by Jetty; Jersey already sets this in its request (incl. Jetty version)
+     * it shall be propagated to Jetty client before HttpRequest instance is created.
+     * HttpRequest takes User Agent header from client then.
+     *
+     * @param headers - map of Jersey headers
+     */
+    private void applyUserAgentHeader(final MultivaluedMap<String, Object> headers) {
+        if (headers.containsKey(HttpHeaders.USER_AGENT)) {
+            final Map<String, String> stringHeaders =
+                    HeaderUtils.asStringHeadersSingleValue(headers, configuration);
+            client.setUserAgentField(
+                    new HttpField(HttpHeader.USER_AGENT,
+                            HttpHeader.USER_AGENT.name(),
+                            stringHeaders.get(HttpHeaders.USER_AGENT))
+            );
+        }
+    }
+
     private Map<String, String> writeOutBoundHeaders(final MultivaluedMap<String, Object> headers, final Request request) {
         final Map<String, String> stringHeaders = HeaderUtils.asStringHeadersSingleValue(headers, configuration);
 
-        // remove User-agent header set by Jetty; Jersey already sets this in its request (incl. Jetty version)
-        request.getHeaders().remove(HttpHeader.USER_AGENT);
-        for (final Map.Entry<String, String> e : stringHeaders.entrySet()) {
-            request.getHeaders().add(e.getKey(), e.getValue());
-        }
+         if (request instanceof HttpRequest) {
+             final HttpRequest httpRequest = (HttpRequest) request;
+             for (final Map.Entry<String, String> e : stringHeaders.entrySet()) {
+                 httpRequest.addHeader(new HttpField(e.getKey(), e.getValue()));
+             }
+         }
         return stringHeaders;
     }
 
@@ -372,6 +408,7 @@
 
     @Override
     public Future<?> apply(final ClientRequest jerseyRequest, final AsyncConnectorCallback callback) {
+        applyUserAgentHeader(jerseyRequest.getHeaders());
         final Request jettyRequest = translateRequest(jerseyRequest);
         final Map<String, String> clientHeadersSnapshot = writeOutBoundHeaders(jerseyRequest.getHeaders(), jettyRequest);
         final ContentProvider entity = getStreamProvider(jerseyRequest);
diff --git a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/ProxyTest.java b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/ProxyTest.java
index dc6924f..3805260 100644
--- a/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/ProxyTest.java
+++ b/connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/ProxyTest.java
@@ -26,9 +26,9 @@
 import org.glassfish.jersey.test.JerseyTest;
 import org.junit.Test;
 
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 import jakarta.ws.rs.GET;
 import jakarta.ws.rs.Path;
 import jakarta.ws.rs.core.Application;
diff --git a/connectors/pom.xml b/connectors/pom.xml
index 15c1fd6..daa8703 100644
--- a/connectors/pom.xml
+++ b/connectors/pom.xml
@@ -37,7 +37,6 @@
         <module>apache-connector</module>
         <module>grizzly-connector</module>
         <module>jdk-connector</module>
-        <module>jetty-connector</module>
         <module>netty-connector</module>
     </modules>
 
@@ -87,5 +86,14 @@
                 <module>helidon-connector</module>
             </modules>
         </profile>
+        <profile>
+            <id>Jetty11</id>
+            <activation>
+                <jdk>[11,)</jdk>
+            </activation>
+            <modules>
+                <module>jetty-connector</module>
+            </modules>
+        </profile>
     </profiles>
 </project>
diff --git a/containers/jetty-http/pom.xml b/containers/jetty-http/pom.xml
index d2abe36..ddfb891 100644
--- a/containers/jetty-http/pom.xml
+++ b/containers/jetty-http/pom.xml
@@ -37,6 +37,11 @@
             <groupId>jakarta.inject</groupId>
             <artifactId>jakarta.inject-api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>jakarta.servlet</groupId>
+            <artifactId>jakarta.servlet-api</artifactId>
+            <version>${servlet5.version}</version>
+        </dependency>
 
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
@@ -46,10 +51,6 @@
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-util</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.eclipse.jetty</groupId>
-            <artifactId>jetty-continuation</artifactId>
-        </dependency>
     </dependencies>
 
     <build>
diff --git a/containers/jetty-http/src/main/java/org/glassfish/jersey/jetty/JettyHttpContainer.java b/containers/jetty-http/src/main/java/org/glassfish/jersey/jetty/JettyHttpContainer.java
index d80e43b..cd4aa9e 100644
--- a/containers/jetty-http/src/main/java/org/glassfish/jersey/jetty/JettyHttpContainer.java
+++ b/containers/jetty-http/src/main/java/org/glassfish/jersey/jetty/JettyHttpContainer.java
@@ -31,15 +31,18 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import jakarta.servlet.AsyncContext;
+import jakarta.servlet.AsyncEvent;
+import jakarta.servlet.AsyncListener;
 import jakarta.ws.rs.core.Application;
 import jakarta.ws.rs.core.GenericType;
 import jakarta.ws.rs.core.SecurityContext;
 
 import jakarta.inject.Inject;
 import jakarta.inject.Provider;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 
 import org.glassfish.jersey.internal.MapPropertiesDelegate;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
@@ -58,9 +61,6 @@
 import org.glassfish.jersey.server.spi.Container;
 import org.glassfish.jersey.server.spi.ContainerResponseWriter;
 
-import org.eclipse.jetty.continuation.Continuation;
-import org.eclipse.jetty.continuation.ContinuationListener;
-import org.eclipse.jetty.continuation.ContinuationSupport;
 import org.eclipse.jetty.http.HttpStatus;
 import org.eclipse.jetty.server.Request;
 import org.eclipse.jetty.server.Response;
@@ -251,12 +251,12 @@
     private static final class ResponseWriter implements ContainerResponseWriter {
 
         private final Response response;
-        private final Continuation continuation;
+        private final AsyncContext context;
         private final boolean configSetStatusOverSendError;
 
         ResponseWriter(final Request request, final Response response, final boolean configSetStatusOverSendError) {
             this.response = response;
-            this.continuation = ContinuationSupport.getContinuation(request);
+            this.context = request.startAsync();
             this.configSetStatusOverSendError = configSetStatusOverSendError;
         }
 
@@ -293,21 +293,31 @@
             try {
                 if (timeOut > 0) {
                     final long timeoutMillis = TimeUnit.MILLISECONDS.convert(timeOut, timeUnit);
-                    continuation.setTimeout(timeoutMillis);
+                    context.setTimeout(timeoutMillis);
                 }
-                continuation.addContinuationListener(new ContinuationListener() {
+                context.addListener(new AsyncListener() {
                     @Override
-                    public void onComplete(final Continuation continuation) {
+                    public void onComplete(AsyncEvent asyncEvent) throws IOException {
+
                     }
 
                     @Override
-                    public void onTimeout(final Continuation continuation) {
+                    public void onTimeout(AsyncEvent asyncEvent) throws IOException {
                         if (timeoutHandler != null) {
                             timeoutHandler.onTimeout(ResponseWriter.this);
                         }
                     }
+
+                    @Override
+                    public void onError(AsyncEvent asyncEvent) throws IOException {
+
+                    }
+
+                    @Override
+                    public void onStartAsync(AsyncEvent asyncEvent) throws IOException {
+
+                    }
                 });
-                continuation.suspend(response);
                 return true;
             } catch (final Exception ex) {
                 return false;
@@ -318,7 +328,7 @@
         public void setSuspendTimeout(final long timeOut, final TimeUnit timeUnit) throws IllegalStateException {
             if (timeOut > 0) {
                 final long timeoutMillis = TimeUnit.MILLISECONDS.convert(timeOut, timeUnit);
-                continuation.setTimeout(timeoutMillis);
+                context.setTimeout(timeoutMillis);
             }
         }
 
@@ -329,8 +339,8 @@
             } catch (final IOException e) {
                 LOGGER.log(Level.WARNING, LocalizationMessages.UNABLE_TO_CLOSE_RESPONSE(), e);
             } finally {
-                if (continuation.isSuspended()) {
-                    continuation.complete();
+                if (context.getRequest().isAsyncStarted()) {
+                    context.complete();
                 }
                 LOGGER.log(Level.FINEST, "commit() called");
             }
diff --git a/containers/jetty-http/src/main/java/org/glassfish/jersey/jetty/JettyHttpContainerFactory.java b/containers/jetty-http/src/main/java/org/glassfish/jersey/jetty/JettyHttpContainerFactory.java
index 85027a5..39f23e8 100644
--- a/containers/jetty-http/src/main/java/org/glassfish/jersey/jetty/JettyHttpContainerFactory.java
+++ b/containers/jetty-http/src/main/java/org/glassfish/jersey/jetty/JettyHttpContainerFactory.java
@@ -205,7 +205,8 @@
      * @throws ProcessingException      in case of any failure when creating a new Jetty {@code Server} instance.
      * @throws IllegalArgumentException if {@code uri} is {@code null}.
      */
-    public static Server createServer(final URI uri, final SslContextFactory sslContextFactory, final ResourceConfig config)
+    public static Server createServer(final URI uri, final SslContextFactory.Server sslContextFactory,
+                                      final ResourceConfig config)
             throws ProcessingException {
         final JettyHttpContainer container = ContainerFactory.createContainer(JettyHttpContainer.class, config);
         return createServer(uri, sslContextFactory, container, true);
@@ -232,7 +233,7 @@
      * @see JettyHttpContainer
      */
     public static Server createServer(final URI uri,
-                                      final SslContextFactory sslContextFactory,
+                                      final SslContextFactory.Server sslContextFactory,
                                       final JettyHttpContainer handler,
                                       final boolean start) {
         if (uri == null) {
diff --git a/containers/pom.xml b/containers/pom.xml
index 69128aa..25f49f3 100644
--- a/containers/pom.xml
+++ b/containers/pom.xml
@@ -40,7 +40,6 @@
         <module>jdk-http</module>
         <module>jersey-servlet-core</module>
         <module>jersey-servlet</module>
-        <module>jetty-http</module>
         <!-- TODO jakartify this -->
 <!--        <module>jetty-servlet</module>-->
         <module>netty-http</module>
@@ -76,4 +75,16 @@
             <scope>test</scope>
         </dependency>
     </dependencies>
+
+    <profiles>
+        <profile>
+            <id>Jetty11</id>
+            <activation>
+                <jdk>[11,)</jdk>
+            </activation>
+            <modules>
+                <module>jetty-http</module>
+            </modules>
+        </profile>
+    </profiles>
 </project>
diff --git a/etc/travis/travis.sh b/etc/travis/travis.sh
index cbd0a16..2362130 100644
--- a/etc/travis/travis.sh
+++ b/etc/travis/travis.sh
@@ -28,9 +28,9 @@
 mvn -version
 
 if [ "$1" = "glassfish-copyright:copyright" ]; then
-    mvn glassfish-copyright:copyright
+    mvn -B -V glassfish-copyright:copyright
 else
-    mvn -e -U -B -Peclipse_repo,staging clean install $1 >> $BUILD_OUTPUT 2>&1
+    mvn -e -U -B -V -Peclipse_repo,staging clean install $1 >> $BUILD_OUTPUT 2>&1
 fi
 
 # The build finished without returning an error so dump a tail of the output
diff --git a/ext/bean-validation/pom.xml b/ext/bean-validation/pom.xml
index da9ff99..4bf5d0f 100644
--- a/ext/bean-validation/pom.xml
+++ b/ext/bean-validation/pom.xml
@@ -125,10 +125,9 @@
         </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>
     </dependencies>
diff --git a/ext/entity-filtering/pom.xml b/ext/entity-filtering/pom.xml
index 839c256..120c883 100644
--- a/ext/entity-filtering/pom.xml
+++ b/ext/entity-filtering/pom.xml
@@ -54,10 +54,9 @@
         </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>
     </dependencies>
diff --git a/ext/microprofile/mp-config/pom.xml b/ext/microprofile/mp-config/pom.xml
index 5f01e72..224df05 100644
--- a/ext/microprofile/mp-config/pom.xml
+++ b/ext/microprofile/mp-config/pom.xml
@@ -49,13 +49,6 @@
         </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.glassfish.jersey.inject</groupId>
             <artifactId>jersey-hk2</artifactId>
             <version>${project.version}</version>
@@ -84,4 +77,40 @@
 
     </dependencies>
 
+    <profiles>
+        <profile>
+            <id>JettyExclude</id>
+            <activation>
+                <jdk>1.8</jdk>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-compiler-plugin</artifactId>
+                        <configuration>
+                            <testExcludes>
+                                <testExclude>org/glassfish/jersey/microprofile/config/ExternalPropertiesConfigurationFactoryTest.java</testExclude>
+                            </testExcludes>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        <profile>
+            <id>Jetty11</id>
+            <activation>
+                <jdk>[11,)</jdk>
+            </activation>
+            <dependencies>
+                <dependency>
+                    <groupId>org.glassfish.jersey.test-framework.providers</groupId>
+                    <artifactId>jersey-test-framework-provider-jetty</artifactId>
+                    <version>${project.version}</version>
+                    <scope>test</scope>
+                </dependency>
+            </dependencies>
+        </profile>
+    </profiles>
+
 </project>
diff --git a/media/json-jackson/pom.xml b/media/json-jackson/pom.xml
index 26b572f..28cb667 100644
--- a/media/json-jackson/pom.xml
+++ b/media/json-jackson/pom.xml
@@ -135,10 +135,9 @@
             <scope>test</scope>
         </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>
diff --git a/media/multipart/pom.xml b/media/multipart/pom.xml
index ca1f3aa..dbc8e37 100644
--- a/media/multipart/pom.xml
+++ b/media/multipart/pom.xml
@@ -92,12 +92,6 @@
             <version>${project.version}</version>
             <scope>test</scope>
         </dependency>
-        <dependency>
-            <groupId>org.glassfish.jersey.connectors</groupId>
-            <artifactId>jersey-jetty-connector</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-        </dependency>
 
         <dependency>
             <groupId>junit</groupId>
@@ -105,4 +99,40 @@
         </dependency>
     </dependencies>
 
+    <profiles>
+        <profile>
+            <id>JettyExclude</id>
+            <activation>
+                <jdk>1.8</jdk>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-compiler-plugin</artifactId>
+                        <configuration>
+                            <testExcludes>
+                                <testExclude>org/glassfish/jersey/media/multipart/internal/MultiPartHeaderModificationTest.java</testExclude>
+                            </testExcludes>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        <profile>
+            <id>Jetty11</id>
+            <activation>
+                <jdk>[11,)</jdk>
+            </activation>
+            <dependencies>
+                <dependency>
+                    <groupId>org.glassfish.jersey.connectors</groupId>
+                    <artifactId>jersey-jetty-connector</artifactId>
+                    <version>${project.version}</version>
+                    <scope>test</scope>
+                </dependency>
+            </dependencies>
+        </profile>
+    </profiles>
+
 </project>
diff --git a/pom.xml b/pom.xml
index ffe6645..a4c1967 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1645,11 +1645,6 @@
                 <artifactId>jetty-webapp</artifactId>
                 <version>${jetty.version}</version>
             </dependency>
-            <dependency>
-                <groupId>org.eclipse.jetty</groupId>
-                <artifactId>jetty-continuation</artifactId>
-                <version>${jetty.version}</version>
-            </dependency>
 
             <dependency>
                 <groupId>org.simpleframework</groupId>
@@ -2160,7 +2155,7 @@
         <javax.annotation.version>1.3.5</javax.annotation.version> <!--Deprecated, used only for @generated annotation in perf tests -->
 
         <jetty.plugin.version>6.1.26</jetty.plugin.version>
-        <jetty.version>9.4.28.v20200408</jetty.version>
+        <jetty.version>11.0.0.beta2</jetty.version>
         <jetty.servlet.api.25.version>6.1.14</jetty.servlet.api.25.version>
 
         <mimepull.version>1.9.13</mimepull.version>
diff --git a/test-framework/providers/bundle/pom.xml b/test-framework/providers/bundle/pom.xml
index eddf5d7..8227a40 100644
--- a/test-framework/providers/bundle/pom.xml
+++ b/test-framework/providers/bundle/pom.xml
@@ -60,13 +60,23 @@
         </dependency>
         <dependency>
             <groupId>org.glassfish.jersey.test-framework.providers</groupId>
-            <artifactId>jersey-test-framework-provider-jetty</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
             <artifactId>jersey-test-framework-provider-netty</artifactId>
             <version>${project.version}</version>
         </dependency>
     </dependencies>
+    <profiles>
+        <profile>
+            <id>Jetty11</id>
+            <activation>
+                <jdk>[11,)</jdk>
+            </activation>
+            <dependencies>
+                <dependency>
+                    <groupId>org.glassfish.jersey.test-framework.providers</groupId>
+                    <artifactId>jersey-test-framework-provider-jetty</artifactId>
+                    <version>${project.version}</version>
+                </dependency>
+            </dependencies>
+        </profile>
+    </profiles>
 </project>
diff --git a/test-framework/providers/pom.xml b/test-framework/providers/pom.xml
index 96b76bb..10764da 100644
--- a/test-framework/providers/pom.xml
+++ b/test-framework/providers/pom.xml
@@ -17,7 +17,8 @@
 
 -->
 
-<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/maven-v4_0_0.xsd">
+<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/maven-v4_0_0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.glassfish.jersey.test-framework</groupId>
@@ -37,9 +38,19 @@
         <module>external</module>
         <module>grizzly2</module>
         <module>inmemory</module>
-        <module>jetty</module>
         <module>jdk-http</module>
         <module>netty</module>
         <module>simple</module>
     </modules>
+    <profiles>
+        <profile>
+            <id>Jetty11</id>
+            <activation>
+                <jdk>[11,)</jdk>
+            </activation>
+            <modules>
+                <module>jetty</module>
+            </modules>
+        </profile>
+    </profiles>
 </project>
diff --git a/tests/e2e-client/pom.xml b/tests/e2e-client/pom.xml
index 57da3ca..3ba0b6a 100644
--- a/tests/e2e-client/pom.xml
+++ b/tests/e2e-client/pom.xml
@@ -124,11 +124,6 @@
         </dependency>
         <dependency>
             <groupId>org.glassfish.jersey.connectors</groupId>
-            <artifactId>jersey-jetty-connector</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.glassfish.jersey.connectors</groupId>
             <artifactId>jersey-jdk-connector</artifactId>
             <scope>test</scope>
         </dependency>
@@ -222,7 +217,45 @@
                 </pluginManagement>
             </build>
         </profile>
-
+        <profile>
+            <id>JettyExclude</id>
+            <activation>
+                <jdk>1.8</jdk>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-compiler-plugin</artifactId>
+                        <configuration>
+                            <testExcludes>
+                                <testExclude>org/glassfish/jersey/tests/e2e/client/connector/HttpPatchTest.java</testExclude>
+                                <testExclude>org/glassfish/jersey/tests/e2e/client/connector/RequestHeaderModificationsTest.java</testExclude>
+                                <testExclude>org/glassfish/jersey/tests/e2e/client/connector/ssl/SslConnectorConfigurationTest.java</testExclude>
+                                <testExclude>org/glassfish/jersey/tests/e2e/client/connector/ssl/SslConnectorHostnameVerifierTest.java</testExclude>
+                                <testExclude>org/glassfish/jersey/tests/e2e/client/connector/ssl/SslHttpUrlConnectorTest.java</testExclude>
+                                <testExclude>org/glassfish/jersey/tests/e2e/client/ShutdownHookMemoryLeakTest.java</testExclude>
+                                <testExclude>org/glassfish/jersey/tests/e2e/client/connector/ssl/AbstractConnectorServerTest.java</testExclude>
+                            </testExcludes>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        <profile>
+            <id>Jetty11</id>
+            <activation>
+                <jdk>[11,)</jdk>
+            </activation>
+            <dependencies>
+                <dependency>
+                    <groupId>org.glassfish.jersey.connectors</groupId>
+                    <artifactId>jersey-jetty-connector</artifactId>
+                    <version>${project.version}</version>
+                    <scope>test</scope>
+                </dependency>
+            </dependencies>
+        </profile>
     </profiles>
 
 </project>
diff --git a/tests/e2e-entity/pom.xml b/tests/e2e-entity/pom.xml
index 06e9075..a37715b 100644
--- a/tests/e2e-entity/pom.xml
+++ b/tests/e2e-entity/pom.xml
@@ -164,11 +164,6 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.glassfish.jersey.connectors</groupId>
-            <artifactId>jersey-jetty-connector</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
             <groupId>org.glassfish.jersey.security</groupId>
             <artifactId>oauth1-signature</artifactId>
             <version>${project.version}</version>
@@ -257,7 +252,20 @@
                 </pluginManagement>
             </build>
         </profile>
-
+        <profile>
+            <id>Jetty11</id>
+            <activation>
+                <jdk>[11,)</jdk>
+            </activation>
+            <dependencies>
+                <dependency>
+                    <groupId>org.glassfish.jersey.connectors</groupId>
+                    <artifactId>jersey-jetty-connector</artifactId>
+                    <version>${project.version}</version>
+                    <scope>test</scope>
+                </dependency>
+            </dependencies>
+        </profile>
     </profiles>
 
 </project>
diff --git a/tests/e2e-server/pom.xml b/tests/e2e-server/pom.xml
index 95d4a0a..5b52538 100644
--- a/tests/e2e-server/pom.xml
+++ b/tests/e2e-server/pom.xml
@@ -164,11 +164,6 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.glassfish.jersey.connectors</groupId>
-            <artifactId>jersey-jetty-connector</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
             <groupId>org.glassfish.jersey.security</groupId>
             <artifactId>oauth1-signature</artifactId>
             <version>${project.version}</version>
@@ -258,7 +253,42 @@
                 </pluginManagement>
             </build>
         </profile>
-
+        <profile>
+            <id>JettyExclude</id>
+            <activation>
+                <jdk>1.8</jdk>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-compiler-plugin</artifactId>
+                        <configuration>
+                            <testExcludes>
+                                <testExclude>org/glassfish/jersey/tests/e2e/server/mvc/spi/AbstractTemplateProcessorTest.java</testExclude>
+                                <testExclude>org/glassfish/jersey/tests/e2e/server/mvc/MvcEncodingTest.java</testExclude>
+                                <testExclude>org/glassfish/jersey/tests/e2e/server/monitoring/StatisticsDestroyTest.java</testExclude>
+                                <testExclude>org/glassfish/jersey/tests/e2e/server/monitoring/ReloadApplicationEventTest.java</testExclude>
+                            </testExcludes>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        <profile>
+            <id>Jetty11</id>
+            <activation>
+                <jdk>[11,)</jdk>
+            </activation>
+            <dependencies>
+                <dependency>
+                    <groupId>org.glassfish.jersey.connectors</groupId>
+                    <artifactId>jersey-jetty-connector</artifactId>
+                    <version>${project.version}</version>
+                    <scope>test</scope>
+                </dependency>
+            </dependencies>
+        </profile>
     </profiles>
 
 </project>
diff --git a/tests/e2e/pom.xml b/tests/e2e/pom.xml
index 3089c83..4fee8f9 100644
--- a/tests/e2e/pom.xml
+++ b/tests/e2e/pom.xml
@@ -141,11 +141,6 @@
         </dependency>
         <dependency>
             <groupId>org.glassfish.jersey.connectors</groupId>
-            <artifactId>jersey-jetty-connector</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.glassfish.jersey.connectors</groupId>
             <artifactId>jersey-jdk-connector</artifactId>
             <scope>test</scope>
         </dependency>
@@ -209,6 +204,50 @@
             </properties>
         </profile>
         <profile>
+            <id>JettyExclude</id>
+            <activation>
+                <jdk>1.8</jdk>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-compiler-plugin</artifactId>
+                        <configuration>
+                            <testExcludes>
+                                <testExclude>org/glassfish/jersey/tests/e2e/container/Jersey2462Test.java</testExclude>
+                                <testExclude>org/glassfish/jersey/tests/e2e/container/EscapedUriTest.java</testExclude>
+                                <testExclude>org/glassfish/jersey/tests/e2e/container/GzipContentEncodingTest.java</testExclude>
+                                <testExclude>org/glassfish/jersey/tests/e2e/container/HeadTest.java</testExclude>
+                                <testExclude>org/glassfish/jersey/tests/e2e/container/JettyEmptyHeaderParamTest.java</testExclude>
+                                <testExclude>org/glassfish/jersey/tests/e2e/container/LeadingSlashesTest.java</testExclude>
+                                <testExclude>org/glassfish/jersey/tests/e2e/container/MatrixParamTest.java</testExclude>
+                                <testExclude>org/glassfish/jersey/tests/e2e/container/QueryParamTest.java</testExclude>
+                                <testExclude>org/glassfish/jersey/tests/e2e/container/ResponseWriterMetadataTest.java</testExclude>
+                                <testExclude>org/glassfish/jersey/tests/e2e/container/ResponseWriterOutputStreamTest.java</testExclude>
+                                <testExclude>org/glassfish/jersey/tests/e2e/container/TrailingSlashTest.java</testExclude>
+                                <testExclude>org/glassfish/jersey/tests/e2e/container/JerseyContainerTest.java</testExclude>
+                            </testExcludes>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        <profile>
+            <id>Jetty11</id>
+            <activation>
+                <jdk>[11,)</jdk>
+            </activation>
+            <dependencies>
+                <dependency>
+                    <groupId>org.glassfish.jersey.connectors</groupId>
+                    <artifactId>jersey-jetty-connector</artifactId>
+                    <version>${project.version}</version>
+                    <scope>test</scope>
+                </dependency>
+            </dependencies>
+        </profile>
+        <profile>
             <id>sonar</id>
             <build>
                 <pluginManagement>
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/server/wadl/NoJAXBNoWadlTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/server/wadl/NoJAXBNoWadlTest.java
index 164faf5..dfaa771 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/server/wadl/NoJAXBNoWadlTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/server/wadl/NoJAXBNoWadlTest.java
@@ -67,8 +67,6 @@
 
     @Test
     public void testOptionsNoWadl() {
-        final boolean shouldHaveJaxb = JdkVersion.getJdkVersion().getMajor() == 1;
-
         // Make sure the test does not have JAX-B on a classpath
         Assert.assertFalse(ServiceFinder.find("jakarta.xml.bind.JAXBContext").iterator().hasNext());
 
@@ -77,6 +75,6 @@
             Assert.assertEquals("OPTIONS,PUT", headers);
         }
         System.out.println(readableStream.toString());
-        Assert.assertEquals(!shouldHaveJaxb, readableStream.toString().contains(LocalizationMessages.WADL_FEATURE_DISABLED()));
+        Assert.assertTrue(readableStream.toString().contains(LocalizationMessages.WADL_FEATURE_DISABLED()));
     }
 }
diff --git a/tests/integration/jetty-response-close/pom.xml b/tests/integration/jetty-response-close/pom.xml
index 8a552f9..e8d9d2f 100644
--- a/tests/integration/jetty-response-close/pom.xml
+++ b/tests/integration/jetty-response-close/pom.xml
@@ -84,5 +84,4 @@
             </plugin>
         </plugins>
     </build>
-
 </project>
\ No newline at end of file
diff --git a/tests/integration/pom.xml b/tests/integration/pom.xml
index e1389e4..65cadd5 100644
--- a/tests/integration/pom.xml
+++ b/tests/integration/pom.xml
@@ -53,7 +53,6 @@
         <module>jersey-1928</module>
         <module>jersey-1960</module>
         <module>jersey-1964</module>
-        <module>jersey-2031</module>
         <module>jersey-2136</module>
         <module>jersey-2137</module>
         <module>jersey-2154</module>
@@ -87,12 +86,9 @@
         <module>jersey-4321</module>
         <module>jersey-4507</module>
         <module>jersey-4542</module>
-        <module>jetty-response-close</module>
         <module>microprofile</module>
-        <module>property-check</module>
         <module>security-digest</module>
         <module>servlet-2.5-autodiscovery-1</module>
-        <module>servlet-2.5-autodiscovery-2</module>
         <module>servlet-2.5-filter</module>
         <module>servlet-2.5-inflector-1</module>
         <module>servlet-2.5-init-1</module>
@@ -103,9 +99,7 @@
         <module>servlet-2.5-init-6</module>
         <module>servlet-2.5-init-7</module>
         <module>servlet-2.5-init-8</module>
-        <module>servlet-2.5-mvc-1</module>
         <module>servlet-2.5-mvc-2</module>
-        <module>servlet-2.5-mvc-3</module>
         <module>servlet-2.5-reload</module>
         <module>servlet-3-async</module>
         <module>servlet-3-chunked-io</module>
@@ -123,10 +117,8 @@
         <module>servlet-3-init-provider</module>
         <module>servlet-3-params</module>
         <module>servlet-3-sse-1</module>
-        <module>servlet-4.0-mvc-1</module>
         <module>servlet-request-wrapper-binding-2</module>
         <module>servlet-request-wrapper-binding</module>
-        <module>servlet-tests</module>
         <module>sonar-test</module>
 <!--        <module>spring4</module>-->
 <!--        <module>spring5</module>-->
@@ -192,7 +184,22 @@
                 </pluginManagement>
             </build>
         </profile>
-
+        <profile>
+            <id>Jetty11</id>
+            <activation>
+                <jdk>[11,)</jdk>
+            </activation>
+            <modules>
+                <module>jersey-2031</module>
+                <module>jetty-response-close</module>
+                <module>property-check</module>
+                <module>servlet-2.5-autodiscovery-2</module>
+                <module>servlet-2.5-mvc-1</module>
+                <module>servlet-2.5-mvc-3</module>
+                <module>servlet-4.0-mvc-1</module>
+                <module>servlet-tests</module>
+            </modules>
+        </profile>
     </profiles>
 
     <build>
diff --git a/tests/integration/property-check/pom.xml b/tests/integration/property-check/pom.xml
index 11c7aa1..447aa85 100644
--- a/tests/integration/property-check/pom.xml
+++ b/tests/integration/property-check/pom.xml
@@ -66,6 +66,7 @@
         <dependency>
             <groupId>org.glassfish.jersey.connectors</groupId>
             <artifactId>jersey-jetty-connector</artifactId>
+            <version>${project.version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git a/tests/jmockit/pom.xml b/tests/jmockit/pom.xml
index a4dbf10..2feb713 100644
--- a/tests/jmockit/pom.xml
+++ b/tests/jmockit/pom.xml
@@ -45,13 +45,6 @@
             <artifactId>jersey-media-multipart</artifactId>
             <version>${project.version}</version>
         </dependency>
-        <dependency>
-            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
-            <artifactId>jersey-test-framework-provider-bundle</artifactId>
-            <version>${project.version}</version>
-            <type>pom</type>
-            <scope>test</scope>
-        </dependency>
 
         <dependency>
             <groupId>org.jmockit</groupId>