From b0f5b0bbaba78109325d556b5049dddf491b4d0f Mon Sep 17 00:00:00 2001 From: Tamas Cservenak Date: Fri, 8 Apr 2022 16:02:09 +0200 Subject: [PATCH 1/3] [MNG-7454] Include resolver-transport-http in Maven 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.traport` simplistic switch can be used to choose tranport: * 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. Note: resolver by default, if both wagon and native transports are present on classpath, would prefer native ones. Hence, to retain "wagon as default" this extra config bit is a must in Maven. --- apache-maven/pom.xml | 29 ++++++---------- ...DefaultRepositorySystemSessionFactory.java | 34 +++++++++++++++++++ maven-resolver-provider/pom.xml | 6 ++-- pom.xml | 19 ++++++----- 4 files changed, 59 insertions(+), 29 deletions(-) diff --git a/apache-maven/pom.xml b/apache-maven/pom.xml index 07add7ef1d3e..bf5f377a0971 100644 --- a/apache-maven/pom.xml +++ b/apache-maven/pom.xml @@ -63,21 +63,10 @@ under the License. org.apache.maven.wagon wagon-http - shaded - - - org.apache.httpcomponents - httpclient - - - org.apache.httpcomponents - httpcore - - - org.apache.maven.wagon - wagon-http-shared - - + + + org.apache.maven.wagon + wagon-file org.slf4j @@ -86,12 +75,16 @@ under the License. runtime - org.apache.maven.wagon - wagon-file + org.apache.maven.resolver + maven-resolver-connector-basic org.apache.maven.resolver - maven-resolver-connector-basic + maven-resolver-transport-file + + + org.apache.maven.resolver + maven-resolver-transport-http org.apache.maven.resolver 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 60c6cf17a050..a511936f447e 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,20 @@ @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"; + @Inject private Logger logger; @@ -94,6 +108,7 @@ public class DefaultRepositorySystemSessionFactory @Inject private RuntimeInformation runtimeInformation; + @SuppressWarnings( "checkstyle:methodlength" ) public DefaultRepositorySystemSession newRepositorySession( MavenExecutionRequest request ) { DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession(); @@ -224,6 +239,25 @@ else if ( request.isUpdateSnapshots() ) } session.setAuthenticationSelector( authSelector ); + String transport = request.getUserProperties().getProperty( MAVEN_TRANSPORT_KEY, MAVEN_TRANSPORT_WAGON ); + if ( MAVEN_TRANSPORT_RESOLVER.equals( transport ) ) + { + // Is not needed, as resolver prefers native transport if both present + configProps.put( RESOLVER_FILE_TRANSPORTER_PRIORITY_KEY, "100" ); + configProps.put( RESOLVER_HTTP_TRANSPORTER_PRIORITY_KEY, "100" ); + } + else if ( MAVEN_TRANSPORT_WAGON.equals( transport ) ) + { + // is needed, as resolver prefers native transport if both present + configProps.put( WAGON_TRANSPORTER_KEY_PRIORITY_KEY, "100" ); + } + 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 2b9422ca3e4e..d273a738ff8e 100644 --- a/maven-resolver-provider/pom.xml +++ b/maven-resolver-provider/pom.xml @@ -104,12 +104,12 @@ under the License. org.apache.maven.resolver - maven-resolver-transport-wagon + maven-resolver-transport-file test - org.apache.maven.wagon - wagon-file + org.apache.maven.resolver + maven-resolver-transport-http test diff --git a/pom.xml b/pom.xml index e1c0acfef8e3..e63d0449b2b4 100644 --- a/pom.xml +++ b/pom.xml @@ -66,7 +66,7 @@ under the License. 2.0 2.0.0 1.3 - 1.7.2 + 1.8.0-SNAPSHOT 1.7.32 2.2.1 1.7.4 @@ -379,13 +379,6 @@ under the License. org.apache.maven.wagon wagon-http ${wagonVersion} - shaded - - - commons-logging - commons-logging - - @@ -413,6 +406,16 @@ under the License. maven-resolver-connector-basic ${resolverVersion} + + org.apache.maven.resolver + maven-resolver-transport-file + ${resolverVersion} + + + org.apache.maven.resolver + maven-resolver-transport-http + ${resolverVersion} + org.apache.maven.resolver maven-resolver-transport-wagon From 85c4e5a786a2840259eaa61b94d8ec1072159ed2 Mon Sep 17 00:00:00 2001 From: Tamas Cservenak Date: Fri, 8 Apr 2022 16:26:59 +0200 Subject: [PATCH 2/3] Tidy up --- .../aether/DefaultRepositorySystemSessionFactory.java | 8 +++++--- pom.xml | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) 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 a511936f447e..b41a81a5f3ad 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 @@ -77,6 +77,8 @@ public class DefaultRepositorySystemSessionFactory 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; @@ -243,13 +245,13 @@ else if ( request.isUpdateSnapshots() ) if ( MAVEN_TRANSPORT_RESOLVER.equals( transport ) ) { // Is not needed, as resolver prefers native transport if both present - configProps.put( RESOLVER_FILE_TRANSPORTER_PRIORITY_KEY, "100" ); - configProps.put( RESOLVER_HTTP_TRANSPORTER_PRIORITY_KEY, "100" ); + 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 ) ) { // is needed, as resolver prefers native transport if both present - configProps.put( WAGON_TRANSPORTER_KEY_PRIORITY_KEY, "100" ); + configProps.put( WAGON_TRANSPORTER_KEY_PRIORITY_KEY, RESOLVER_MAX_PRIORITY ); } else if ( !MAVEN_TRANSPORT_AUTO.equals( transport ) ) { diff --git a/pom.xml b/pom.xml index e63d0449b2b4..85ee11ed69ab 100644 --- a/pom.xml +++ b/pom.xml @@ -66,7 +66,7 @@ under the License. 2.0 2.0.0 1.3 - 1.8.0-SNAPSHOT + 1.7.3 1.7.32 2.2.1 1.7.4 From 61dd559a321a7a2badfd9887defec856321683c6 Mon Sep 17 00:00:00 2001 From: Tamas Cservenak Date: Fri, 8 Apr 2022 16:30:53 +0200 Subject: [PATCH 3/3] Update comment --- .../aether/DefaultRepositorySystemSessionFactory.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 b41a81a5f3ad..5616743d1327 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 @@ -244,13 +244,13 @@ else if ( request.isUpdateSnapshots() ) String transport = request.getUserProperties().getProperty( MAVEN_TRANSPORT_KEY, MAVEN_TRANSPORT_WAGON ); if ( MAVEN_TRANSPORT_RESOLVER.equals( transport ) ) { - // Is not needed, as resolver prefers native transport if both present + // 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 ) ) { - // is needed, as resolver prefers native transport if both present + // 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 ) )