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

cstamas pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-resolver.git


The following commit(s) were added to refs/heads/master by this push:
     new a6a8fc5c [MRESOLVER-416] New transport "jetty" (#344)
a6a8fc5c is described below

commit a6a8fc5c062508cbf46e0c0eca0ac0639d75e9ab
Author: Tamas Cservenak <[email protected]>
AuthorDate: Wed Oct 18 22:20:21 2023 +0200

    [MRESOLVER-416] New transport "jetty" (#344)
    
    This is just the (functional) implementation of Resolver "jetty" HTTP/2 
transport, tests are coming as part of MRESOLVER-417.
    
    ---
    
    https://issues.apache.org/jira/browse/MRESOLVER-416
---
 .../maven-resolver-demo-snippets/pom.xml           |   6 +
 .../supplier/SupplierRepositorySystemFactory.java  |   2 +
 .../maven-resolver-transport-jdk-11}/pom.xml       |  36 +--
 .../aether/transport/jdk/JdkHttpException.java     |   0
 .../aether/transport/jdk/JdkHttpTransporter.java   |   0
 .../transport/jdk/JdkTransporterFactory.java       |   4 +-
 .../eclipse/aether/transport/jdk/package-info.java |   0
 .../maven-resolver-transport-jdk-8}/pom.xml        |  34 +--
 .../transport/jdk/JdkTransporterFactory.java       |   2 +-
 .../maven-resolver-transport-jdk}/pom.xml          |  59 ++++-
 maven-resolver-transport-jdk-parent/pom.xml        |  41 +++
 .../transport/jdk/JdkTransporterFactory.java       |   0
 .../aether/transport/jdk/JdkHttpException.java     |   0
 .../aether/transport/jdk/JdkHttpTransporter.java   |   0
 .../transport/jdk/JdkTransporterFactory.java       |   0
 .../eclipse/aether/transport/jdk/package-info.java |   0
 .../maven-resolver-transport-jetty-11}/pom.xml     |  56 ++--
 .../aether/transport/jetty/JettyException.java     |   8 +-
 .../aether/transport/jetty/JettyTransporter.java   | 281 +++++++++++----------
 .../transport/jetty/JettyTransporterFactory.java   |  18 +-
 .../aether/transport/jetty}/package-info.java      |   4 +-
 .../maven-resolver-transport-jetty-8}/pom.xml      |  38 +--
 .../transport/jetty/JettyTransporterFactory.java   |  16 +-
 .../maven-resolver-transport-jetty/pom.xml         | 147 +++++++++++
 maven-resolver-transport-jetty-parent/pom.xml      |  45 ++++
 .../transport/jdk/JdkTransporterFactory.java       |   0
 .../aether/transport/jdk/JdkHttpException.java     |   0
 .../aether/transport/jdk/JdkHttpTransporter.java   |   0
 .../transport/jdk/JdkTransporterFactory.java       |   0
 .../eclipse/aether/transport/jdk/package-info.java |   0
 pom.xml                                            |   8 +-
 31 files changed, 566 insertions(+), 239 deletions(-)

diff --git a/maven-resolver-demos/maven-resolver-demo-snippets/pom.xml 
b/maven-resolver-demos/maven-resolver-demo-snippets/pom.xml
index 9f48c032..8f7f22c0 100644
--- a/maven-resolver-demos/maven-resolver-demo-snippets/pom.xml
+++ b/maven-resolver-demos/maven-resolver-demo-snippets/pom.xml
@@ -34,6 +34,8 @@
 
   <properties>
     
<Automatic-Module-Name>org.apache.maven.resolver.demo.snippets</Automatic-Module-Name>
+    <!-- To make Jetty work -->
+    <javaVersion>11</javaVersion>
   </properties>
 
   <dependencies>
@@ -69,6 +71,10 @@
       <groupId>org.apache.maven.resolver</groupId>
       <artifactId>maven-resolver-transport-jdk</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-transport-jetty</artifactId>
+    </dependency>
     <dependency>
       <groupId>org.apache.maven.resolver</groupId>
       <artifactId>maven-resolver-supplier</artifactId>
diff --git 
a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/supplier/SupplierRepositorySystemFactory.java
 
b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/supplier/SupplierRepositorySystemFactory.java
index 55c02e4d..56df8a19 100644
--- 
a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/supplier/SupplierRepositorySystemFactory.java
+++ 
b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/supplier/SupplierRepositorySystemFactory.java
@@ -25,6 +25,7 @@ import 
org.eclipse.aether.spi.connector.transport.TransporterFactory;
 import org.eclipse.aether.supplier.RepositorySystemSupplier;
 import org.eclipse.aether.transport.http.ChecksumExtractor;
 import org.eclipse.aether.transport.jdk.JdkTransporterFactory;
+import org.eclipse.aether.transport.jetty.JettyTransporterFactory;
 
 /**
  * A factory for repository system instances that employs Maven Artifact 
Resolver's provided supplier.
@@ -37,6 +38,7 @@ public class SupplierRepositorySystemFactory {
                     Map<String, ChecksumExtractor> extractors) {
                 Map<String, TransporterFactory> result = 
super.getTransporterFactories(extractors);
                 result.put(JdkTransporterFactory.NAME, new 
JdkTransporterFactory());
+                result.put(JettyTransporterFactory.NAME, new 
JettyTransporterFactory());
                 return result;
             }
         }.get();
diff --git a/maven-resolver-transport-jdk/pom.xml 
b/maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk-11/pom.xml
similarity index 76%
copy from maven-resolver-transport-jdk/pom.xml
copy to 
maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk-11/pom.xml
index c0705e1a..b8f544d8 100644
--- a/maven-resolver-transport-jdk/pom.xml
+++ 
b/maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk-11/pom.xml
@@ -22,19 +22,21 @@
 
   <parent>
     <groupId>org.apache.maven.resolver</groupId>
-    <artifactId>maven-resolver</artifactId>
+    <artifactId>maven-resolver-transport-jdk-parent</artifactId>
     <version>2.0.0-SNAPSHOT</version>
   </parent>
 
-  <artifactId>maven-resolver-transport-jdk</artifactId>
+  <artifactId>maven-resolver-transport-jdk-11</artifactId>
   <packaging>jar</packaging>
 
-  <name>Maven Artifact Resolver Transport JDK</name>
+  <name>Maven Artifact Resolver Transport JDK (11)</name>
   <description>Maven Artifact Transport JDK Java 11+.</description>
 
   <properties>
     
<Automatic-Module-Name>org.apache.maven.resolver.transport.jdk</Automatic-Module-Name>
     <Bundle-SymbolicName>${Automatic-Module-Name}</Bundle-SymbolicName>
+
+    <javaVersion>11</javaVersion>
   </properties>
 
   <dependencies>
@@ -60,22 +62,22 @@
 
   <build>
     <plugins>
+      <plugin>
+        <groupId>org.eclipse.sisu</groupId>
+        <artifactId>sisu-maven-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>biz.aQute.bnd</groupId>
+        <artifactId>bnd-maven-plugin</artifactId>
+      </plugin>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-compiler-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>java11</id>
-            <goals>
-              <goal>compile</goal>
-            </goals>
-            <configuration>
-              <release>11</release>
-              <multiReleaseOutput>true</multiReleaseOutput>
-              <compileSourceRoots>src/main/java11</compileSourceRoots>
-            </configuration>
-          </execution>
-        </executions>
+        <artifactId>maven-jar-plugin</artifactId>
+        <configuration>
+          <archive>
+            
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
+          </archive>
+        </configuration>
       </plugin>
     </plugins>
   </build>
diff --git 
a/maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/JdkHttpException.java
 
b/maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk-11/src/main/java/org/eclipse/aether/transport/jdk/JdkHttpException.java
similarity index 100%
copy from 
maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/JdkHttpException.java
copy to 
maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk-11/src/main/java/org/eclipse/aether/transport/jdk/JdkHttpException.java
diff --git 
a/maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/JdkHttpTransporter.java
 
b/maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk-11/src/main/java/org/eclipse/aether/transport/jdk/JdkHttpTransporter.java
similarity index 100%
copy from 
maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/JdkHttpTransporter.java
copy to 
maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk-11/src/main/java/org/eclipse/aether/transport/jdk/JdkHttpTransporter.java
diff --git 
a/maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
 
b/maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk-11/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
similarity index 95%
copy from 
maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
copy to 
maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk-11/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
index ecb32749..ef076f03 100644
--- 
a/maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
+++ 
b/maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk-11/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
@@ -33,7 +33,7 @@ import static java.util.Objects.requireNonNull;
  *
  * @since TBD
  */
