diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Constants.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Constants.java index 156366b6e328..096378cfbbe8 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/Constants.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Constants.java @@ -344,22 +344,37 @@ public final class Constants { public static final String MAVEN_RELOCATIONS_ENTRIES = "maven.relocations.entries"; /** - * User property for version filter expression used in session, applied to resolving ranges: a semicolon separated - * list of filters to apply. By default, no version filter is applied (like in Maven 3). + * Builds org.eclipse.aether.collection.VersionFilter instances out of input expression string. + *
+ * Expression is a semicolon separated list of filters to apply. By default, no version filter is applied (like in Maven 3). *
* Supported filters: * + * Every filter expression may have "scope" applied, in form of @G[:A]. Presence of "scope" narrows the + * application of filter to given G or G:A. + *
+ * In case of multiple "similar" rule scopes, user should enlist rules from "most specific" to "least specific". + *
+ * Example filter expression: "h(5);s;e(1)@org.foo:bar" will cause: + * - * Example filter expression: "h(5);s;e(org.foo:bar:1) will cause: ranges are filtered for "top 5" (instead - * full range), snapshots are banned if root project is not a snapshot, and if range for org.foo:bar is - * being processed, version 1 is omitted. Value in this property builds - * org.eclipse.aether.collection.VersionFilter instance. + * Values in this property builds org.eclipse.aether.collection.VersionFilter instance. * - * @since 4.0.0 + * @since 3.10.0 */ @Config public static final String MAVEN_VERSION_FILTER = "maven.session.versionFilter"; diff --git a/compat/maven-compat/src/test/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManagerTest.java b/compat/maven-compat/src/test/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManagerTest.java index 9369de93ba6f..4566f9f80a4f 100644 --- a/compat/maven-compat/src/test/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManagerTest.java +++ b/compat/maven-compat/src/test/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManagerTest.java @@ -30,7 +30,7 @@ import org.apache.maven.artifact.repository.metadata.RepositoryMetadata; import org.codehaus.plexus.logging.Logger; import org.codehaus.plexus.logging.console.ConsoleLogger; -import org.eclipse.aether.internal.impl.DefaultTrackingFileManager; +import org.eclipse.aether.internal.impl.LegacyTrackingFileManager; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -59,7 +59,7 @@ public void setUp() throws Exception { super.setUp(); updateCheckManager = new DefaultUpdateCheckManager( - new ConsoleLogger(Logger.LEVEL_DEBUG, "test"), new DefaultTrackingFileManager()); + new ConsoleLogger(Logger.LEVEL_DEBUG, "test"), new LegacyTrackingFileManager()); } @Test diff --git a/impl/maven-core/src/main/java/org/apache/maven/DefaultMaven.java b/impl/maven-core/src/main/java/org/apache/maven/DefaultMaven.java index 4a64c009a2a6..e734f54f0079 100644 --- a/impl/maven-core/src/main/java/org/apache/maven/DefaultMaven.java +++ b/impl/maven-core/src/main/java/org/apache/maven/DefaultMaven.java @@ -217,6 +217,7 @@ private MavenExecutionResult doExecute(MavenExecutionRequest request) { session.setSession(defaultSessionFactory.newSession(session)); sessionScope.seed(MavenSession.class, session); + sessionScope.seed(RepositorySystemSession.class, closeableSession); // fixed in Maven 3.10.x sessionScope.seed(Session.class, session.getSession()); sessionScope.seed(InternalMavenSession.class, InternalMavenSession.from(session.getSession())); 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 6638b6a46fd9..350031c7703b 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 @@ -27,7 +27,6 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.function.Predicate; import java.util.stream.Collectors; import org.apache.maven.api.Constants; @@ -53,16 +52,9 @@ import org.eclipse.aether.RepositorySystem; import org.eclipse.aether.RepositorySystemSession; import org.eclipse.aether.RepositorySystemSession.SessionBuilder; -import org.eclipse.aether.artifact.Artifact; -import org.eclipse.aether.artifact.DefaultArtifact; -import org.eclipse.aether.collection.VersionFilter; +import org.eclipse.aether.collection.VersionFilterBuilder; import org.eclipse.aether.repository.RepositoryPolicy; import org.eclipse.aether.resolution.ResolutionErrorPolicy; -import org.eclipse.aether.util.graph.version.ChainedVersionFilter; -import org.eclipse.aether.util.graph.version.ContextualSnapshotVersionFilter; -import org.eclipse.aether.util.graph.version.HighestVersionFilter; -import org.eclipse.aether.util.graph.version.LowestVersionFilter; -import org.eclipse.aether.util.graph.version.PredicateVersionFilter; import org.eclipse.aether.util.listener.ChainedRepositoryListener; import org.eclipse.aether.util.repository.AuthenticationBuilder; import org.eclipse.aether.util.repository.ChainedLocalRepositoryManager; @@ -72,8 +64,7 @@ import org.eclipse.aether.util.repository.SimpleArtifactDescriptorPolicy; import org.eclipse.aether.util.repository.SimpleResolutionErrorPolicy; import org.eclipse.aether.version.InvalidVersionSpecificationException; -import org.eclipse.aether.version.Version; -import org.eclipse.aether.version.VersionRange; +import org.eclipse.aether.version.VersionConstraint; import org.eclipse.aether.version.VersionScheme; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -129,6 +120,8 @@ public class DefaultRepositorySystemSessionFactory implements RepositorySystemSe private final Map sessionExtenders; + private final VersionFilterBuilder versionFilterBuilder; + @SuppressWarnings("checkstyle:ParameterNumber") @Inject DefaultRepositorySystemSessionFactory( @@ -137,13 +130,15 @@ public class DefaultRepositorySystemSessionFactory implements RepositorySystemSe RuntimeInformation runtimeInformation, TypeRegistry typeRegistry, VersionScheme versionScheme, - Map sessionExtenders) { + Map sessionExtenders, + VersionFilterBuilder versionFilterBuilder) { this.repoSystem = repoSystem; this.eventSpyDispatcher = eventSpyDispatcher; this.runtimeInformation = runtimeInformation; this.typeRegistry = typeRegistry; this.versionScheme = versionScheme; this.sessionExtenders = sessionExtenders; + this.versionFilterBuilder = versionFilterBuilder; } @Deprecated @@ -192,10 +187,9 @@ public SessionBuilder newRepositorySessionBuilder(MavenExecutionRequest request) sessionBuilder.setArtifactDescriptorPolicy(new SimpleArtifactDescriptorPolicy( request.isIgnoreMissingArtifactDescriptor(), request.isIgnoreInvalidArtifactDescriptor())); - VersionFilter versionFilter = buildVersionFilter(mergedProps.get(Constants.MAVEN_VERSION_FILTER)); - if (versionFilter != null) { - sessionBuilder.setVersionFilter(versionFilter); - } + versionFilterBuilder + .buildVersionFilter(mergedProps.get(Constants.MAVEN_VERSION_FILTER), this::parseVersionConstraint) + .ifPresent(sessionBuilder::setVersionFilter); DefaultMirrorSelector mirrorSelector = new DefaultMirrorSelector(); for (Mirror mirror : request.getMirrors()) { @@ -403,6 +397,14 @@ public SessionBuilder newRepositorySessionBuilder(MavenExecutionRequest request) return sessionBuilder; } + private VersionConstraint parseVersionConstraint(String spec) { + try { + return versionScheme.parseVersionConstraint(spec); + } catch (InvalidVersionSpecificationException e) { + throw new IllegalArgumentException(e); + } + } + private Path resolve(String string) { if (string.startsWith("~/") || string.startsWith("~\\")) { // resolve based on $HOME @@ -416,72 +418,6 @@ private Path resolve(String string) { } } - private VersionFilter buildVersionFilter(String filterExpression) { - ArrayList filters = new ArrayList<>(); - if (filterExpression != null) { - List expressions = Arrays.stream(filterExpression.split(";")) - .filter(s -> s != null && !s.trim().isEmpty()) - .toList(); - for (String expression : expressions) { - if ("h".equals(expression)) { - filters.add(new HighestVersionFilter()); - } else if (expression.startsWith("h(") && expression.endsWith(")")) { - int num = Integer.parseInt(expression.substring(2, expression.length() - 1)); - filters.add(new HighestVersionFilter(num)); - } else if ("l".equals(expression)) { - filters.add(new LowestVersionFilter()); - } else if (expression.startsWith("l(") && expression.endsWith(")")) { - int num = Integer.parseInt(expression.substring(2, expression.length() - 1)); - filters.add(new LowestVersionFilter(num)); - } else if ("s".equals(expression)) { - filters.add(new ContextualSnapshotVersionFilter()); - } else if (expression.startsWith("e(") && expression.endsWith(")")) { - Artifact artifact = new DefaultArtifact(expression.substring(2, expression.length() - 1)); - VersionRange versionRange = - artifact.getVersion().contains(",") ? parseVersionRange(artifact.getVersion()) : null; - Predicate predicate = a -> { - if (artifact.getGroupId().equals(a.getGroupId()) - && artifact.getArtifactId().equals(a.getArtifactId())) { - if (versionRange != null) { - Version v = parseVersion(a.getVersion()); - return !versionRange.containsVersion(v); - } else { - return !artifact.getVersion().equals(a.getVersion()); - } - } - return true; - }; - filters.add(new PredicateVersionFilter(predicate)); - } else { - throw new IllegalArgumentException("Unsupported filter expression: " + expression); - } - } - } - if (filters.isEmpty()) { - return null; - } else if (filters.size() == 1) { - return filters.get(0); - } else { - return ChainedVersionFilter.newInstance(filters); - } - } - - private Version parseVersion(String spec) { - try { - return versionScheme.parseVersion(spec); - } catch (InvalidVersionSpecificationException e) { - throw new RuntimeException(e); - } - } - - private VersionRange parseVersionRange(String spec) { - try { - return versionScheme.parseVersionRange(spec); - } catch (InvalidVersionSpecificationException e) { - throw new RuntimeException(e); - } - } - @SuppressWarnings({"unchecked", "rawtypes"}) private Map createMergedProperties(MavenExecutionRequest request) { // this throwaway map is really ONLY to get config from (profiles + env + system + user) diff --git a/impl/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java b/impl/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java index fad79cc94191..760ea73809a1 100644 --- a/impl/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java +++ b/impl/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java @@ -44,6 +44,7 @@ import org.eclipse.aether.artifact.DefaultArtifact; import org.eclipse.aether.collection.CollectRequest; import org.eclipse.aether.collection.DependencyCollectionException; +import org.eclipse.aether.collection.VersionFilterBuilder; import org.eclipse.aether.graph.DependencyFilter; import org.eclipse.aether.graph.DependencyNode; import org.eclipse.aether.repository.RemoteRepository; @@ -237,6 +238,7 @@ private DependencyResult resolveInternal( try { DefaultRepositorySystemSession pluginSession = new DefaultRepositorySystemSession(session); + pluginSession.setConfigProperty(VersionFilterBuilder.VERSION_FILTER_SUPPRESSED, Boolean.TRUE.toString()); pluginSession.setDependencySelector(session.getDependencySelector()); pluginSession.setDependencyGraphTransformer(session.getDependencyGraphTransformer()); diff --git a/impl/maven-core/src/main/java/org/apache/maven/session/scope/internal/SessionScopeModule.java b/impl/maven-core/src/main/java/org/apache/maven/session/scope/internal/SessionScopeModule.java index a9e812df578a..5519506fe1bd 100644 --- a/impl/maven-core/src/main/java/org/apache/maven/session/scope/internal/SessionScopeModule.java +++ b/impl/maven-core/src/main/java/org/apache/maven/session/scope/internal/SessionScopeModule.java @@ -26,6 +26,7 @@ import org.apache.maven.api.Session; import org.apache.maven.execution.MavenSession; import org.apache.maven.internal.impl.InternalMavenSession; +import org.eclipse.aether.RepositorySystemSession; /** * SessionScopeModule @@ -52,6 +53,9 @@ protected void configure() { bind(MavenSession.class) .toProvider(SessionScope.seededKeyProvider(MavenSession.class)) .in(scope); + bind(RepositorySystemSession.class) + .toProvider(SessionScope.seededKeyProvider(RepositorySystemSession.class)) + .in(scope); bind(Session.class) .toProvider(SessionScope.seededKeyProvider(Session.class)) .in(scope); 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 8b80dc0efd60..111fb3548b56 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 @@ -40,19 +40,13 @@ import org.codehaus.plexus.testing.PlexusTest; import org.codehaus.plexus.util.xml.Xpp3Dom; import org.eclipse.aether.ConfigurationProperties; -import org.eclipse.aether.collection.VersionFilter; +import org.eclipse.aether.collection.VersionFilterBuilder; import org.eclipse.aether.repository.RepositoryPolicy; -import org.eclipse.aether.util.graph.version.ChainedVersionFilter; -import org.eclipse.aether.util.graph.version.ContextualSnapshotVersionFilter; -import org.eclipse.aether.util.graph.version.HighestVersionFilter; -import org.eclipse.aether.util.graph.version.LowestVersionFilter; -import org.eclipse.aether.util.graph.version.PredicateVersionFilter; import org.eclipse.aether.version.VersionScheme; import org.junit.jupiter.api.Test; import static org.codehaus.plexus.testing.PlexusExtension.getBasedir; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertInstanceOf; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertThrowsExactly; @@ -80,6 +74,9 @@ public class DefaultRepositorySystemSessionFactoryTest { @Inject protected VersionScheme versionScheme; + @Inject + protected VersionFilterBuilder versionFilterBuilder; + @Test void isNoSnapshotUpdatesTest() throws InvalidRepositoryException { DefaultRepositorySystemSessionFactory systemSessionFactory = new DefaultRepositorySystemSessionFactory( @@ -88,7 +85,8 @@ void isNoSnapshotUpdatesTest() throws InvalidRepositoryException { information, defaultTypeRegistry, versionScheme, - Collections.emptyMap()); + Collections.emptyMap(), + versionFilterBuilder); MavenExecutionRequest request = new DefaultMavenExecutionRequest(); request.setLocalRepository(getLocalRepository()); @@ -110,7 +108,8 @@ void isSnapshotUpdatesTest() throws InvalidRepositoryException { information, defaultTypeRegistry, versionScheme, - Collections.emptyMap()); + Collections.emptyMap(), + versionFilterBuilder); MavenExecutionRequest request = new DefaultMavenExecutionRequest(); request.setLocalRepository(getLocalRepository()); @@ -144,7 +143,8 @@ void wagonProviderConfigurationTest() throws InvalidRepositoryException { information, defaultTypeRegistry, versionScheme, - Collections.emptyMap()); + Collections.emptyMap(), + versionFilterBuilder); PlexusConfiguration plexusConfiguration = (PlexusConfiguration) systemSessionFactory .newRepositorySession(request) @@ -186,7 +186,8 @@ void httpConfigurationWithHttpHeadersTest() throws InvalidRepositoryException { information, defaultTypeRegistry, versionScheme, - Collections.emptyMap()); + Collections.emptyMap(), + versionFilterBuilder); Map headers = (Map) systemSessionFactory .newRepositorySession(request) @@ -222,7 +223,8 @@ void connectTimeoutConfigurationTest() throws InvalidRepositoryException { information, defaultTypeRegistry, versionScheme, - Collections.emptyMap()); + Collections.emptyMap(), + versionFilterBuilder); int connectionTimeout = (Integer) systemSessionFactory .newRepositorySession(request) @@ -262,7 +264,8 @@ void connectionTimeoutFromHttpConfigurationTest() throws InvalidRepositoryExcept information, defaultTypeRegistry, versionScheme, - Collections.emptyMap()); + Collections.emptyMap(), + versionFilterBuilder); int connectionTimeout = (Integer) systemSessionFactory .newRepositorySession(request) @@ -296,7 +299,8 @@ void requestTimeoutConfigurationTest() throws InvalidRepositoryException { information, defaultTypeRegistry, versionScheme, - Collections.emptyMap()); + Collections.emptyMap(), + versionFilterBuilder); int requestTimeout = (Integer) systemSessionFactory .newRepositorySession(request) @@ -336,7 +340,8 @@ void readTimeoutFromHttpConfigurationTest() throws InvalidRepositoryException { information, defaultTypeRegistry, versionScheme, - Collections.emptyMap()); + Collections.emptyMap(), + versionFilterBuilder); int requestTimeout = (Integer) systemSessionFactory .newRepositorySession(request) @@ -353,7 +358,8 @@ void transportConfigurationTest() throws InvalidRepositoryException { information, defaultTypeRegistry, versionScheme, - Collections.emptyMap()); + Collections.emptyMap(), + versionFilterBuilder); MavenExecutionRequest request = new DefaultMavenExecutionRequest(); request.setLocalRepository(getLocalRepository()); @@ -390,64 +396,6 @@ void transportConfigurationTest() throws InvalidRepositoryException { properties.remove("maven.resolver.transport"); } - @Test - void versionFilteringTest() throws InvalidRepositoryException { - DefaultRepositorySystemSessionFactory systemSessionFactory = new DefaultRepositorySystemSessionFactory( - aetherRepositorySystem, - eventSpyDispatcher, - information, - defaultTypeRegistry, - versionScheme, - Collections.emptyMap()); - - MavenExecutionRequest request = new DefaultMavenExecutionRequest(); - request.setLocalRepository(getLocalRepository()); - - VersionFilter versionFilter; - - // single one - request.getUserProperties().put("maven.session.versionFilter", "s"); - versionFilter = systemSessionFactory.newRepositorySession(request).getVersionFilter(); - assertNotNull(versionFilter); - assertInstanceOf(ContextualSnapshotVersionFilter.class, versionFilter); - - request.getUserProperties().put("maven.session.versionFilter", "h"); - versionFilter = systemSessionFactory.newRepositorySession(request).getVersionFilter(); - assertNotNull(versionFilter); - assertInstanceOf(HighestVersionFilter.class, versionFilter); - - request.getUserProperties().put("maven.session.versionFilter", "h(5)"); - versionFilter = systemSessionFactory.newRepositorySession(request).getVersionFilter(); - assertNotNull(versionFilter); - assertInstanceOf(HighestVersionFilter.class, versionFilter); - - request.getUserProperties().put("maven.session.versionFilter", "l"); - versionFilter = systemSessionFactory.newRepositorySession(request).getVersionFilter(); - assertNotNull(versionFilter); - assertInstanceOf(LowestVersionFilter.class, versionFilter); - - request.getUserProperties().put("maven.session.versionFilter", "l(5)"); - versionFilter = systemSessionFactory.newRepositorySession(request).getVersionFilter(); - assertNotNull(versionFilter); - assertInstanceOf(LowestVersionFilter.class, versionFilter); - - request.getUserProperties().put("maven.session.versionFilter", "e(g:a:v)"); - versionFilter = systemSessionFactory.newRepositorySession(request).getVersionFilter(); - assertNotNull(versionFilter); - assertInstanceOf(PredicateVersionFilter.class, versionFilter); - - request.getUserProperties().put("maven.session.versionFilter", "e(g:a:[1,2])"); - versionFilter = systemSessionFactory.newRepositorySession(request).getVersionFilter(); - assertNotNull(versionFilter); - assertInstanceOf(PredicateVersionFilter.class, versionFilter); - - // chained - request.getUserProperties().put("maven.session.versionFilter", "h(5);s;e(org.foo:bar:1)"); - versionFilter = systemSessionFactory.newRepositorySession(request).getVersionFilter(); - assertNotNull(versionFilter); - assertInstanceOf(ChainedVersionFilter.class, versionFilter); - } - protected ArtifactRepository getLocalRepository() throws InvalidRepositoryException { File repoDir = new File(getBasedir(), "target/local-repo").getAbsoluteFile(); diff --git a/impl/maven-impl/src/main/java/org/apache/maven/impl/standalone/RepositorySystemSupplier.java b/impl/maven-impl/src/main/java/org/apache/maven/impl/standalone/RepositorySystemSupplier.java index 77e7a98e767a..91bd3b677f5a 100644 --- a/impl/maven-impl/src/main/java/org/apache/maven/impl/standalone/RepositorySystemSupplier.java +++ b/impl/maven-impl/src/main/java/org/apache/maven/impl/standalone/RepositorySystemSupplier.java @@ -37,6 +37,7 @@ import org.eclipse.aether.impl.LocalRepositoryProvider; import org.eclipse.aether.impl.MetadataGeneratorFactory; import org.eclipse.aether.impl.MetadataResolver; +import org.eclipse.aether.impl.NamedLockFactorySelector; import org.eclipse.aether.impl.OfflineController; import org.eclipse.aether.impl.RemoteRepositoryFilterManager; import org.eclipse.aether.impl.RemoteRepositoryManager; @@ -68,7 +69,6 @@ import org.eclipse.aether.internal.impl.DefaultRepositorySystem; import org.eclipse.aether.internal.impl.DefaultRepositorySystemLifecycle; import org.eclipse.aether.internal.impl.DefaultRepositorySystemValidator; -import org.eclipse.aether.internal.impl.DefaultTrackingFileManager; import org.eclipse.aether.internal.impl.DefaultTransporterProvider; import org.eclipse.aether.internal.impl.DefaultUpdateCheckManager; import org.eclipse.aether.internal.impl.DefaultUpdatePolicyAnalyzer; @@ -78,6 +78,7 @@ import org.eclipse.aether.internal.impl.Maven2RepositoryLayoutFactory; import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory; import org.eclipse.aether.internal.impl.TrackingFileManager; +import org.eclipse.aether.internal.impl.TrackingFileManagerSupplier; import org.eclipse.aether.internal.impl.checksum.DefaultChecksumAlgorithmFactorySelector; import org.eclipse.aether.internal.impl.checksum.Md5ChecksumAlgorithmFactory; import org.eclipse.aether.internal.impl.checksum.Sha1ChecksumAlgorithmFactory; @@ -95,6 +96,7 @@ import org.eclipse.aether.internal.impl.filter.GroupIdRemoteRepositoryFilterSource; import org.eclipse.aether.internal.impl.filter.PrefixesLockingInhibitorFactory; import org.eclipse.aether.internal.impl.filter.PrefixesRemoteRepositoryFilterSource; +import org.eclipse.aether.internal.impl.named.DefaultNamedLockFactorySelector; import org.eclipse.aether.internal.impl.offline.OfflinePipelineRepositoryConnectorFactory; import org.eclipse.aether.internal.impl.synccontext.DefaultSyncContextFactory; import org.eclipse.aether.internal.impl.synccontext.named.NameMapper; @@ -188,8 +190,8 @@ static RepositoryKeyFunctionFactory newRepositoryKeyFunctionFactory() { @Singleton @Provides - static TrackingFileManager newTrackingFileManager() { - return new DefaultTrackingFileManager(); + static TrackingFileManager newTrackingFileManager(NamedLockFactorySelector namedLockFactorySelector) { + return new TrackingFileManagerSupplier(namedLockFactorySelector).get(); } @Singleton @@ -376,14 +378,20 @@ static LockingInhibitorFactory newPrefixesLockingInhibitorFactory() { return new PrefixesLockingInhibitorFactory(); } + @Singleton + @Provides + static NamedLockFactorySelector newNamedLockFactorySelector( + Map factories, RepositorySystemLifecycle lifecycle) { + return new DefaultNamedLockFactorySelector(factories, lifecycle); + } + @Singleton @Provides static NamedLockFactoryAdapterFactory newNamedLockFactoryAdapterFactory( - Map factories, + NamedLockFactorySelector namedLockFactorySelector, Map nameMappers, - Map lockingInhibitorFactories, - RepositorySystemLifecycle lifecycle) { - return new NamedLockFactoryAdapterFactoryImpl(factories, nameMappers, lockingInhibitorFactories, lifecycle); + Map lockingInhibitorFactories) { + return new NamedLockFactoryAdapterFactoryImpl(namedLockFactorySelector, nameMappers, lockingInhibitorFactories); } @Singleton diff --git a/impl/maven-testing/src/main/java/org/apache/maven/api/plugin/testing/stubs/RepositorySystemSupplier.java b/impl/maven-testing/src/main/java/org/apache/maven/api/plugin/testing/stubs/RepositorySystemSupplier.java index 03483142e818..a2b3b959d47d 100644 --- a/impl/maven-testing/src/main/java/org/apache/maven/api/plugin/testing/stubs/RepositorySystemSupplier.java +++ b/impl/maven-testing/src/main/java/org/apache/maven/api/plugin/testing/stubs/RepositorySystemSupplier.java @@ -70,6 +70,7 @@ import org.eclipse.aether.impl.LocalRepositoryProvider; import org.eclipse.aether.impl.MetadataGeneratorFactory; import org.eclipse.aether.impl.MetadataResolver; +import org.eclipse.aether.impl.NamedLockFactorySelector; import org.eclipse.aether.impl.OfflineController; import org.eclipse.aether.impl.RemoteRepositoryFilterManager; import org.eclipse.aether.impl.RemoteRepositoryManager; @@ -101,7 +102,6 @@ import org.eclipse.aether.internal.impl.DefaultRepositorySystem; import org.eclipse.aether.internal.impl.DefaultRepositorySystemLifecycle; import org.eclipse.aether.internal.impl.DefaultRepositorySystemValidator; -import org.eclipse.aether.internal.impl.DefaultTrackingFileManager; import org.eclipse.aether.internal.impl.DefaultTransporterProvider; import org.eclipse.aether.internal.impl.DefaultUpdateCheckManager; import org.eclipse.aether.internal.impl.DefaultUpdatePolicyAnalyzer; @@ -111,6 +111,7 @@ import org.eclipse.aether.internal.impl.Maven2RepositoryLayoutFactory; import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory; import org.eclipse.aether.internal.impl.TrackingFileManager; +import org.eclipse.aether.internal.impl.TrackingFileManagerSupplier; import org.eclipse.aether.internal.impl.checksum.DefaultChecksumAlgorithmFactorySelector; import org.eclipse.aether.internal.impl.checksum.Md5ChecksumAlgorithmFactory; import org.eclipse.aether.internal.impl.checksum.Sha1ChecksumAlgorithmFactory; @@ -128,6 +129,7 @@ import org.eclipse.aether.internal.impl.filter.GroupIdRemoteRepositoryFilterSource; import org.eclipse.aether.internal.impl.filter.PrefixesLockingInhibitorFactory; import org.eclipse.aether.internal.impl.filter.PrefixesRemoteRepositoryFilterSource; +import org.eclipse.aether.internal.impl.named.DefaultNamedLockFactorySelector; import org.eclipse.aether.internal.impl.offline.OfflinePipelineRepositoryConnectorFactory; import org.eclipse.aether.internal.impl.resolution.TrustedChecksumsArtifactResolverPostProcessor; import org.eclipse.aether.internal.impl.synccontext.DefaultSyncContextFactory; @@ -245,7 +247,7 @@ public final TrackingFileManager getTrackingFileManager() { } protected TrackingFileManager createTrackingFileManager() { - return new DefaultTrackingFileManager(); + return new TrackingFileManagerSupplier(getNamedLockFactorySelector()).get(); } private LocalPathComposer localPathComposer; @@ -429,12 +431,23 @@ public final NamedLockFactoryAdapterFactory getNamedLockFactoryAdapterFactory() return namedLockFactoryAdapterFactory; } + private NamedLockFactorySelector namedLockFactorySelector; + + public final NamedLockFactorySelector getNamedLockFactorySelector() { + checkClosed(); + if (namedLockFactorySelector == null) { + namedLockFactorySelector = createNamedLockFactorySelector(); + } + return namedLockFactorySelector; + } + + protected NamedLockFactorySelector createNamedLockFactorySelector() { + return new DefaultNamedLockFactorySelector(getNamedLockFactories(), getRepositorySystemLifecycle()); + } + protected NamedLockFactoryAdapterFactory createNamedLockFactoryAdapterFactory() { return new NamedLockFactoryAdapterFactoryImpl( - getNamedLockFactories(), - getNameMappers(), - getLockingInhibitorFactories(), - getRepositorySystemLifecycle()); + getNamedLockFactorySelector(), getNameMappers(), getLockingInhibitorFactories()); } private SyncContextFactory syncContextFactory; diff --git a/pom.xml b/pom.xml index d17921c6f9b9..d002d8bdedb0 100644 --- a/pom.xml +++ b/pom.xml @@ -164,7 +164,7 @@ under the License. 1.29 2.1.0 4.1.1 - 2.0.16 + 2.0.18 4.1.0 1.0.0 2.0.18