From f8e50211bce12ddacdc70558bce2028094f29002 Mon Sep 17 00:00:00 2001 From: Tamas Cservenak Date: Tue, 19 Dec 2023 11:50:56 +0100 Subject: [PATCH 1/6] [MNG-7960] Version filtering Make Maven more friendly (and tunable) when ranges are being used. There new options are merely affecting range processing, allowing different narrowing strategies. --- https://issues.apache.org/jira/browse/MNG-7960 --- ...DefaultRepositorySystemSessionFactory.java | 108 +++++++++++++++++- ...ultRepositorySystemSessionFactoryTest.java | 31 +++-- 2 files changed, 129 insertions(+), 10 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 a3e718f08b63..141ee5ed683a 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 @@ -30,6 +30,7 @@ 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.RepositoryUtils; @@ -59,6 +60,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.repository.AuthenticationContext; import org.eclipse.aether.repository.AuthenticationSelector; import org.eclipse.aether.repository.ProxySelector; @@ -66,6 +70,7 @@ import org.eclipse.aether.repository.RepositoryPolicy; import org.eclipse.aether.repository.WorkspaceReader; import org.eclipse.aether.resolution.ResolutionErrorPolicy; +import org.eclipse.aether.util.graph.version.*; import org.eclipse.aether.util.listener.ChainedRepositoryListener; import org.eclipse.aether.util.repository.AuthenticationBuilder; import org.eclipse.aether.util.repository.ChainedLocalRepositoryManager; @@ -74,6 +79,10 @@ import org.eclipse.aether.util.repository.DefaultProxySelector; 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.VersionScheme; import org.eclipse.sisu.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -83,6 +92,25 @@ */ @Named public class DefaultRepositorySystemSessionFactory { + /** + * User property for version filters expression, a comma separated list of filters to apply. By default no version + * filter is applied (like in Maven 3). + *

+ * Supported filters: + *