-@Named( JdkTransporterFactory.NAME)
+@Named(JdkTransporterFactory.NAME)
 public final class JdkTransporterFactory implements TransporterFactory {
     public static final String NAME = "jdk";
 
@@ -44,7 +44,7 @@ public final class JdkTransporterFactory implements 
TransporterFactory {
         return priority;
     }
 
-    public JdkTransporterFactory setPriority( float priority) {
+    public JdkTransporterFactory setPriority(float priority) {
         this.priority = priority;
         return this;
     }
diff --git 
a/maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/package-info.java
 
b/maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk-11/src/main/java/org/eclipse/aether/transport/jdk/package-info.java
similarity index 100%
copy from 
maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/package-info.java
copy to 
maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk-11/src/main/java/org/eclipse/aether/transport/jdk/package-info.java
diff --git a/maven-resolver-transport-jdk/pom.xml 
b/maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk-8/pom.xml
similarity index 77%
copy from maven-resolver-transport-jdk/pom.xml
copy to 
maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk-8/pom.xml
index c0705e1a..ff084748 100644
--- a/maven-resolver-transport-jdk/pom.xml
+++ b/maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk-8/pom.xml
@@ -22,14 +22,14 @@
 
   <parent>
     <groupId>org.apache.maven.resolver</groupId>
-    <artifactId>maven-resolver</artifactId>
+    <artifactId>maven-resolver-transport-jdk-parent</artifactId>
     <version>2.0.0-SNAPSHOT</version>
   </parent>
 
-  <artifactId>maven-resolver-transport-jdk</artifactId>
+  <artifactId>maven-resolver-transport-jdk-8</artifactId>
   <packaging>jar</packaging>
 
-  <name>Maven Artifact Resolver Transport JDK</name>
+  <name>Maven Artifact Resolver Transport JDK (8)</name>
   <description>Maven Artifact Transport JDK Java 11+.</description>
 
   <properties>
@@ -60,22 +60,22 @@
 
   <build>
     <plugins>
+      <plugin>
+        <groupId>org.eclipse.sisu</groupId>
+        <artifactId>sisu-maven-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>biz.aQute.bnd</groupId>
+        <artifactId>bnd-maven-plugin</artifactId>
+      </plugin>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-compiler-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>java11</id>
-            <goals>
-              <goal>compile</goal>
-            </goals>
-            <configuration>
-              <release>11</release>
-              <multiReleaseOutput>true</multiReleaseOutput>
-              <compileSourceRoots>src/main/java11</compileSourceRoots>
-            </configuration>
-          </execution>
-        </executions>
+        <artifactId>maven-jar-plugin</artifactId>
+        <configuration>
+          <archive>
+            
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
+          </archive>
+        </configuration>
       </plugin>
     </plugins>
   </build>
diff --git 
a/maven-resolver-transport-jdk/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
 
b/maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk-8/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
similarity index 97%
copy from 
maven-resolver-transport-jdk/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
copy to 
maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk-8/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
index aa015d2b..80dd1d65 100644
--- 
a/maven-resolver-transport-jdk/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
+++ 
b/maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk-8/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
@@ -37,7 +37,7 @@ import static java.util.Objects.requireNonNull;
 public final class JdkTransporterFactory implements TransporterFactory {
     public static final String NAME = "jdk";
 
-    private float priority = 10.0f;
+    private float priority = Float.MIN_VALUE;
 
     @Override
     public float getPriority() {
diff --git a/maven-resolver-transport-jdk/pom.xml 
b/maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk/pom.xml
similarity index 53%
copy from maven-resolver-transport-jdk/pom.xml
copy to maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk/pom.xml
index c0705e1a..f6b32f9a 100644
--- a/maven-resolver-transport-jdk/pom.xml
+++ b/maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk/pom.xml
@@ -22,14 +22,14 @@
 
   <parent>
     <groupId>org.apache.maven.resolver</groupId>
-    <artifactId>maven-resolver</artifactId>
+    <artifactId>maven-resolver-transport-jdk-parent</artifactId>
     <version>2.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>maven-resolver-transport-jdk</artifactId>
   <packaging>jar</packaging>
 
-  <name>Maven Artifact Resolver Transport JDK</name>
+  <name>Maven Artifact Resolver Transport JDK (mr)</name>
   <description>Maven Artifact Transport JDK Java 11+.</description>
 
   <properties>
@@ -59,24 +59,69 @@
   </dependencies>
 
   <build>
+    <resources>
+      <resource>
+        <filtering>false</filtering>
+        <directory>${project.build.directory}/generated-resources</directory>
+      </resource>
+    </resources>
     <plugins>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-compiler-plugin</artifactId>
+        <artifactId>maven-dependency-plugin</artifactId>
         <executions>
+          <execution>
+            <id>java8</id>
+            <goals>
+              <goal>unpack</goal>
+            </goals>
+            <phase>generate-resources</phase>
+            <configuration>
+              <artifactItems>
+                <artifactItem>
+                  <groupId>org.apache.maven.resolver</groupId>
+                  <artifactId>maven-resolver-transport-jdk-8</artifactId>
+                  <version>${project.version}</version>
+                  <type>jar</type>
+                  
<outputDirectory>${project.build.directory}/generated-resources</outputDirectory>
+                  <excludes>META-INF/maven/**</excludes>
+                </artifactItem>
+              </artifactItems>
+            </configuration>
+          </execution>
           <execution>
             <id>java11</id>
             <goals>
-              <goal>compile</goal>
+              <goal>unpack</goal>
             </goals>
+            <phase>generate-resources</phase>
             <configuration>
-              <release>11</release>
-              <multiReleaseOutput>true</multiReleaseOutput>
-              <compileSourceRoots>src/main/java11</compileSourceRoots>
+              <artifactItems>
+                <artifactItem>
+                  <groupId>org.apache.maven.resolver</groupId>
+                  <artifactId>maven-resolver-transport-jdk-11</artifactId>
+                  <version>${project.version}</version>
+                  <type>jar</type>
+                  
<outputDirectory>${project.build.directory}/generated-resources/META-INF/versions/11</outputDirectory>
+                  <includes>**/*.class</includes>
+                </artifactItem>
+              </artifactItems>
             </configuration>
           </execution>
         </executions>
       </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jar-plugin</artifactId>
+        <configuration>
+          <archive>
+            
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
+            <manifestEntries>
+              <Multi-Release>true</Multi-Release>
+            </manifestEntries>
+          </archive>
+        </configuration>
+      </plugin>
     </plugins>
   </build>
 
diff --git a/maven-resolver-transport-jdk-parent/pom.xml 
b/maven-resolver-transport-jdk-parent/pom.xml
new file mode 100644
index 00000000..d25f5805
--- /dev/null
+++ b/maven-resolver-transport-jdk-parent/pom.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<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.apache.maven.resolver</groupId>
+    <artifactId>maven-resolver</artifactId>
+    <version>2.0.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>maven-resolver-transport-jdk-parent</artifactId>
+  <packaging>pom</packaging>
+
+  <name>Maven Artifact Resolver Transport JDK (parent)</name>
+  <description>Maven Artifact Transport JDK Java 11+.</description>
+
+  <modules>
+    <module>maven-resolver-transport-jdk-8</module>
+    <module>maven-resolver-transport-jdk-11</module>
+    <module>maven-resolver-transport-jdk</module>
+  </modules>
+
+</project>
diff --git 
a/maven-resolver-transport-jdk/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
 
b/maven-resolver-transport-jdk-parent/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
similarity index 100%
copy from 
maven-resolver-transport-jdk/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
copy to 
maven-resolver-transport-jdk-parent/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
diff --git 
a/maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/JdkHttpException.java
 
b/maven-resolver-transport-jdk-parent/src/main/java11/org/eclipse/aether/transport/jdk/JdkHttpException.java
similarity index 100%
copy from 
maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/JdkHttpException.java
copy to 
maven-resolver-transport-jdk-parent/src/main/java11/org/eclipse/aether/transport/jdk/JdkHttpException.java
diff --git 
a/maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/JdkHttpTransporter.java
 
b/maven-resolver-transport-jdk-parent/src/main/java11/org/eclipse/aether/transport/jdk/JdkHttpTransporter.java
similarity index 100%
copy from 
maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/JdkHttpTransporter.java
copy to 
maven-resolver-transport-jdk-parent/src/main/java11/org/eclipse/aether/transport/jdk/JdkHttpTransporter.java
diff --git 
a/maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
 
b/maven-resolver-transport-jdk-parent/src/main/java11/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
similarity index 100%
copy from 
maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
copy to 
maven-resolver-transport-jdk-parent/src/main/java11/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
diff --git 
a/maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/package-info.java
 
b/maven-resolver-transport-jdk-parent/src/main/java11/org/eclipse/aether/transport/jdk/package-info.java
similarity index 100%
copy from 
maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/package-info.java
copy to 
maven-resolver-transport-jdk-parent/src/main/java11/org/eclipse/aether/transport/jdk/package-info.java
diff --git a/maven-resolver-transport-jdk/pom.xml 
b/maven-resolver-transport-jetty-parent/maven-resolver-transport-jetty-11/pom.xml
similarity index 62%
copy from maven-resolver-transport-jdk/pom.xml
copy to 
maven-resolver-transport-jetty-parent/maven-resolver-transport-jetty-11/pom.xml
index c0705e1a..c407686f 100644
--- a/maven-resolver-transport-jdk/pom.xml
+++ 
b/maven-resolver-transport-jetty-parent/maven-resolver-transport-jetty-11/pom.xml
@@ -22,19 +22,21 @@
 
   <parent>
     <groupId>org.apache.maven.resolver</groupId>
-    <artifactId>maven-resolver</artifactId>
+    <artifactId>maven-resolver-transport-jetty-parent</artifactId>
     <version>2.0.0-SNAPSHOT</version>
   </parent>
 
-  <artifactId>maven-resolver-transport-jdk</artifactId>
+  <artifactId>maven-resolver-transport-jetty-11</artifactId>
   <packaging>jar</packaging>
 
-  <name>Maven Artifact Resolver Transport JDK</name>
-  <description>Maven Artifact Transport JDK Java 11+.</description>
+  <name>Maven Artifact Resolver Transport Jetty (11)</name>
+  <description>Maven Artifact Transport Jetty.</description>
 
   <properties>
-    
<Automatic-Module-Name>org.apache.maven.resolver.transport.jdk</Automatic-Module-Name>
+    
<Automatic-Module-Name>org.apache.maven.resolver.transport.jetty</Automatic-Module-Name>
     <Bundle-SymbolicName>${Automatic-Module-Name}</Bundle-SymbolicName>
+
+    <javaVersion>11</javaVersion>
   </properties>
 
   <dependencies>
@@ -56,26 +58,42 @@
       <scope>provided</scope>
       <optional>true</optional>
     </dependency>
+
+    <dependency>
+      <groupId>org.eclipse.jetty</groupId>
+      <artifactId>jetty-client</artifactId>
+      <version>${jettyVersion}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.jetty.http2</groupId>
+      <artifactId>http2-client</artifactId>
+      <version>${jettyVersion}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.jetty.http2</groupId>
+      <artifactId>http2-http-client-transport</artifactId>
+      <version>${jettyVersion}</version>
+    </dependency>
   </dependencies>
 
   <build>
     <plugins>
+      <plugin>
+        <groupId>org.eclipse.sisu</groupId>
+        <artifactId>sisu-maven-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>biz.aQute.bnd</groupId>
+        <artifactId>bnd-maven-plugin</artifactId>
+      </plugin>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-compiler-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>java11</id>
-            <goals>
-              <goal>compile</goal>
-            </goals>
-            <configuration>
-              <release>11</release>
-              <multiReleaseOutput>true</multiReleaseOutput>
-              <compileSourceRoots>src/main/java11</compileSourceRoots>
-            </configuration>
-          </execution>
-        </executions>
+        <artifactId>maven-jar-plugin</artifactId>
+        <configuration>
+          <archive>
+            
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
+          </archive>
+        </configuration>
       </plugin>
     </plugins>
   </build>
diff --git 
a/maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/JdkHttpException.java
 
b/maven-resolver-transport-jetty-parent/maven-resolver-transport-jetty-11/src/main/java/org/eclipse/aether/transport/jetty/JettyException.java
similarity index 83%
copy from 
maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/JdkHttpException.java
copy to 
maven-resolver-transport-jetty-parent/maven-resolver-transport-jetty-11/src/main/java/org/eclipse/aether/transport/jetty/JettyException.java
index 6aaaead4..3cd907bf 100644
--- 
a/maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/JdkHttpException.java
+++ 
b/maven-resolver-transport-jetty-parent/maven-resolver-transport-jetty-11/src/main/java/org/eclipse/aether/transport/jetty/JettyException.java
@@ -16,17 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.eclipse.aether.transport.jdk;
+package org.eclipse.aether.transport.jetty;
 
 /**
- * Exception thrown by {@link JdkHttpTransporter} in case of errors.
+ * Exception thrown by {@link JettyTransporter} in case of errors.
  *
  * @since TBD
  */
-final class JdkHttpException extends Exception {
+final class JettyException extends Exception {
     private final int statusCode;
 
-    JdkHttpException(int statusCode) {
+    JettyException(int statusCode) {
         super("HTTP Status: " + statusCode);
         this.statusCode = statusCode;
     }
diff --git 
a/maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/JdkHttpTransporter.java
 
b/maven-resolver-transport-jetty-parent/maven-resolver-transport-jetty-11/src/main/java/org/eclipse/aether/transport/jetty/JettyTransporter.java
similarity index 62%
copy from 
maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/JdkHttpTransporter.java
copy to 
maven-resolver-transport-jetty-parent/maven-resolver-transport-jetty-11/src/main/java/org/eclipse/aether/transport/jetty/JettyTransporter.java
index 2200aa87..56f8d93e 100644
--- 
a/maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/JdkHttpTransporter.java
+++ 
b/maven-resolver-transport-jetty-parent/maven-resolver-transport-jetty-11/src/main/java/org/eclipse/aether/transport/jetty/JettyTransporter.java
@@ -16,36 +16,22 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.eclipse.aether.transport.jdk;
+package org.eclipse.aether.transport.jetty;
 
 import javax.net.ssl.SSLContext;
 
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
-import java.net.Authenticator;
-import java.net.InetSocketAddress;
-import java.net.PasswordAuthentication;
-import java.net.ProxySelector;
 import java.net.URI;
 import java.net.URISyntaxException;
-import java.net.http.HttpClient;
-import java.net.http.HttpRequest;
-import java.net.http.HttpResponse;
 import java.nio.file.Files;
 import java.nio.file.StandardCopyOption;
-import java.nio.file.attribute.FileTime;
-import java.security.NoSuchAlgorithmException;
-import java.time.Duration;
-import java.time.Instant;
-import java.time.ZoneId;
-import java.time.ZonedDateTime;
-import java.time.format.DateTimeFormatter;
-import java.time.format.DateTimeParseException;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.Locale;
 import java.util.Map;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -61,13 +47,28 @@ import 
org.eclipse.aether.spi.connector.transport.TransportTask;
 import org.eclipse.aether.transfer.NoTransporterException;
 import org.eclipse.aether.util.ConfigUtils;
 import org.eclipse.aether.util.FileUtils;
+import org.eclipse.jetty.client.HttpClient;
+import org.eclipse.jetty.client.HttpProxy;
+import org.eclipse.jetty.client.api.Authentication;
+import org.eclipse.jetty.client.api.Request;
+import org.eclipse.jetty.client.api.Response;
+import org.eclipse.jetty.client.dynamic.HttpClientTransportDynamic;
+import org.eclipse.jetty.client.http.HttpClientConnectionFactory;
+import org.eclipse.jetty.client.util.BasicAuthentication;
+import org.eclipse.jetty.client.util.InputStreamResponseListener;
+import org.eclipse.jetty.client.util.PathRequestContent;
+import org.eclipse.jetty.http.HttpHeader;
+import org.eclipse.jetty.http2.client.HTTP2Client;
+import org.eclipse.jetty.http2.client.http.ClientConnectionFactoryOverHTTP2;
+import org.eclipse.jetty.io.ClientConnector;
+import org.eclipse.jetty.util.ssl.SslContextFactory;
 
 /**
- * JDK Transport using {@link HttpClient}.
+ * A transporter for HTTP/HTTPS.
  *
  * @since TBD
  */
-final class JdkHttpTransporter extends AbstractTransporter {
+final class JettyTransporter extends AbstractTransporter {
     private static final int MULTIPLE_CHOICES = 300;
 
     private static final int NOT_FOUND = 404;
@@ -78,8 +79,6 @@ final class JdkHttpTransporter extends AbstractTransporter {
 
     private static final String ACCEPT_ENCODING = "Accept-Encoding";
 
-    private static final String CACHE_CONTROL = "Cache-Control";
-
     private static final String CONTENT_LENGTH = "Content-Length";
 
     private static final String CONTENT_RANGE = "Content-Range";
@@ -90,8 +89,6 @@ final class JdkHttpTransporter extends AbstractTransporter {
 
     private static final String USER_AGENT = "User-Agent";
 
-    private static final String LAST_MODIFIED = "Last-Modified";
-
     private static final Pattern CONTENT_RANGE_PATTERN =
             Pattern.compile("\\s*bytes\\s+([0-9]+)\\s*-\\s*([0-9]+)\\s*/.*");
 
@@ -99,11 +96,11 @@ final class JdkHttpTransporter extends AbstractTransporter {
 
     private final HttpClient client;
 
-    private final Map<String, String> headers;
-
     private final int requestTimeout;
 
-    JdkHttpTransporter(RepositorySystemSession session, RemoteRepository 
repository) throws NoTransporterException {
+    private final Map<String, String> headers;
+
+    JettyTransporter(RepositorySystemSession session, RemoteRepository 
repository) throws NoTransporterException {
         try {
             URI uri = new URI(repository.getUrl()).parseServerAuthority();
             if (uri.isOpaque()) {
@@ -142,7 +139,8 @@ final class JdkHttpTransporter extends AbstractTransporter {
         if (configuredHeaders != null) {
             configuredHeaders.forEach((k, v) -> headers.put(String.valueOf(k), 
v != null ? String.valueOf(v) : null));
         }
-        headers.put(CACHE_CONTROL, "no-cache, no-store");
+
+        this.headers = headers;
 
         this.requestTimeout = ConfigUtils.getInteger(
                 session,
@@ -150,7 +148,6 @@ final class JdkHttpTransporter extends AbstractTransporter {
                 ConfigurationProperties.REQUEST_TIMEOUT + "." + 
repository.getId(),
                 ConfigurationProperties.REQUEST_TIMEOUT);
 
-        this.headers = headers;
         this.client = getOrCreateClient(session, repository);
     }
 
@@ -160,7 +157,7 @@ final class JdkHttpTransporter extends AbstractTransporter {
 
     @Override
     public int classify(Throwable error) {
-        if (error instanceof JdkHttpException && ((JdkHttpException) 
error).getStatusCode() == NOT_FOUND) {
+        if (error instanceof JettyException && ((JettyException) 
error).getStatusCode() == NOT_FOUND) {
             return ERROR_NOT_FOUND;
         }
         return ERROR_OTHER;
@@ -168,54 +165,63 @@ final class JdkHttpTransporter extends 
AbstractTransporter {
 
     @Override
     protected void implPeek(PeekTask task) throws Exception {
-        HttpRequest.Builder request = HttpRequest.newBuilder()
-                .uri(resolve(task))
-                .timeout(Duration.ofMillis(requestTimeout))
-                .method("HEAD", HttpRequest.BodyPublishers.noBody());
-        headers.forEach(request::setHeader);
-        HttpResponse<Void> response = client.send(request.build(), 
HttpResponse.BodyHandlers.discarding());
-        if (response.statusCode() >= MULTIPLE_CHOICES) {
-            throw new JdkHttpException(response.statusCode());
+        Request request = client.newRequest(resolve(task))
+                .timeout(requestTimeout, TimeUnit.MILLISECONDS)
+                .method("HEAD");
+        request.headers(m -> headers.forEach(m::add));
+        Response response = request.send();
+        if (response.getStatus() >= MULTIPLE_CHOICES) {
+            throw new JettyException(response.getStatus());
         }
     }
 
     @Override
     protected void implGet(GetTask task) throws Exception {
         boolean resume = task.getResumeOffset() > 0L && task.getDataFile() != 
null;
-        HttpResponse<InputStream> response;
+        Response response;
+        InputStreamResponseListener listener;
 
         while (true) {
-            HttpRequest.Builder request = HttpRequest.newBuilder()
-                    .uri(resolve(task))
-                    .timeout(Duration.ofMillis(requestTimeout))
-                    .method("GET", HttpRequest.BodyPublishers.noBody());
-            headers.forEach(request::setHeader);
+            Request request = client.newRequest(resolve(task))
+                    .timeout(requestTimeout, TimeUnit.MILLISECONDS)
+                    .method("GET");
+            request.headers(m -> headers.forEach(m::add));
 
             if (resume) {
                 long resumeOffset = task.getResumeOffset();
-                request.header(RANGE, "bytes=" + resumeOffset + '-');
-                request.header(
-                        IF_UNMODIFIED_SINCE,
-                        RFC7231.format(
-                                
Instant.ofEpochMilli(task.getDataFile().lastModified() - 
MODIFICATION_THRESHOLD)));
-                request.header(ACCEPT_ENCODING, "identity");
+                request.headers(h -> {
+                    h.add(RANGE, "bytes=" + resumeOffset + '-');
+                    h.addDateField(IF_UNMODIFIED_SINCE, 
task.getDataFile().lastModified() - MODIFICATION_THRESHOLD);
+                    h.remove(HttpHeader.ACCEPT_ENCODING);
+                    h.add(ACCEPT_ENCODING, "identity");
+                });
             }
 
-            response = client.send(request.build(), 
HttpResponse.BodyHandlers.ofInputStream());
-            if (response.statusCode() >= MULTIPLE_CHOICES) {
-                if (resume && response.statusCode() == PRECONDITION_FAILED) {
+            listener = new InputStreamResponseListener();
+            request.send(listener);
+            try {
+                response = listener.get(requestTimeout, TimeUnit.MILLISECONDS);
+            } catch (ExecutionException e) {
+                Throwable t = e.getCause();
+                if (t instanceof Exception) {
+                    throw (Exception) t;
+                } else {
+                    throw new RuntimeException(t);
+                }
+            }
+            if (response.getStatus() >= MULTIPLE_CHOICES) {
+                if (resume && response.getStatus() == PRECONDITION_FAILED) {
                     resume = false;
                     continue;
                 }
-                throw new JdkHttpException(response.statusCode());
+                throw new JettyException(response.getStatus());
             }
             break;
         }
 
-        long offset = 0L,
-                length = 
response.headers().firstValueAsLong(CONTENT_LENGTH).orElse(-1L);
+        long offset = 0L, length = 
response.getHeaders().getLongField(CONTENT_LENGTH);
         if (resume) {
-            String range = 
response.headers().firstValue(CONTENT_RANGE).orElse(null);
+            String range = response.getHeaders().get(CONTENT_RANGE);
             if (range != null) {
                 Matcher m = CONTENT_RANGE_PATTERN.matcher(range);
                 if (!m.matches()) {
@@ -233,7 +239,7 @@ final class JdkHttpTransporter extends AbstractTransporter {
         final boolean downloadResumed = offset > 0L;
         final File dataFile = task.getDataFile();
         if (dataFile == null) {
-            try (InputStream is = response.body()) {
+            try (InputStream is = listener.getInputStream()) {
                 utilGet(task, is, true, length, downloadResumed);
             }
         } else {
@@ -244,7 +250,7 @@ final class JdkHttpTransporter extends AbstractTransporter {
                         Files.copy(inputStream, tempFile.getPath(), 
StandardCopyOption.REPLACE_EXISTING);
                     }
                 }
-                try (InputStream is = response.body()) {
+                try (InputStream is = listener.getInputStream()) {
                     utilGet(task, is, true, length, downloadResumed);
                 }
                 tempFile.move();
@@ -252,21 +258,6 @@ final class JdkHttpTransporter extends AbstractTransporter 
{
                 task.setDataFile(dataFile);
             }
         }
-        if (task.getDataFile() != null) {
-            String lastModifiedHeader =
-                    response.headers().firstValue(LAST_MODIFIED).orElse(null); 
// note: Wagon also does first not last
-            if (lastModifiedHeader != null) {
-                try {
-                    Files.setLastModifiedTime(
-                            task.getDataFile().toPath(),
-                            
FileTime.fromMillis(ZonedDateTime.parse(lastModifiedHeader, RFC7231)
-                                    .toInstant()
-                                    .toEpochMilli()));
-                } catch (DateTimeParseException e) {
-                    // fall through
-                }
-            }
-        }
         Map<String, String> checksums = extractXChecksums(response);
         if (checksums != null) {
             checksums.forEach(task::setChecksum);
@@ -278,37 +269,16 @@ final class JdkHttpTransporter extends 
AbstractTransporter {
         }
     }
 
-    @Override
-    protected void implPut(PutTask task) throws Exception {
-        HttpRequest.Builder request =
-                
HttpRequest.newBuilder().uri(resolve(task)).timeout(Duration.ofMillis(requestTimeout));
-        headers.forEach(request::setHeader);
-        try (FileUtils.TempFile tempFile = FileUtils.newTempFile()) {
-            utilPut(task, Files.newOutputStream(tempFile.getPath()), true);
-            request.method("PUT", 
HttpRequest.BodyPublishers.ofFile(tempFile.getPath()));
-
-            HttpResponse<Void> response = client.send(request.build(), 
HttpResponse.BodyHandlers.discarding());
-            if (response.statusCode() >= MULTIPLE_CHOICES) {
-                throw new JdkHttpException(response.statusCode());
-            }
-        }
-    }
-
-    @Override
-    protected void implClose() {
-        // nop
-    }
-
-    private static Map<String, String> extractXChecksums(HttpResponse<?> 
response) {
+    private static Map<String, String> extractXChecksums(Response response) {
         String value;
         HashMap<String, String> result = new HashMap<>();
         // Central style: x-checksum-sha1: 
c74edb60ca2a0b57ef88d9a7da28f591e3d4ce7b
-        value = response.headers().firstValue("x-checksum-sha1").orElse(null);
+        value = response.getHeaders().get("x-checksum-sha1");
         if (value != null) {
             result.put("SHA-1", value);
         }
         // Central style: x-checksum-md5: 9ad0d8e3482767c122e85f83567b8ce6
-        value = response.headers().firstValue("x-checksum-md5").orElse(null);
+        value = response.getHeaders().get("x-checksum-md5");
         if (value != null) {
             result.put("MD5", value);
         }
@@ -316,12 +286,12 @@ final class JdkHttpTransporter extends 
AbstractTransporter {
             return result;
         }
         // Google style: x-goog-meta-checksum-sha1: 
c74edb60ca2a0b57ef88d9a7da28f591e3d4ce7b
-        value = 
response.headers().firstValue("x-goog-meta-checksum-sha1").orElse(null);
+        value = response.getHeaders().get("x-goog-meta-checksum-sha1");
         if (value != null) {
             result.put("SHA-1", value);
         }
         // Central style: x-goog-meta-checksum-sha1: 
9ad0d8e3482767c122e85f83567b8ce6
-        value = 
response.headers().firstValue("x-goog-meta-checksum-md5").orElse(null);
+        value = response.getHeaders().get("x-goog-meta-checksum-md5");
         if (value != null) {
             result.put("MD5", value);
         }
@@ -329,9 +299,9 @@ final class JdkHttpTransporter extends AbstractTransporter {
         return result.isEmpty() ? null : result;
     }
 
-    private static Map<String, String> extractNexus2Checksums(HttpResponse<?> 
response) {
+    private static Map<String, String> extractNexus2Checksums(Response 
response) {
         // Nexus-style, ETag: 
"{SHA1{d40d68ba1f88d8e9b0040f175a6ff41928abd5e7}}"
-        String etag = response.headers().firstValue("ETag").orElse(null);
+        String etag = response.getHeaders().get("ETag");
         if (etag != null) {
             int start = etag.indexOf("SHA1{"), end = etag.indexOf("}", start + 
5);
             if (start >= 0 && end > start) {
@@ -341,23 +311,51 @@ final class JdkHttpTransporter extends 
AbstractTransporter {
         return null;
     }
 
-    private static final DateTimeFormatter RFC7231 = 
DateTimeFormatter.ofPattern(
-                    "EEE, dd MMM yyyy HH:mm:ss z", Locale.ENGLISH)
-            .withZone(ZoneId.of("GMT"));
+    @Override
+    protected void implPut(PutTask task) throws Exception {
+        Request request = 
client.newRequest(resolve(task)).method("PUT").timeout(requestTimeout, 
TimeUnit.MILLISECONDS);
+        request.headers(m -> headers.forEach(m::add));
+        try (FileUtils.TempFile tempFile = FileUtils.newTempFile()) {
+            utilPut(task, Files.newOutputStream(tempFile.getPath()), true);
+            request.body(new PathRequestContent(tempFile.getPath()));
+
+            Response response;
+            try {
+                response = request.send();
+            } catch (ExecutionException e) {
+                Throwable t = e.getCause();
+                if (t instanceof Exception) {
+                    throw (Exception) t;
+                } else {
+                    throw new RuntimeException(t);
+                }
+            }
+            if (response.getStatus() >= MULTIPLE_CHOICES) {
+                throw new JettyException(response.getStatus());
+            }
+        }
+    }
+
+    @Override
+    protected void implClose() {
+        // noop
+    }
 
     /**
      * Visible for testing.
      */
-    static final String HTTP_INSTANCE_KEY_PREFIX = 
JdkTransporterFactory.class.getName() + ".http.";
+    static final String JETTY_INSTANCE_KEY_PREFIX = 
JettyTransporterFactory.class.getName() + ".jetty.";
 
+    @SuppressWarnings("checkstyle:methodlength")
     private static HttpClient getOrCreateClient(RepositorySystemSession 
session, RemoteRepository repository)
             throws NoTransporterException {
-        final String instanceKey = HTTP_INSTANCE_KEY_PREFIX + 
repository.getId();
+
+        final String instanceKey = JETTY_INSTANCE_KEY_PREFIX + 
repository.getId();
 
         try {
             return (HttpClient) session.getData().computeIfAbsent(instanceKey, 
() -> {
-                HashMap<Authenticator.RequestorType, PasswordAuthentication> 
authentications = new HashMap<>();
                 SSLContext sslContext = null;
+                BasicAuthentication basicAuthentication = null;
                 try {
                     try (AuthenticationContext repoAuthContext =
                             AuthenticationContext.forRepository(session, 
repository)) {
@@ -367,9 +365,8 @@ final class JdkHttpTransporter extends AbstractTransporter {
                             String username = 
repoAuthContext.get(AuthenticationContext.USERNAME);
                             String password = 
repoAuthContext.get(AuthenticationContext.PASSWORD);
 
-                            authentications.put(
-                                    Authenticator.RequestorType.SERVER,
-                                    new PasswordAuthentication(username, 
password.toCharArray()));
+                            basicAuthentication = new BasicAuthentication(
+                                    URI.create(repository.getUrl()), 
Authentication.ANY_REALM, username, password);
                         }
                     }
 
@@ -383,42 +380,60 @@ final class JdkHttpTransporter extends 
AbstractTransporter {
                             ConfigurationProperties.CONNECT_TIMEOUT + "." + 
repository.getId(),
                             ConfigurationProperties.CONNECT_TIMEOUT);
 
-                    HttpClient.Builder builder = HttpClient.newBuilder()
-                            .version(HttpClient.Version.HTTP_2)
-                            .followRedirects(HttpClient.Redirect.NORMAL)
-                            .connectTimeout(Duration.ofMillis(connectTimeout))
-                            .sslContext(sslContext);
+                    SslContextFactory.Client sslContextFactory = new 
SslContextFactory.Client();
+                    sslContextFactory.setSslContext(sslContext);
+
+                    ClientConnector clientConnector = new ClientConnector();
+                    clientConnector.setSslContextFactory(sslContextFactory);
+
+                    HTTP2Client http2Client = new HTTP2Client(clientConnector);
+                    ClientConnectionFactoryOverHTTP2.HTTP2 http2 =
+                            new 
ClientConnectionFactoryOverHTTP2.HTTP2(http2Client);
+
+                    HttpClientTransportDynamic transport;
+                    if ("https".equalsIgnoreCase(repository.getProtocol())) {
+                        transport = new HttpClientTransportDynamic(
+                                clientConnector, http2, 
HttpClientConnectionFactory.HTTP11); // HTTPS, prefer H2
+                    } else {
+                        transport = new HttpClientTransportDynamic(
+                                clientConnector,
+                                HttpClientConnectionFactory.HTTP11,
+                                http2); // plaintext HTTP, H2 cannot be used
+                    }
+
+                    HttpClient httpClient = new HttpClient(transport);
+                    httpClient.setConnectTimeout(connectTimeout);
+                    httpClient.setFollowRedirects(true);
+                    httpClient.setMaxRedirects(2);
+
+                    httpClient.setUserAgentField(null); // we manage it
+
+                    if (basicAuthentication != null) {
+                        
httpClient.getAuthenticationStore().addAuthentication(basicAuthentication);
+                    }
 
                     if (repository.getProxy() != null) {
-                        ProxySelector proxy = ProxySelector.of(new 
InetSocketAddress(
+                        HttpProxy proxy = new HttpProxy(
                                 repository.getProxy().getHost(),
-                                repository.getProxy().getPort()));
+                                repository.getProxy().getPort());
 
-                        builder.proxy(proxy);
+                        httpClient.getProxyConfiguration().addProxy(proxy);
                         try (AuthenticationContext proxyAuthContext =
                                 AuthenticationContext.forProxy(session, 
repository)) {
                             if (proxyAuthContext != null) {
                                 String username = 
proxyAuthContext.get(AuthenticationContext.USERNAME);
                                 String password = 
proxyAuthContext.get(AuthenticationContext.PASSWORD);
 
-                                authentications.put(
-                                        Authenticator.RequestorType.PROXY,
-                                        new PasswordAuthentication(username, 
password.toCharArray()));
-                            }
-                        }
-                    }
+                                BasicAuthentication proxyAuthentication = new 
BasicAuthentication(
+                                        proxy.getURI(), 
Authentication.ANY_REALM, username, password);
 
-                    if (!authentications.isEmpty()) {
-                        builder.authenticator(new Authenticator() {
-                            @Override
-                            protected PasswordAuthentication 
getPasswordAuthentication() {
-                                return authentications.get(getRequestorType());
+                                
httpClient.getAuthenticationStore().addAuthentication(proxyAuthentication);
                             }
-                        });
+                        }
                     }
-
-                    return builder.build();
-                } catch (NoSuchAlgorithmException e) {
+                    httpClient.start();
+                    return httpClient;
+                } catch (Exception e) {
                     throw new WrapperEx(e);
                 }
             });
diff --git 
a/maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
 
b/maven-resolver-transport-jetty-parent/maven-resolver-transport-jetty-11/src/main/java/org/eclipse/aether/transport/jetty/JettyTransporterFactory.java
similarity index 77%
copy from 
maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
copy to 
maven-resolver-transport-jetty-parent/maven-resolver-transport-jetty-11/src/main/java/org/eclipse/aether/transport/jetty/JettyTransporterFactory.java
index ecb32749..9d50d60d 100644
--- 
a/maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
+++ 
b/maven-resolver-transport-jetty-parent/maven-resolver-transport-jetty-11/src/main/java/org/eclipse/aether/transport/jetty/JettyTransporterFactory.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.eclipse.aether.transport.jdk;
+package org.eclipse.aether.transport.jetty;
 
 import javax.inject.Named;
 
@@ -29,22 +29,22 @@ import org.eclipse.aether.transfer.NoTransporterException;
 import static java.util.Objects.requireNonNull;
 
 /**
- * JDK Transport factory.
+ * A transporter factory for repositories using the {@code http:} or {@code 
https:} protocol.
  *
  * @since TBD
  */
-@Named( JdkTransporterFactory.NAME)
-public final class JdkTransporterFactory implements TransporterFactory {
-    public static final String NAME = "jdk";
+@Named(JettyTransporterFactory.NAME)
+public final class JettyTransporterFactory implements TransporterFactory {
+    public static final String NAME = "jetty";
 
-    private float priority = 10.0f;
+    private float priority = 15.0f;
 
     @Override
     public float getPriority() {
         return priority;
     }
 
-    public JdkTransporterFactory setPriority( float priority) {
+    public JettyTransporterFactory setPriority(float priority) {
         this.priority = priority;
         return this;
     }
@@ -56,9 +56,9 @@ public final class JdkTransporterFactory implements 
TransporterFactory {
         requireNonNull(repository, "repository cannot be null");
 
         if (!"http".equalsIgnoreCase(repository.getProtocol()) && 
!"https".equalsIgnoreCase(repository.getProtocol())) {
-            throw new NoTransporterException(repository, "Only HTTP/HTTPS is 
supported");
+            throw new NoTransporterException(repository);
         }
 
-        return new JdkHttpTransporter(session, repository);
+        return new JettyTransporter(session, repository);
     }
 }
diff --git 
a/maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/package-info.java
 
b/maven-resolver-transport-jetty-parent/maven-resolver-transport-jetty-11/src/main/java/org/eclipse/aether/transport/jetty/package-info.java
similarity index 90%
copy from 
maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/package-info.java
copy to 
maven-resolver-transport-jetty-parent/maven-resolver-transport-jetty-11/src/main/java/org/eclipse/aether/transport/jetty/package-info.java
index 8ef1b81a..367c2057 100644
--- 
a/maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/package-info.java
+++ 
b/maven-resolver-transport-jetty-parent/maven-resolver-transport-jetty-11/src/main/java/org/eclipse/aether/transport/jetty/package-info.java
@@ -19,8 +19,8 @@
  */
 /**
  * Support for downloads/uploads via the HTTP and HTTPS protocols. The 
implementation is backed by
- * Java 11 {@link java.net.http.HttpClient}.
+ * <a href="https://eclipse.dev/jetty/";>Eclipse Jetty</a>.
  *
  * @since TBD
  */
-package org.eclipse.aether.transport.jdk;
+package org.eclipse.aether.transport.jetty;
diff --git a/maven-resolver-transport-jdk/pom.xml 
b/maven-resolver-transport-jetty-parent/maven-resolver-transport-jetty-8/pom.xml
similarity index 73%
rename from maven-resolver-transport-jdk/pom.xml
rename to 
maven-resolver-transport-jetty-parent/maven-resolver-transport-jetty-8/pom.xml
index c0705e1a..9620f97a 100644
--- a/maven-resolver-transport-jdk/pom.xml
+++ 
b/maven-resolver-transport-jetty-parent/maven-resolver-transport-jetty-8/pom.xml
@@ -22,18 +22,18 @@
 
   <parent>
     <groupId>org.apache.maven.resolver</groupId>
-    <artifactId>maven-resolver</artifactId>
+    <artifactId>maven-resolver-transport-jetty-parent</artifactId>
     <version>2.0.0-SNAPSHOT</version>
   </parent>
 
-  <artifactId>maven-resolver-transport-jdk</artifactId>
+  <artifactId>maven-resolver-transport-jetty-8</artifactId>
   <packaging>jar</packaging>
 
-  <name>Maven Artifact Resolver Transport JDK</name>
-  <description>Maven Artifact Transport JDK Java 11+.</description>
+  <name>Maven Artifact Resolver Transport Jetty (8)</name>
+  <description>Maven Artifact Transport Jetty.</description>
 
   <properties>
-    
<Automatic-Module-Name>org.apache.maven.resolver.transport.jdk</Automatic-Module-Name>
+    
<Automatic-Module-Name>org.apache.maven.resolver.transport.jetty</Automatic-Module-Name>
     <Bundle-SymbolicName>${Automatic-Module-Name}</Bundle-SymbolicName>
   </properties>
 
@@ -60,22 +60,22 @@
 
   <build>
     <plugins>
+      <plugin>
+        <groupId>org.eclipse.sisu</groupId>
+        <artifactId>sisu-maven-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>biz.aQute.bnd</groupId>
+        <artifactId>bnd-maven-plugin</artifactId>
+      </plugin>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-compiler-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>java11</id>
-            <goals>
-              <goal>compile</goal>
-            </goals>
-            <configuration>
-              <release>11</release>
-              <multiReleaseOutput>true</multiReleaseOutput>
-              <compileSourceRoots>src/main/java11</compileSourceRoots>
-            </configuration>
-          </execution>
-        </executions>
+        <artifactId>maven-jar-plugin</artifactId>
+        <configuration>
+          <archive>
+            
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
+          </archive>
+        </configuration>
       </plugin>
     </plugins>
   </build>
diff --git 
a/maven-resolver-transport-jdk/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
 
b/maven-resolver-transport-jetty-parent/maven-resolver-transport-jetty-8/src/main/java/org/eclipse/aether/transport/jetty/JettyTransporterFactory.java
similarity index 78%
copy from 
maven-resolver-transport-jdk/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
copy to 
maven-resolver-transport-jetty-parent/maven-resolver-transport-jetty-8/src/main/java/org/eclipse/aether/transport/jetty/JettyTransporterFactory.java
index aa015d2b..bbb7f398 100644
--- 
a/maven-resolver-transport-jdk/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
+++ 
b/maven-resolver-transport-jetty-parent/maven-resolver-transport-jetty-8/src/main/java/org/eclipse/aether/transport/jetty/JettyTransporterFactory.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.eclipse.aether.transport.jdk;
+package org.eclipse.aether.transport.jetty;
 
 import javax.inject.Named;
 
@@ -29,22 +29,22 @@ import org.eclipse.aether.transfer.NoTransporterException;
 import static java.util.Objects.requireNonNull;
 
 /**
- * JDK Transport factory: on Java 8 is no-op.
+ * Jetty Transport factory: on Java 8 is no-op.
  *
  * @since TBD
  */
-@Named(JdkTransporterFactory.NAME)
-public final class JdkTransporterFactory implements TransporterFactory {
-    public static final String NAME = "jdk";
+@Named(JettyTransporterFactory.NAME)
+public final class JettyTransporterFactory implements TransporterFactory {
+    public static final String NAME = "jetty";
 
-    private float priority = 10.0f;
+    private float priority = Float.MIN_VALUE;
 
     @Override
     public float getPriority() {
         return priority;
     }
 
-    public JdkTransporterFactory setPriority(float priority) {
+    public JettyTransporterFactory setPriority(float priority) {
         this.priority = priority;
         return this;
     }
@@ -55,6 +55,6 @@ public final class JdkTransporterFactory implements 
TransporterFactory {
         requireNonNull(session, "session cannot be null");
         requireNonNull(repository, "repository cannot be null");
 
-        throw new NoTransporterException(repository, "JDK Transport needs 
Java11+");
+        throw new NoTransporterException(repository, "Jetty Transport needs 
Java11+");
     }
 }
diff --git 
a/maven-resolver-transport-jetty-parent/maven-resolver-transport-jetty/pom.xml 
b/maven-resolver-transport-jetty-parent/maven-resolver-transport-jetty/pom.xml
new file mode 100644
index 00000000..fd01a6eb
--- /dev/null
+++ 
b/maven-resolver-transport-jetty-parent/maven-resolver-transport-jetty/pom.xml
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<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.apache.maven.resolver</groupId>
+    <artifactId>maven-resolver-transport-jetty-parent</artifactId>
+    <version>2.0.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>maven-resolver-transport-jetty</artifactId>
+  <packaging>jar</packaging>
+
+  <name>Maven Artifact Resolver Transport Jetty (mr)</name>
+  <description>Maven Artifact Transport Jetty.</description>
+
+  <properties>
+    
<Automatic-Module-Name>org.apache.maven.resolver.transport.jetty</Automatic-Module-Name>
+    <Bundle-SymbolicName>${Automatic-Module-Name}</Bundle-SymbolicName>
+
+    <!-- This is a multi-release JAR, but this property is needed only to pass 
enforcer -->
+    <javaVersion>11</javaVersion>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-spi</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-util</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>javax.inject</groupId>
+      <artifactId>javax.inject</artifactId>
+      <scope>provided</scope>
+      <optional>true</optional>
+    </dependency>
+
+    <dependency>
+      <groupId>org.eclipse.jetty</groupId>
+      <artifactId>jetty-client</artifactId>
+      <version>${jettyVersion}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.jetty.http2</groupId>
+      <artifactId>http2-client</artifactId>
+      <version>${jettyVersion}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.jetty.http2</groupId>
+      <artifactId>http2-http-client-transport</artifactId>
+      <version>${jettyVersion}</version>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <resources>
+      <resource>
+        <filtering>false</filtering>
+        <directory>${project.build.directory}/generated-resources</directory>
+      </resource>
+    </resources>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>java8</id>
+            <goals>
+              <goal>unpack</goal>
+            </goals>
+            <phase>generate-resources</phase>
+            <configuration>
+              <artifactItems>
+                <artifactItem>
+                  <groupId>org.apache.maven.resolver</groupId>
+                  <artifactId>maven-resolver-transport-jetty-8</artifactId>
+                  <version>${project.version}</version>
+                  <type>jar</type>
+                  
<outputDirectory>${project.build.directory}/generated-resources</outputDirectory>
+                  <excludes>META-INF/maven/**</excludes>
+                </artifactItem>
+              </artifactItems>
+            </configuration>
+          </execution>
+          <execution>
+            <id>java11</id>
+            <goals>
+              <goal>unpack</goal>
+            </goals>
+            <phase>generate-resources</phase>
+            <configuration>
+              <artifactItems>
+                <artifactItem>
+                  <groupId>org.apache.maven.resolver</groupId>
+                  <artifactId>maven-resolver-transport-jetty-11</artifactId>
+                  <version>${project.version}</version>
+                  <type>jar</type>
+                  
<outputDirectory>${project.build.directory}/generated-resources/META-INF/versions/11</outputDirectory>
+                  <includes>**/*.class</includes>
+                </artifactItem>
+              </artifactItems>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jar-plugin</artifactId>
+        <configuration>
+          <archive>
+            
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
+            <manifestEntries>
+              <Multi-Release>true</Multi-Release>
+            </manifestEntries>
+          </archive>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>
diff --git a/maven-resolver-transport-jetty-parent/pom.xml 
b/maven-resolver-transport-jetty-parent/pom.xml
new file mode 100644
index 00000000..6d9f243e
--- /dev/null
+++ b/maven-resolver-transport-jetty-parent/pom.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<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.apache.maven.resolver</groupId>
+    <artifactId>maven-resolver</artifactId>
+    <version>2.0.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>maven-resolver-transport-jetty-parent</artifactId>
+  <packaging>pom</packaging>
+
+  <name>Maven Artifact Resolver Transport Jetty (parent)</name>
+  <description>Maven Artifact Transport Jetty.</description>
+
+  <modules>
+    <module>maven-resolver-transport-jetty-8</module>
+    <module>maven-resolver-transport-jetty-11</module>
+    <module>maven-resolver-transport-jetty</module>
+  </modules>
+
+  <properties>
+    <jettyVersion>10.0.17</jettyVersion>
+  </properties>
+
+</project>
diff --git 
a/maven-resolver-transport-jdk/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
 
b/maven-resolver-transport-jetty-parent/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
similarity index 100%
rename from 
maven-resolver-transport-jdk/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
rename to 
maven-resolver-transport-jetty-parent/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
diff --git 
a/maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/JdkHttpException.java
 
b/maven-resolver-transport-jetty-parent/src/main/java11/org/eclipse/aether/transport/jdk/JdkHttpException.java
similarity index 100%
rename from 
maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/JdkHttpException.java
rename to 
maven-resolver-transport-jetty-parent/src/main/java11/org/eclipse/aether/transport/jdk/JdkHttpException.java
diff --git 
a/maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/JdkHttpTransporter.java
 
b/maven-resolver-transport-jetty-parent/src/main/java11/org/eclipse/aether/transport/jdk/JdkHttpTransporter.java
similarity index 100%
rename from 
maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/JdkHttpTransporter.java
rename to 
maven-resolver-transport-jetty-parent/src/main/java11/org/eclipse/aether/transport/jdk/JdkHttpTransporter.java
diff --git 
a/maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
 
b/maven-resolver-transport-jetty-parent/src/main/java11/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
similarity index 100%
rename from 
maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
rename to 
maven-resolver-transport-jetty-parent/src/main/java11/org/eclipse/aether/transport/jdk/JdkTransporterFactory.java
diff --git 
a/maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/package-info.java
 
b/maven-resolver-transport-jetty-parent/src/main/java11/org/eclipse/aether/transport/jdk/package-info.java
similarity index 100%
rename from 
maven-resolver-transport-jdk/src/main/java11/org/eclipse/aether/transport/jdk/package-info.java
rename to 
maven-resolver-transport-jetty-parent/src/main/java11/org/eclipse/aether/transport/jdk/package-info.java
diff --git a/pom.xml b/pom.xml
index c895375a..a92cab22 100644
--- a/pom.xml
+++ b/pom.xml
@@ -56,7 +56,8 @@
     <module>maven-resolver-connector-basic</module>
     <module>maven-resolver-transport-classpath</module>
     <module>maven-resolver-transport-file</module>
-    <module>maven-resolver-transport-jdk</module>
+    <module>maven-resolver-transport-jetty-parent</module>
+    <module>maven-resolver-transport-jdk-parent</module>
     <module>maven-resolver-transport-http</module>
     <module>maven-resolver-transport-wagon</module>
     <module>maven-resolver-supplier</module>
@@ -143,6 +144,11 @@
         <artifactId>maven-resolver-transport-file</artifactId>
         <version>${project.version}</version>
       </dependency>
+      <dependency>
+        <groupId>org.apache.maven.resolver</groupId>
+        <artifactId>maven-resolver-transport-jetty</artifactId>
+        <version>${project.version}</version>
+      </dependency>
       <dependency>
         <groupId>org.apache.maven.resolver</groupId>
         <artifactId>maven-resolver-transport-jdk</artifactId>

Reply via email to