This is an automated email from the ASF dual-hosted git repository. sjaranowski pushed a commit to branch MNG-7590 in repository https://gitbox.apache.org/repos/asf/maven.git
commit 6b3087c39e5ff0866ecb4bac4a32a4ba219bfb39 Author: Slawomir Jaranowski <s.jaranow...@gmail.com> AuthorDate: Sat Nov 5 17:21:11 2022 +0100 [MNG-7590] Allow to configure resolver by properties in settings.xml --- .../DefaultRepositorySystemSessionFactory.java | 26 ++++++++++++++++++++++ 1 file changed, 26 insertions(+) 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 e238e3bf6..17d935276 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 @@ -25,6 +25,7 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -42,6 +43,7 @@ import org.apache.maven.execution.MavenExecutionRequest; import org.apache.maven.feature.Features; import org.apache.maven.internal.xml.XmlPlexusConfiguration; import org.apache.maven.internal.xml.Xpp3Dom; +import org.apache.maven.model.ModelBase; import org.apache.maven.model.building.TransformerContext; import org.apache.maven.repository.internal.MavenRepositorySystemUtils; import org.apache.maven.rtinfo.RuntimeInformation; @@ -150,6 +152,8 @@ public class DefaultRepositorySystemSessionFactory configProps.put( ConfigurationProperties.USER_AGENT, getUserAgent() ); configProps.put( ConfigurationProperties.INTERACTIVE, request.isInteractiveMode() ); configProps.put( "maven.startTime", request.getStartTime() ); + // First add properties populated from settings.xml + configProps.putAll( getConfigFromRequestProfiles( request ) ); // Resolver's ConfigUtils solely rely on config properties, that is why we need to add both here as well. configProps.putAll( request.getSystemProperties() ); configProps.putAll( request.getUserProperties() ); @@ -313,6 +317,28 @@ public class DefaultRepositorySystemSessionFactory return session; } + private Map<?, ?> getConfigFromRequestProfiles( MavenExecutionRequest request ) + { + + HashSet<String> activeProfileId = new HashSet<>( request.getProfileActivation().getRequiredActiveProfileIds() ); + activeProfileId.addAll( request.getProfileActivation().getOptionalActiveProfileIds() ); + + return request.getProfiles().stream() + .filter( profile -> activeProfileId.contains( profile.getId() ) ) + .map( ModelBase::getProperties ) + .flatMap( properties -> properties.entrySet().stream() ) + .filter( entry -> isPropertyForResolver( entry.getKey().toString() ) ) + .collect( + Collectors.toMap( Map.Entry::getKey, Map.Entry::getValue, ( k1, k2 ) -> k2 ) ); + } + + private boolean isPropertyForResolver( String propertyName ) + { + return propertyName != null + && ( propertyName.startsWith( "maven.resolver." ) || propertyName.startsWith( "aether." ) ); + } + + private String getUserAgent() { String version = runtimeInformation.getMavenVersion();