You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sj...@apache.org on 2022/12/02 16:58:00 UTC
[maven] branch maven-3.9.x updated: [MNG-7612] Chained LRM
This is an automated email from the ASF dual-hosted git repository.
sjaranowski pushed a commit to branch maven-3.9.x
in repository https://gitbox.apache.org/repos/asf/maven.git
The following commit(s) were added to refs/heads/maven-3.9.x by this push:
new 2dc7a356d [MNG-7612] Chained LRM
2dc7a356d is described below
commit 2dc7a356d3912a92af2c6e5e23604b084f5ca748
Author: Tamas Cservenak <ta...@cservenak.net>
AuthorDate: Thu Dec 1 19:53:00 2022 +0100
[MNG-7612] Chained LRM
Adds new feature: Chained Local Repository Manager.
---
https://issues.apache.org/jira/browse/MNG-7612
---
.../DefaultRepositorySystemSessionFactory.java | 42 +++++++++++++++++++++-
1 file changed, 41 insertions(+), 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 bc0b4a4a6..8d1bc07e4 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
@@ -18,6 +18,10 @@
*/
package org.apache.maven.internal.aether;
+import static java.util.stream.Collectors.toList;
+
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
@@ -48,12 +52,15 @@ import org.eclipse.aether.ConfigurationProperties;
import org.eclipse.aether.DefaultRepositorySystemSession;
import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.repository.LocalRepository;
+import org.eclipse.aether.repository.LocalRepositoryManager;
import org.eclipse.aether.repository.NoLocalRepositoryManagerException;
import org.eclipse.aether.repository.RepositoryPolicy;
import org.eclipse.aether.repository.WorkspaceReader;
import org.eclipse.aether.resolution.ResolutionErrorPolicy;
import org.eclipse.aether.spi.localrepo.LocalRepositoryManagerFactory;
+import org.eclipse.aether.util.ConfigUtils;
import org.eclipse.aether.util.repository.AuthenticationBuilder;
+import org.eclipse.aether.util.repository.ChainedLocalRepositoryManager;
import org.eclipse.aether.util.repository.DefaultAuthenticationSelector;
import org.eclipse.aether.util.repository.DefaultMirrorSelector;
import org.eclipse.aether.util.repository.DefaultProxySelector;
@@ -65,6 +72,23 @@ import org.eclipse.sisu.Nullable;
*/
@Named
public class DefaultRepositorySystemSessionFactory {
+ /**
+ * User property for chained LRM: list of "tail" local repository paths (separated by comma), to be used with
+ * {@link ChainedLocalRepositoryManager}.
+ * Default value: {@code null}, no chained LRM is used.
+ *
+ * @since 3.9.0
+ */
+ private static final String MAVEN_REPO_LOCAL_TAIL = "maven.repo.local.tail";
+
+ /**
+ * User property for chained LRM: should artifact availability be ignored in tail local repositories or not.
+ * Default: {@code true}, will ignore availability from tail local repositories.
+ *
+ * @since 3.9.0
+ */
+ private static final String MAVEN_REPO_LOCAL_TAIL_IGNORE_AVAILABILITY = "maven.repo.local.tail.ignoreAvailability";
+
private static final String MAVEN_RESOLVER_TRANSPORT_KEY = "maven.resolver.transport";
private static final String MAVEN_RESOLVER_TRANSPORT_DEFAULT = "default";
@@ -354,7 +378,23 @@ public class DefaultRepositorySystemSessionFactory {
session.setLocalRepositoryManager(repoSystem.newLocalRepositoryManager(session, localRepo));
}
} else {
- session.setLocalRepositoryManager(repoSystem.newLocalRepositoryManager(session, localRepo));
+ LocalRepositoryManager lrm = repoSystem.newLocalRepositoryManager(session, localRepo);
+
+ String localRepoTail = ConfigUtils.getString(session, null, MAVEN_REPO_LOCAL_TAIL);
+ if (localRepoTail != null) {
+ boolean ignoreTailAvailability =
+ ConfigUtils.getBoolean(session, true, MAVEN_REPO_LOCAL_TAIL_IGNORE_AVAILABILITY);
+ List<LocalRepositoryManager> tail = new ArrayList<>();
+ List<String> paths = Arrays.stream(localRepoTail.split(","))
+ .filter(p -> p != null && !p.trim().isEmpty())
+ .collect(toList());
+ for (String path : paths) {
+ tail.add(repoSystem.newLocalRepositoryManager(session, new LocalRepository(path)));
+ }
+ session.setLocalRepositoryManager(new ChainedLocalRepositoryManager(lrm, tail, ignoreTailAvailability));
+ } else {
+ session.setLocalRepositoryManager(lrm);
+ }
}
}