This is an automated email from the ASF dual-hosted git repository.
cstamas pushed a commit to branch maven-4.0.x
in repository https://gitbox.apache.org/repos/asf/maven.git
The following commit(s) were added to refs/heads/maven-4.0.x by this push:
new 537cb7eb83 Resolver 2018 (#12112) (#12133)
537cb7eb83 is described below
commit 537cb7eb835a60693956595b36985f14c54c0a83
Author: Tamas Cservenak <[email protected]>
AuthorDate: Wed May 20 14:46:08 2026 +0200
Resolver 2018 (#12112) (#12133)
Bumps `resolverVersion` from 2.0.16 to 2.0.18. Also some related changes.
Changes:
* updates Resolver to 2.0.18
* dropped any existing filter building, is happening now in new component
in Resolver 2.0.18 (same as in Maven 3.10.x)
* user configured filter is NOT applied to plugin resolution
* Legacy code uses `LegacyTrackingFileManager` the rest
`TrackingFileManagerSupplier`
* Expose `RepositorySystemSession` as session scoped, same as Maven 3.10.x
(in fact, Maven 3.9.x did seed it, but Module by mistake never exposed it --
this is one of changes in Maven 3.10.x)
Backport of ef8ae39f6d5d917b74d78b030eec5d84359cbc46
---
.../main/java/org/apache/maven/api/Constants.java | 37 +++++---
.../legacy/DefaultUpdateCheckManagerTest.java | 4 +-
.../main/java/org/apache/maven/DefaultMaven.java | 1 +
.../DefaultRepositorySystemSessionFactory.java | 100 ++++-----------------
.../DefaultPluginDependenciesResolver.java | 2 +
.../session/scope/internal/SessionScopeModule.java | 4 +
.../DefaultRepositorySystemSessionFactoryTest.java | 96 +++++---------------
.../impl/standalone/RepositorySystemSupplier.java | 22 +++--
.../testing/stubs/RepositorySystemSupplier.java | 25 ++++--
pom.xml | 2 +-
10 files changed, 110 insertions(+), 183 deletions(-)
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 156366b6e3..096378cfbb 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 <code>org.eclipse.aether.collection.VersionFilter</code>
instances out of input expression string.
+ * <br/>
+ * Expression is a semicolon separated list of filters to apply. By
default, no version filter is applied (like in Maven 3).
* <br/>
* Supported filters:
* <ul>
- * <li>"h" or "h(num)" - highest version or top list of highest ones
filter</li>
- * <li>"l" or "l(num)" - lowest version or bottom list of lowest ones
filter</li>
- * <li>"s" - contextual snapshot filter</li>
- * <li>"e(G:A:V)" - predicate filter (leaves out G:A:V from range, if
hit, V can be range)</li>
+ * <li><code>"s"</code> - contextual snapshot filter (project version
decides are snapshots allowed or not)</li>
+ * <li><code>"nosnapshot"</code> - unconditional snapshot filter (no
snapshot versions selected from ranges)</li>
+ * <li><code>"norelease"</code> - unconditional release filter (no
release versions selected from ranges)</li>
+ * <li><code>"nopreview"</code> - unconditional preview filter (no
preview versions selected from ranges)</li>
+ * <li><code>"noprerelease"</code> - unconditional pre-release filter
(no preview and rc/cr versions selected from ranges)</li>
+ * <li><code>"noqualifier"</code> - unconditional any-qualifier filter
(no version with any qualifier selected from ranges)</li>
+ * <li><code>"h"</code> (shorthand of <code>h(1)</code>) or
<code>"h(num)"</code> - highest N version (based on version ordering)</li>
+ * <li><code>"l"</code> (shorthand of <code>l(1)</code>) or
<code>"l(num)"</code> - lowest N version (based on version ordering)</li>
+ * <li><code>"e(V)"</code> - exclusion filter (excludes versions
matching V version constraint)</li>
+ * <li><code>"i(V)"</code> - inclusion filter (includes versions
matching V version constraint)</li>
+ * </ul>
+ * Every filter expression may have "scope" applied, in form of
<code>@G[:A]</code>. Presence of "scope" narrows the
+ * application of filter to given G or G:A.
+ * <br/>
+ * In case of multiple "similar" rule scopes, user should enlist rules
from "most specific" to "least specific".
+ * <br/>
+ * Example filter expression: <code>"h(5);s;e(1)@org.foo:bar"</code> will
cause:
+ * <ul>
+ * <li>ranges are filtered for "top 5" (instead of full range)</li>
+ * <li>snapshots are banned if root project is not a snapshot</li>
+ * <li>if range for <code>org.foo:bar</code> is being processed,
version 1 is omitted</li>
* </ul>
- * Example filter expression: <code>"h(5);s;e(org.foo:bar:1)</code> 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 <code>org.foo:bar</code> is
- * being processed, version 1 is omitted. Value in this property builds
- * <code>org.eclipse.aether.collection.VersionFilter</code> instance.
+ * Values in this property builds
<code>org.eclipse.aether.collection.VersionFilter</code> 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 9369de93ba..4566f9f80a 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 4a64c009a2..e734f54f00 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 6638b6a46f..350031c770 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<String, RepositorySystemSessionExtender>
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<String, RepositorySystemSessionExtender> sessionExtenders) {
+ Map<String, RepositorySystemSessionExtender> 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<VersionFilter> filters = new ArrayList<>();
- if (filterExpression != null) {
- List<String> 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<Artifact> 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<String, String> 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 fad79cc941..760ea73809 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 a9e812df57..5519506fe1 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 8b80dc0efd..111fb3548b 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<String, String> headers = (Map<String, String>)
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 77e7a98e76..91bd3b677f 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<String, NamedLockFactory> factories, RepositorySystemLifecycle
lifecycle) {
+ return new DefaultNamedLockFactorySelector(factories, lifecycle);
+ }
+
@Singleton
@Provides
static NamedLockFactoryAdapterFactory newNamedLockFactoryAdapterFactory(
- Map<String, NamedLockFactory> factories,
+ NamedLockFactorySelector namedLockFactorySelector,
Map<String, NameMapper> nameMappers,
- Map<String, LockingInhibitorFactory> lockingInhibitorFactories,
- RepositorySystemLifecycle lifecycle) {
- return new NamedLockFactoryAdapterFactoryImpl(factories, nameMappers,
lockingInhibitorFactories, lifecycle);
+ Map<String, LockingInhibitorFactory> 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 03483142e8..a2b3b959d4 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 d17921c6f9..d002d8bded 100644
--- a/pom.xml
+++ b/pom.xml
@@ -164,7 +164,7 @@ under the License.
<plexusInterpolationVersion>1.29</plexusInterpolationVersion>
<plexusTestingVersion>2.1.0</plexusTestingVersion>
<plexusXmlVersion>4.1.1</plexusXmlVersion>
- <resolverVersion>2.0.16</resolverVersion>
+ <resolverVersion>2.0.18</resolverVersion>
<securityDispatcherVersion>4.1.0</securityDispatcherVersion>
<sisuVersion>1.0.0</sisuVersion>
<slf4jVersion>2.0.18</slf4jVersion>