diff --git a/impl/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java b/impl/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java index a99cbc2780d8..f4988fecf8f5 100644 --- a/impl/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java +++ b/impl/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java @@ -83,6 +83,8 @@ @Singleton public class DefaultRepositorySystemSessionFactory implements RepositorySystemSessionFactory { + private static final String MAVEN_RESOLVER_BF_COLLECTOR_SKIPPER = "aether.dependencyCollector.bf.skipper"; + public static final String MAVEN_RESOLVER_TRANSPORT_DEFAULT = "default"; public static final String MAVEN_RESOLVER_TRANSPORT_WAGON = "wagon"; @@ -194,6 +196,10 @@ public SessionBuilder newRepositorySessionBuilder(MavenExecutionRequest request) configProps.put(ConfigurationProperties.INTERACTIVE, request.isInteractiveMode()); configProps.put("maven.startTime", request.getStartTime()); configProps.put(Constants.MAVEN_START_INSTANT, request.getStartInstant()); + if (!mergedProps.containsKey(MAVEN_RESOLVER_BF_COLLECTOR_SKIPPER)) { + // Keep dependencies of the eventual version-range winner when another version was visited first. + configProps.put(MAVEN_RESOLVER_BF_COLLECTOR_SKIPPER, "versioned"); + } sessionBuilder.setOffline(request.isOffline()); sessionBuilder.setChecksumPolicy(request.getGlobalChecksumPolicy()); diff --git a/impl/maven-core/src/test/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactoryTest.java b/impl/maven-core/src/test/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactoryTest.java index aae3f8c5a352..4ff95dab7ddd 100644 --- a/impl/maven-core/src/test/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactoryTest.java +++ b/impl/maven-core/src/test/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactoryTest.java @@ -163,6 +163,37 @@ void isSnapshotUpdatesTest() throws InvalidRepositoryException { systemSessionFactory.newRepositorySession(request).getUpdatePolicy()); } + @Test + void versionedDependencyCollectorSkipperIsDefaultAndCanBeOverridden() throws InvalidRepositoryException { + DefaultRepositorySystemSessionFactory systemSessionFactory = new DefaultRepositorySystemSessionFactory( + aetherRepositorySystem, + eventSpyDispatcher, + information, + defaultTypeRegistry, + versionScheme, + Collections.emptyMap(), + versionFilterBuilder); + + MavenExecutionRequest request = new DefaultMavenExecutionRequest(); + request.setLocalRepository(getLocalRepository()); + assertEquals( + "versioned", + systemSessionFactory + .newRepositorySession(request) + .getConfigProperties() + .get("aether.dependencyCollector.bf.skipper")); + + Properties properties = new Properties(); + properties.setProperty("aether.dependencyCollector.bf.skipper", "versionless"); + request.setSystemProperties(properties); + assertEquals( + "versionless", + systemSessionFactory + .newRepositorySession(request) + .getConfigProperties() + .get("aether.dependencyCollector.bf.skipper")); + } + @Test void wagonProviderConfigurationTest() throws InvalidRepositoryException { Server server = new Server();