+ * Example filter expression: {@code "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 {@code org.foo:bar} is + * being processed, version 1 is omitted. + * + * @since 4.0.0 + */ + private static final String MAVEN_VERSION_FILTERS = "maven.versionFilters"; + /** * User property for chained LRM: list of "tail" local repository paths (separated by comma), to be used with * {@link ChainedLocalRepositoryManager}. @@ -148,6 +176,8 @@ public class DefaultRepositorySystemSessionFactory { private final TypeRegistry typeRegistry; + private final VersionScheme versionScheme; + @SuppressWarnings("checkstyle:ParameterNumber") @Inject public DefaultRepositorySystemSessionFactory( @@ -157,7 +187,8 @@ public DefaultRepositorySystemSessionFactory( SettingsDecrypter settingsDecrypter, EventSpyDispatcher eventSpyDispatcher, RuntimeInformation runtimeInformation, - TypeRegistry typeRegistry) { + TypeRegistry typeRegistry, + VersionScheme versionScheme) { this.artifactHandlerManager = artifactHandlerManager; this.repoSystem = repoSystem; this.workspaceRepository = workspaceRepository; @@ -165,6 +196,7 @@ public DefaultRepositorySystemSessionFactory( this.eventSpyDispatcher = eventSpyDispatcher; this.runtimeInformation = runtimeInformation; this.typeRegistry = typeRegistry; + this.versionScheme = versionScheme; } @Deprecated @@ -208,6 +240,11 @@ public SessionBuilder newRepositorySessionBuilder(MavenExecutionRequest request) session.setArtifactDescriptorPolicy(new SimpleArtifactDescriptorPolicy( request.isIgnoreMissingArtifactDescriptor(), request.isIgnoreInvalidArtifactDescriptor())); + VersionFilter versionFilter = buildVersionFilter(configProps); + if (versionFilter != null) { + session.setVersionFilter(versionFilter); + } + session.setArtifactTypeRegistry(RepositoryUtils.newArtifactTypeRegistry(artifactHandlerManager)); session.setWorkspaceReader( @@ -406,6 +443,75 @@ public SessionBuilder newRepositorySessionBuilder(MavenExecutionRequest request) return session; } + private VersionFilter buildVersionFilter(Map configProps) { + ArrayList filters = new ArrayList<>(); + String filterExpression = (String) configProps.get(MAVEN_VERSION_FILTERS); + if (filterExpression != null) { + List expressions = Arrays.stream(filterExpression.split(",")) + .filter(s -> s != null && !s.trim().isEmpty()) + .collect(Collectors.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)); + // MRESOLVER-450 + // 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)); + // MRESOLVER-450 + // 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); + } + } + private Map getPropertiesFromRequestedProfiles(MavenExecutionRequest request) { HashSet activeProfileId = new HashSet<>(request.getProfileActivation().getRequiredActiveProfileIds()); diff --git a/maven-core/src/test/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactoryTest.java b/maven-core/src/test/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactoryTest.java index f3e359310ecf..43619467f99a 100644 --- a/maven-core/src/test/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactoryTest.java +++ b/maven-core/src/test/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactoryTest.java @@ -42,6 +42,7 @@ import org.codehaus.plexus.util.xml.Xpp3Dom; import org.eclipse.aether.ConfigurationProperties; import org.eclipse.aether.repository.RepositoryPolicy; +import org.eclipse.aether.version.VersionScheme; import org.junit.jupiter.api.Test; import static org.codehaus.plexus.testing.PlexusExtension.getBasedir; @@ -76,6 +77,9 @@ public class DefaultRepositorySystemSessionFactoryTest { @Inject protected DefaultTypeRegistry defaultTypeRegistry; + @Inject + protected VersionScheme versionScheme; + @Test void isNoSnapshotUpdatesTest() throws InvalidRepositoryException { DefaultRepositorySystemSessionFactory systemSessionFactory = new DefaultRepositorySystemSessionFactory( @@ -85,7 +89,8 @@ void isNoSnapshotUpdatesTest() throws InvalidRepositoryException { settingsDecrypter, eventSpyDispatcher, information, - defaultTypeRegistry); + defaultTypeRegistry, + versionScheme); MavenExecutionRequest request = new DefaultMavenExecutionRequest(); request.setLocalRepository(getLocalRepository()); @@ -108,7 +113,8 @@ void isSnapshotUpdatesTest() throws InvalidRepositoryException { settingsDecrypter, eventSpyDispatcher, information, - defaultTypeRegistry); + defaultTypeRegistry, + versionScheme); MavenExecutionRequest request = new DefaultMavenExecutionRequest(); request.setLocalRepository(getLocalRepository()); @@ -143,7 +149,8 @@ void wagonProviderConfigurationTest() throws InvalidRepositoryException { settingsDecrypter, eventSpyDispatcher, information, - defaultTypeRegistry); + defaultTypeRegistry, + versionScheme); PlexusConfiguration plexusConfiguration = (PlexusConfiguration) systemSessionFactory .newRepositorySession(request) @@ -186,7 +193,8 @@ void httpConfigurationWithHttpHeadersTest() throws InvalidRepositoryException { settingsDecrypter, eventSpyDispatcher, information, - defaultTypeRegistry); + defaultTypeRegistry, + versionScheme); Map headers = (Map) systemSessionFactory .newRepositorySession(request) @@ -223,7 +231,8 @@ void connectTimeoutConfigurationTest() throws InvalidRepositoryException { settingsDecrypter, eventSpyDispatcher, information, - defaultTypeRegistry); + defaultTypeRegistry, + versionScheme); int connectionTimeout = (Integer) systemSessionFactory .newRepositorySession(request) @@ -264,7 +273,8 @@ void connectionTimeoutFromHttpConfigurationTest() throws InvalidRepositoryExcept settingsDecrypter, eventSpyDispatcher, information, - defaultTypeRegistry); + defaultTypeRegistry, + versionScheme); int connectionTimeout = (Integer) systemSessionFactory .newRepositorySession(request) @@ -299,7 +309,8 @@ void requestTimeoutConfigurationTest() throws InvalidRepositoryException { settingsDecrypter, eventSpyDispatcher, information, - defaultTypeRegistry); + defaultTypeRegistry, + versionScheme); int requestTimeout = (Integer) systemSessionFactory .newRepositorySession(request) @@ -340,7 +351,8 @@ void readTimeoutFromHttpConfigurationTest() throws InvalidRepositoryException { settingsDecrypter, eventSpyDispatcher, information, - defaultTypeRegistry); + defaultTypeRegistry, + versionScheme); int requestTimeout = (Integer) systemSessionFactory .newRepositorySession(request) @@ -358,7 +370,8 @@ void transportConfigurationTest() throws InvalidRepositoryException { settingsDecrypter, eventSpyDispatcher, information, - defaultTypeRegistry); + defaultTypeRegistry, + versionScheme); MavenExecutionRequest request = new DefaultMavenExecutionRequest(); request.setLocalRepository(getLocalRepository()); From 20809a042d97c2a5598ccd5fdcc34caf2a35af94 Mon Sep 17 00:00:00 2001 From: Tamas Cservenak Date: Mon, 8 Jan 2024 12:45:44 +0100 Subject: [PATCH 2/6] make use of staged resolver, complete the code change --- .../DefaultRepositorySystemSessionFactory.java | 6 ++---- pom.xml | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 5 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 793e02bb4609..b8c038dfc9d9 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 @@ -456,14 +456,12 @@ private VersionFilter buildVersionFilter(Map configProps) { filters.add(new HighestVersionFilter()); } else if (expression.startsWith("h(") && expression.endsWith(")")) { int num = Integer.parseInt(expression.substring(2, expression.length() - 1)); - // MRESOLVER-450 - // filters.add(new HighestVersionFilter(num)); + 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)); - // MRESOLVER-450 - // filters.add(new LowestVersionFilter(num)); + filters.add(new LowestVersionFilter(num)); } else if ("s".equals(expression)) { filters.add(new ContextualSnapshotVersionFilter()); } else if (expression.startsWith("e(") && expression.endsWith(")")) { diff --git a/pom.xml b/pom.xml index 13d6a5844a75..74a359dc507e 100644 --- a/pom.xml +++ b/pom.xml @@ -177,7 +177,7 @@ under the License. 1.26 1.0.0 4.0.1 - 2.0.0-alpha-5 + 2.0.0-alpha-6 2.0 0.9.0.M2 1.7.36 @@ -508,6 +508,19 @@ under the License. + + + + true + + + false + + maven-2059 + https://repository.apache.org/content/repositories/maven-2059 + + + From a88ab52b79ef2646cebd312192e5bc7c02fa8307 Mon Sep 17 00:00:00 2001 From: Tamas Cservenak Date: Thu, 11 Jan 2024 10:30:17 +0100 Subject: [PATCH 3/6] Use released --- pom.xml | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/pom.xml b/pom.xml index 74a359dc507e..45984bd6abd1 100644 --- a/pom.xml +++ b/pom.xml @@ -508,19 +508,6 @@ under the License. - - - - true - - - false - - maven-2059 - https://repository.apache.org/content/repositories/maven-2059 - - - From affc9eb32fc0c3f66b8e9789095621749f7b4a2b Mon Sep 17 00:00:00 2001 From: Tamas Cservenak Date: Thu, 11 Jan 2024 14:31:08 +0100 Subject: [PATCH 4/6] Fix parsing --- .../aether/DefaultRepositorySystemSessionFactory.java | 6 +++--- 1 file changed, 3 insertions(+), 3 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 b8c038dfc9d9..cfd435dbad89 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 @@ -93,7 +93,7 @@ @Named public class DefaultRepositorySystemSessionFactory { /** - * User property for version filters expression, a comma separated list of filters to apply. By default no version + * User property for version filters expression, a semicolon separated list of filters to apply. By default, no version * filter is applied (like in Maven 3). *

* Supported filters: @@ -103,7 +103,7 @@ public class DefaultRepositorySystemSessionFactory { *

  • "s" - contextual snapshot filter
  • *
  • "e(G:A:V)" - predicate filter (leaves out G:A:V from range, if hit, V can be range)
  • * - * Example filter expression: {@code "h(5),s,e(org.foo:bar:1)} will cause: ranges are filtered for "top 5" (instead + * Example filter expression: {@code "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 {@code org.foo:bar} is * being processed, version 1 is omitted. * @@ -448,7 +448,7 @@ private VersionFilter buildVersionFilter(Map configProps) { ArrayList filters = new ArrayList<>(); String filterExpression = (String) configProps.get(MAVEN_VERSION_FILTERS); if (filterExpression != null) { - List expressions = Arrays.stream(filterExpression.split(",")) + List expressions = Arrays.stream(filterExpression.split(";")) .filter(s -> s != null && !s.trim().isEmpty()) .collect(Collectors.toList()); for (String expression : expressions) { From f6fb866d65e96bd7e270c5eec534106da7c86052 Mon Sep 17 00:00:00 2001 From: Tamas Cservenak Date: Thu, 11 Jan 2024 14:55:24 +0100 Subject: [PATCH 5/6] Add test, tidy up --- ...DefaultRepositorySystemSessionFactory.java | 7 +- ...ultRepositorySystemSessionFactoryTest.java | 67 +++++++++++++++++-- 2 files changed, 66 insertions(+), 8 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 cfd435dbad89..7b1d55cbcf1c 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 @@ -240,7 +240,7 @@ public SessionBuilder newRepositorySessionBuilder(MavenExecutionRequest request) session.setArtifactDescriptorPolicy(new SimpleArtifactDescriptorPolicy( request.isIgnoreMissingArtifactDescriptor(), request.isIgnoreInvalidArtifactDescriptor())); - VersionFilter versionFilter = buildVersionFilter(configProps); + VersionFilter versionFilter = buildVersionFilter((String) configProps.get(MAVEN_VERSION_FILTERS)); if (versionFilter != null) { session.setVersionFilter(versionFilter); } @@ -444,9 +444,8 @@ public SessionBuilder newRepositorySessionBuilder(MavenExecutionRequest request) return session; } - private VersionFilter buildVersionFilter(Map configProps) { + private VersionFilter buildVersionFilter(String filterExpression) { ArrayList filters = new ArrayList<>(); - String filterExpression = (String) configProps.get(MAVEN_VERSION_FILTERS); if (filterExpression != null) { List expressions = Arrays.stream(filterExpression.split(";")) .filter(s -> s != null && !s.trim().isEmpty()) @@ -593,7 +592,7 @@ private org.apache.maven.repository.Proxy getProxy(ProxySelector selector, Artif return null; } - public void injectAuthentication(AuthenticationSelector selector, List repositories) { + private void injectAuthentication(AuthenticationSelector selector, List repositories) { if (repositories != null && selector != null) { for (ArtifactRepository repository : repositories) { repository.setAuthentication(getAuthentication(selector, repository)); diff --git a/maven-core/src/test/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactoryTest.java b/maven-core/src/test/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactoryTest.java index 43619467f99a..0f982ca34db6 100644 --- a/maven-core/src/test/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactoryTest.java +++ b/maven-core/src/test/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactoryTest.java @@ -41,15 +41,14 @@ 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.repository.RepositoryPolicy; +import org.eclipse.aether.util.graph.version.*; 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.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertThrowsExactly; +import static org.junit.jupiter.api.Assertions.*; /** * UT for {@link DefaultRepositorySystemSessionFactory}. @@ -408,6 +407,66 @@ void transportConfigurationTest() throws InvalidRepositoryException { properties.remove("maven.resolver.transport"); } + @Test + void versionFilteringTest() throws InvalidRepositoryException { + DefaultRepositorySystemSessionFactory systemSessionFactory = new DefaultRepositorySystemSessionFactory( + artifactHandlerManager, + aetherRepositorySystem, + null, + settingsDecrypter, + eventSpyDispatcher, + information, + defaultTypeRegistry, + versionScheme); + + MavenExecutionRequest request = new DefaultMavenExecutionRequest(); + request.setLocalRepository(getLocalRepository()); + + VersionFilter versionFilter; + + // single one + request.getUserProperties().put("maven.versionFilters", "s"); + versionFilter = systemSessionFactory.newRepositorySession(request).getVersionFilter(); + assertNotNull(versionFilter); + assertTrue(versionFilter instanceof ContextualSnapshotVersionFilter); + + request.getUserProperties().put("maven.versionFilters", "h"); + versionFilter = systemSessionFactory.newRepositorySession(request).getVersionFilter(); + assertNotNull(versionFilter); + assertTrue(versionFilter instanceof HighestVersionFilter); + + request.getUserProperties().put("maven.versionFilters", "h(5)"); + versionFilter = systemSessionFactory.newRepositorySession(request).getVersionFilter(); + assertNotNull(versionFilter); + assertTrue(versionFilter instanceof HighestVersionFilter); + + request.getUserProperties().put("maven.versionFilters", "l"); + versionFilter = systemSessionFactory.newRepositorySession(request).getVersionFilter(); + assertNotNull(versionFilter); + assertTrue(versionFilter instanceof LowestVersionFilter); + + request.getUserProperties().put("maven.versionFilters", "l(5)"); + versionFilter = systemSessionFactory.newRepositorySession(request).getVersionFilter(); + assertNotNull(versionFilter); + assertTrue(versionFilter instanceof LowestVersionFilter); + + request.getUserProperties().put("maven.versionFilters", "e(g:a:v)"); + versionFilter = systemSessionFactory.newRepositorySession(request).getVersionFilter(); + assertNotNull(versionFilter); + assertTrue(versionFilter instanceof PredicateVersionFilter); + + request.getUserProperties().put("maven.versionFilters", "e(g:a:[1,2])"); + versionFilter = systemSessionFactory.newRepositorySession(request).getVersionFilter(); + assertNotNull(versionFilter); + assertTrue(versionFilter instanceof PredicateVersionFilter); + + // chained + request.getUserProperties().put("maven.versionFilters", "h(5);s;e(org.foo:bar:1)"); + versionFilter = systemSessionFactory.newRepositorySession(request).getVersionFilter(); + assertNotNull(versionFilter); + assertTrue(versionFilter instanceof ChainedVersionFilter); + } + protected ArtifactRepository getLocalRepository() throws InvalidRepositoryException { File repoDir = new File(getBasedir(), "target/local-repo").getAbsoluteFile(); From 9e97ab19a905dd9865fddeb02cc2c6395f192bf7 Mon Sep 17 00:00:00 2001 From: Tamas Cservenak Date: Thu, 11 Jan 2024 18:27:28 +0100 Subject: [PATCH 6/6] Reformat --- .../internal/aether/DefaultRepositorySystemSessionFactory.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 3caf62e01e20..add1a08f2ec3 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 @@ -70,8 +70,8 @@ import org.eclipse.aether.repository.RepositoryPolicy; import org.eclipse.aether.repository.WorkspaceReader; import org.eclipse.aether.resolution.ResolutionErrorPolicy; -import org.eclipse.aether.util.graph.version.*; import org.eclipse.aether.util.graph.manager.ClassicDependencyManager; +import org.eclipse.aether.util.graph.version.*; import org.eclipse.aether.util.listener.ChainedRepositoryListener; import org.eclipse.aether.util.repository.AuthenticationBuilder; import org.eclipse.aether.util.repository.ChainedLocalRepositoryManager;