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>