You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by cs...@apache.org on 2022/04/13 10:51:29 UTC

[maven] branch maven-3.9.x updated: [MNG-7454] Include resolver-transport-http in Maven 3.9.x (#710)

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

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


The following commit(s) were added to refs/heads/maven-3.9.x by this push:
     new 1ad5a1b1e [MNG-7454] Include resolver-transport-http in Maven 3.9.x (#710)
1ad5a1b1e is described below

commit 1ad5a1b1e9bb0a17fc12bbe0314564a616078602
Author: Tamas Cservenak <ta...@cservenak.net>
AuthorDate: Wed Apr 13 12:51:19 2022 +0200

    [MNG-7454] Include resolver-transport-http in Maven 3.9.x (#710)
    
    But keep Wagon as default transport. This PR merely includes
    resolver http and file transport and switches wagon-http
    to non-shaded one.
    
    Changes:
    * switch to non-shaded wagon-http (as httpClient is now shared)
    * include resolver http and file transport
    * override resolver default behaviour (native transport preferred over wagon, when both on classpath)
    * provide simplistic means to choose transport
    
    The chosen transport can be seen in debug (-X) output on line
    `[DEBUG] Using transporter XXX...`
    
    The `-Dmaven.transport` simplistic switch can be used to choose transport:
    * not set: default, that is Wagon
    * `wagon`: explicitly sets Wagon
    * `resolver`: explicitly sets resolver native transports (file and http)
    * `auto`: relies on resolver "auto discovery" (priorities, etc). This is MUST to keep transport pluggable with 3rd party transports. In fact, this was the default so far in Maven, along with the fact that native resolver transports were not included (as resolver prefers native ones over Wagon).
---
 apache-maven/pom.xml                               | 29 +++++++----------
 .../DefaultRepositorySystemSessionFactory.java     | 36 ++++++++++++++++++++++
 maven-resolver-provider/pom.xml                    |  6 ++--
 pom.xml                                            | 19 +++++++-----
 4 files changed, 61 insertions(+), 29 deletions(-)

diff --git a/apache-maven/pom.xml b/apache-maven/pom.xml
index 07add7ef1..bf5f377a0 100644
--- a/apache-maven/pom.xml
+++ b/apache-maven/pom.xml
@@ -63,21 +63,10 @@ under the License.
     <dependency>
       <groupId>org.apache.maven.wagon</groupId>
       <artifactId>wagon-http</artifactId>
-      <classifier>shaded</classifier>
-      <exclusions>
-        <exclusion>
-          <groupId>org.apache.httpcomponents</groupId>
-          <artifactId>httpclient</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>org.apache.httpcomponents</groupId>
-          <artifactId>httpcore</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>org.apache.maven.wagon</groupId>
-          <artifactId>wagon-http-shared</artifactId>
-        </exclusion>
-      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.wagon</groupId>
+      <artifactId>wagon-file</artifactId>
     </dependency>
     <dependency>
       <groupId>org.slf4j</groupId>
@@ -86,12 +75,16 @@ under the License.
       <scope>runtime</scope>
     </dependency>
     <dependency>
-      <groupId>org.apache.maven.wagon</groupId>
-      <artifactId>wagon-file</artifactId>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-connector-basic</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.maven.resolver</groupId>
-      <artifactId>maven-resolver-connector-basic</artifactId>
+      <artifactId>maven-resolver-transport-file</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-transport-http</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.maven.resolver</groupId>
diff --git a/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java b/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java
index 60c6cf17a..5616743d1 100644
--- a/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java
+++ b/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java
@@ -63,6 +63,22 @@ import java.util.Map;
 @Named
 public class DefaultRepositorySystemSessionFactory
 {
+    private static final String MAVEN_TRANSPORT_KEY = "maven.transport";
+
+    private static final String MAVEN_TRANSPORT_WAGON = "wagon";
+
+    private static final String MAVEN_TRANSPORT_RESOLVER = "resolver";
+
+    private static final String MAVEN_TRANSPORT_AUTO = "auto";
+
+    private static final String WAGON_TRANSPORTER_KEY_PRIORITY_KEY = "aether.priority.WagonTransporterFactory";
+
+    private static final String RESOLVER_HTTP_TRANSPORTER_PRIORITY_KEY = "aether.priority.HttpTransporterFactory";
+
+    private static final String RESOLVER_FILE_TRANSPORTER_PRIORITY_KEY = "aether.priority.FileTransporterFactory";
+
+    private static final String RESOLVER_MAX_PRIORITY = String.valueOf( Float.MAX_VALUE );
+
     @Inject
     private Logger logger;
 
@@ -94,6 +110,7 @@ public class DefaultRepositorySystemSessionFactory
     @Inject
     private RuntimeInformation runtimeInformation;
 
+    @SuppressWarnings( "checkstyle:methodlength" )
     public DefaultRepositorySystemSession newRepositorySession( MavenExecutionRequest request )
     {
         DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession();
@@ -224,6 +241,25 @@ public class DefaultRepositorySystemSessionFactory
         }
         session.setAuthenticationSelector( authSelector );
 
+        String transport = request.getUserProperties().getProperty( MAVEN_TRANSPORT_KEY, MAVEN_TRANSPORT_WAGON );
+        if ( MAVEN_TRANSPORT_RESOLVER.equals( transport ) )
+        {
+            // Make sure (whatever extra priority is set) that resolver native is selected
+            configProps.put( RESOLVER_FILE_TRANSPORTER_PRIORITY_KEY, RESOLVER_MAX_PRIORITY );
+            configProps.put( RESOLVER_HTTP_TRANSPORTER_PRIORITY_KEY, RESOLVER_MAX_PRIORITY );
+        }
+        else if ( MAVEN_TRANSPORT_WAGON.equals( transport ) )
+        {
+            // Make sure (whatever extra priority is set) that wagon is selected
+            configProps.put( WAGON_TRANSPORTER_KEY_PRIORITY_KEY, RESOLVER_MAX_PRIORITY );
+        }
+        else if ( !MAVEN_TRANSPORT_AUTO.equals( transport ) )
+        {
+            throw new IllegalArgumentException( "Unknown maven.transport=" + transport
+                    + ". Supported ones are: " + MAVEN_TRANSPORT_WAGON + ", "
+                    + MAVEN_TRANSPORT_RESOLVER + " and " + MAVEN_TRANSPORT_AUTO );
+        }
+
         session.setTransferListener( request.getTransferListener() );
 
         session.setRepositoryListener( eventSpyDispatcher.chainListener( new LoggingRepositoryListener( logger ) ) );
diff --git a/maven-resolver-provider/pom.xml b/maven-resolver-provider/pom.xml
index 2b9422ca3..d273a738f 100644
--- a/maven-resolver-provider/pom.xml
+++ b/maven-resolver-provider/pom.xml
@@ -104,12 +104,12 @@ under the License.
     </dependency>
     <dependency>
       <groupId>org.apache.maven.resolver</groupId>
-      <artifactId>maven-resolver-transport-wagon</artifactId>
+      <artifactId>maven-resolver-transport-file</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.apache.maven.wagon</groupId>
-      <artifactId>wagon-file</artifactId>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-transport-http</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
diff --git a/pom.xml b/pom.xml
index e1c0acfef..85ee11ed6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -66,7 +66,7 @@ under the License.
     <cipherVersion>2.0</cipherVersion>
     <modelloVersion>2.0.0</modelloVersion>
     <jxpathVersion>1.3</jxpathVersion>
-    <resolverVersion>1.7.2</resolverVersion>
+    <resolverVersion>1.7.3</resolverVersion>
     <slf4jVersion>1.7.32</slf4jVersion>
     <xmlunitVersion>2.2.1</xmlunitVersion>
     <powermockVersion>1.7.4</powermockVersion>
@@ -379,13 +379,6 @@ under the License.
         <groupId>org.apache.maven.wagon</groupId>
         <artifactId>wagon-http</artifactId>
         <version>${wagonVersion}</version>
-        <classifier>shaded</classifier>
-        <exclusions>
-          <exclusion>
-            <groupId>commons-logging</groupId>
-            <artifactId>commons-logging</artifactId>
-          </exclusion>
-        </exclusions>
       </dependency>
       <!--  Repository -->
       <dependency>
@@ -413,6 +406,16 @@ under the License.
         <artifactId>maven-resolver-connector-basic</artifactId>
         <version>${resolverVersion}</version>
       </dependency>
+      <dependency>
+        <groupId>org.apache.maven.resolver</groupId>
+        <artifactId>maven-resolver-transport-file</artifactId>
+        <version>${resolverVersion}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.maven.resolver</groupId>
+        <artifactId>maven-resolver-transport-http</artifactId>
+        <version>${resolverVersion}</version>
+      </dependency>
       <dependency>
         <groupId>org.apache.maven.resolver</groupId>
         <artifactId>maven-resolver-transport-wagon</artifactId>